Docker Gitlab Gitalb-runner 实现自动化部署
前言
默认已经安装过 docker 和 docker-compose ,官网有教程,很详细
注意:gitlab 很耗内存,如果你内存只有 2G 左右会出现问题
之前有用 docker 部署过 gitlab-runner 和 gitlab 的话要把所有挂载的文件删掉,可能会影响到本次容器部署
废话少说,直接开始
用 Docker 部署 gitlab
1、搜索镜像
用 docker search gitlab
搜索一个常用的镜像
这里使用 gitlab/gitlab-ce
2、运行容器
编写 docker-compose.yml
文件将容器运行
version: "3"
services:
gitlab:
container_name: gitlab
image: `gitlab/gitlab-ce`
hostname: '{没有域名填写服务器 ip}'
ports:
- "10022:22"
- "10080:10080"
- "10443:10443"
volumes:
- "{自定义路径}/gitlab/data:/var/opt/gitlab"
- "{自定义路径}/gitlab/config:/etc/gitlab"
- "{自定义路径}/gitlab/log:/var/log/gitlab"
privileged: true
输入 docker-compose up -d
运行容器
3、修改配置文件
修改 gitlab.rb
文件,在 {自定义路径}/gitlab/config
路径下
添加以下配置
external_url 'http://{你的 ip 或者域名}:10080
gitlab_rails['gitlab_shell_ssh_port'] = 10022
或者修改配置文件里的配置也可以
4、访问 gitlab 并设置密码
在浏览器输入 http://{你的 ip 或者域名}:10080
访问 gitlab,第一次会让设置密码,用户名为 root
如果访问失败或者 502 就再等等,这东西启动贼慢
用 Docker 部署 gitlab-runner
1、搜索镜像
用 docker search gitlab-runner
搜索一个常用的镜像
这里使用 gitlab/gitlab-runner
2、运行 gitlab-runner
version: "3"
services:
gitlab-runner:
container_name: gitlab-runner
image: gitlab/gitlab-runner
volumes:
- "{自定义路径}/gitlab-runner-config:/etc/gitlab-runner"
- "/var/run/docker.sock:/var/run/docker.sock"
environment:
- "CA_CERTIFICATES_PATH=/DIR/CERT"
restart: always
编写好 docker-compose.yml
后输入 docker-compose up -d
运行
新建项目并且注册 gitlab-runner
1、新建仓库,并新建 SpringBoot 项目上传
访问 gitlab 创建一个新的仓库
点击 Create project 创建
用 IDEA 创建一个新的 SpringBoot 项目
写好一个测试接口
@GetMapping("test")
public String test() {
return "test"
}
在项目根目录右击 Git Bash
输入以下命令
git init
git remote add origin 你的项目地址
git add .
git commit -m "Initial commit"
git push -u origin master
2、注册 gitlab-runner
在服务器输入,docker exec -it gitlab-runner gitlab-runner register
根据提示依次输入
url 和 token 需要进入项目,选择 Setting -> CI/CD -> Runner,获取 url 和 token
注册成功后进入 gitlab-runner 的配置路径下,找到 config.toml 文件
修改添加这三行代码
3、编写 Dockerfile、docker-compose.yml 和 .gitlab-ci.yml 文件,完成自动部署
首先需要制作一个 maven + jdk8 的镜像
Dockerfile:
FROM openjdk:8u171
FROM maven:3.6.3-openjdk8
# 可以上 docker hub 上搜索自己需要的版本
写好后执行 docker build -t maven-build .
生成镜像
之后在SpringBoot项目的根路径下编写以下三个文件
Dockerfile:
# jdk8
FROM openjdk:8u171
COPY ./target/{你的项目名}-0.0.1-SNAPSHOT.jar /home/
WORKDIR /home
EXPOSE {你需要暴露的端口}
ENTRYPOINT ["java", "-jar", "{你的项目名}-0.0.1-SNAPSHOT.jar"]
CMD ["/bin/bash"]
docker-compose.yml:
version: "3"
services:
spring-boot-practice:
build:
context: .
dockerfile: Dockerfile
container_name: spring-boot-test
image: spring-boot-test
ports:
- "{服务器}:{容器}"
.gitlab-ci.yml:
image: docker:stable
variables:
MAVEN_OPTS: "-Dmaven.repo.local=${CI_PROJECT_DIR}/.m2"
MAVEN_CLI_OPTS: "-s .m2/settings.xml --batch-mode"
cache:
key: ${CI_COMMIT_REF_SLUG} # cache is for per branch
paths:
# 使用自行配置的 settings.xml,在项目根路径下创建.m2文件夹,添加 settings.xml
- ${CI_PROJECT_DIR}/.m2
build-job:
image: maven-build
tags:
- {你注册 runner 填写的 tags}
stage: build
script:
- pwd
- ls
- mvn $MAVEN_CLI_OPTS clean package
artifacts:
paths:
- target/{你的项目名}-0.0.1-SNAPSHOT.jar
test-job:
tags:
- {你注册 runner 填写的 tags}
stage: test
script:
- echo "This job tests something"
deploy-prod:
image: docker-compose
tags:
- {你注册 runner 填写的 tags}
stage: deploy
script:
- docker build -t spring-boot-test .
- docker-compose up -d
- docker images|grep none|awk '{print $3 }'|xargs docker rmi
修改 SpringBoot 项目接口
@GetMapping("test")
public String test() {
return "gitlab-ci"
}
提交代码后耐心等待
部署成功后访问测试接口,显示 gitlab-ci
自动部署成功!