本文詳細介紹如何在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包,效果圖如下
本文到此就結束了,有啥疑問可以在評論區評論,或者有啥更好的建議也可以在評論區說明