本文详细介绍如何在 Linux 系统使用 Docker 安装 Gitlab、Gitlab-Runner 并实现项目的 CICD
一、安装 Gitlab
1、拉取镜像并启动
由于服务器的 80
端口可能被占用,所以这里我们改成了其他端口来启动
docker run -d -p 2443:443 -p 5678:80 -p 2222:22 --name gitlab --restart always -v/srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /src/gitlab/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce
2、修改配置文件
修改 gitlab.yml 文件
vim /src/gitlab/data/gitlab-rails/etc/gitlab.yml
找到如下配置,修改 host 为你服务的 IP 或者域名(不能加http://
),修改完毕后保存退出
修改 gitlab.rb 文件
vim /srv/gitlab/config/gitlab.rb
找到 external_url
,默认是被注释的,要打开,并填写暴露出去的http://ip:port
,IP
一定要和 gitlab.yml
文件配置的相同,port
为你启动时指定的,我们这里是5678
,最后加上 ssh 协议下使用的 IP 和端口(这里的端口是你启动时指定的,我们这里是2222
),最后保存并退出
停止并移除之前启动的 gitlab
# 停止
docker stop gitlab
# 移除
docker rm gitlab
重新启动 gitlab
这里要将容器端口改为 5678
docker run -d -p 2443:443 -p 5678:5678 -p 2222:22 --name gitlab --restart always -v/srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /src/gitlab/data:/var/opt/gitlab docker.io/gitlab/gitlab-ce
二、安装 Gitlab-Runner
可以在某个项目里 “settings –> CICD –> Runner 进行配置,也可以在 GitLab 主设置页安装共享 Runner,安装方法都一致
1、拉取 Runner 镜像并启动
docker run -d --name gitlab-runner --restart always -v /srv/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
2、进入 Runner 容器内
docker exec -it gitlab-runner bash
3、运行以下命令
gitlab-runner register
输入 Gitlab 实例的地址
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com)
http://xxx
输入 token
Please enter the gitlab-ci token for this runner
xxx
输入 Runner 的描述
Please enter the gitlab-ci description for this runner
[hostname] my-runner
输入与 Runner 关联的标签
Please enter the gitlab-ci tags for this runner (comma separated):
my-tag,another-tag
输入 Ruuner 的执行者
Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
docker
如果上面执行者为 docker,需要你在 .gitlab-ci.yml
中指定 docker 版本
Please enter the Docker image (eg. ruby:2.1):
alpine:latest
通过以上命令后,就可以在 gitlab 中查看到了这个刚刚创建的 runner
4、修改 Runner 配置文件
vim /srv/gitlab-runner/config/config.toml
找到 volumes
配置,修改为如下,分别是挂载了宿主机的 docker 和配置 Maven 的缓存,提高效率
volumes = ["/cache","/var/run/docker.sock:/var/run/docker.sock","/data/.m2/:/.m2/"]
在 volumes
配置下方增加一行配置,防止 Runner 重复拉取镜像
pull_policy = "if-not-present"
重启 Runner 即可
docker restart gitlab-runner
三、创建 SpringBoot 项目测试 CICD
这里就不演示如何创建项目了,不会 SpringBoot 的自行去学习,这里只展示 .gitlab-ci.yml
文件
1、在项目根目录创建个Dockerfile
FROM openjdk:8-jdk
COPY target/*.jar swarm-test.jar
EXPOSE 8000
ENTRYPOINT ["java","-jar","swarm-test.jar"]
2、项目根目录创建 .gitlab-ci.yml
文件
# 因为我们 Runner 执行器设置为 docker, 所以这里需要指定 docker 的版本
image: docker:stable
# 定义三个阶段
stages:
- compile
- build
- run
# 定义个变量, 指定 maven 下载的 jar 包存放的位置
variables:
MAVEN_OPTS: "-Dmaven.repo.local=/.m2"
# 第一阶段
compile:
# 打包用到了 maven, 所有需要拉取 maven 镜像, 这是我自己构建的阿里云 maven 私服的 maven 镜像
image: registry.cn-hangzhou.aliyuncs.com/gjing/maven:1.0
# 指定阶段
stage: compile
# 运行脚本, 使用变量时要用到 $ 符号
script:
- mvn $MAVEN_OPTS clean package -Dmaven.test.skip=true
# 只作用在 master 分支
only:
- master
# 创建 runner 时指定的 tag
tags:
- test
# 编译后有产物, 所以要指定下过期时间和路径, 以供于其他阶段使用
artifacts:
expire_in: 1 days
paths:
- target/*.jar
# 第二阶段, 这里不再一一介绍, 和第一阶段差不多
build:
stage: build
script:
- docker build -t registry.cn-hangzhou.aliyuncs.com/gjing/test:1.0 .
- docker login --username xxx --password xxx registry.cn-hangzhou.aliyuncs.com
- docker push registry.cn-hangzhou.aliyuncs.com/gjing/test:1.0
only:
- master
tags:
- test
run:
stage: run
script:
- docker run -d --name my-test -p 8000:8000 registry.cn-hangzhou.aliyuncs.com/gjing/test:1.0
only:
- master
tags:
- test
3、将项目提交到 Gitlab 仓库即可
提交到仓库的 master 分支后,会自动执行 CICD,第一次会比较慢,因为要拉取一些镜像和下载目前本地库没有的 jar 包,效果图如下
本文到此就结束了,有啥疑问可以在评论区评论,或者有啥更好的建议也可以在评论区说明