文章目錄
假設用戶在本機中有完善的docker執行環境以及k8s環境
本文 爲gitlab shared runner執行環境部署的用戶可以做參考(gitlab免費版本)
gitlab CI/CD 自動構建步驟
概念 1 runner的執行環境
此環境是用來執行runner所需要的環境,在CI/CD領域 gitlab runner等價於jenkins,jenkins可以安裝各種插件用來自動執行腳本。因爲使用gitlab作爲代碼存放的倉庫,所以
安裝環境如下
1. 本地系統(非docker環境)
2. docker中
3. k8s三種環境
本篇使用docker環境,安裝runner,隔離環境,方便部署
1. gitlab 運行命令 查看gitlab配置
統一配置文件,找到gitlab的config,並在gitlab中新建 gitlab-runner文件
# docker run --detach --hostname 192.168.1.163 --publish 443:443 --publish 80:80 --publish 2222:22 --name gitlab --restart always --volume /home/gitlab/config:/etc/gitlab --vo
lume /home/gitlab/logs:/var/log/gitlab --volume /home/gitlab/data:/var/opt/gitlab gitlab/gitlab-ee:latest
2. gitlabrunner 執行一個可以運行runner的docker容器
runner配置文件放在 gitlab/gitlab-runner/config目錄中
$ sudo docker run -d --name gitlab-runner --restart always \
-v /home/gitlab/gitlab-runner/config:/etc/gitlab-runner \
-v /var/run/docker.sock:/var/run/docker.sock \
gitlab/gitlab-runner:latest
3.進入 gitlab-runner 內部構建mvn docker 以及其他文件, 用來生成一個鏡像
$ sudo docker exec -it gitlab-runner /bin/bash
3.1 兩種方式創建executor
a) 進入gitlab-runner容器 手動根據提示按步驟創建容器,不能掛載,只能通過配置文件修改
# gitlab-runner register
Runtime platform arch=amd64 os=linux pid=1999 revision=4c96e5ad version=12.9.0
Running in system-mode.
$ Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://192.168.1.163/
$ Please enter the gitlab-ci token for this runner:
ajsdjflajsldjflasjdlf
$ Please enter the gitlab-ci description for this runner:
[a019bb289bd5]: test for docker quick
$ Please enter the gitlab-ci tags for this runner (comma separated):
$
$ Registering runner... succeeded runner=ajsdjflaj
$ Please enter the executor: parallels, ssh, virtualbox, shell, docker+machine, docker-ssh+machine, kubernetes, custo
$ m, docker, docker-ssh:docker
$ Please enter the default Docker image (e.g. ruby:2.6):
192.168.1.163/maven:3.6.2
$ Runner registered successfully. Feel free to start it, but if it's running already the config should be automatical
$ ly reloaded!
創建好之後,爲了讓子鏡像能夠執行宿主容器中的docker命令
在gitlab runner配置文件中新增 volumes 字段,並配合引進docker
[[runners]]
name = "test for docker quick"
url = "http://192.168.1.163/"
token = "asdfasdfasdfasdf"
executor = "docker"
[runners.custom_build_dir]
[runners.cache]
[runners.cache.s3]
[runners.cache.gcs]
[runners.docker]
tls_verify = false
image = "192.168.1.163/maven:3.6.2"
privileged = false
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache","/root/.docker/config.json:/root/.docker/config.json","/var/run/docker.sock:/var/run/docker.sock","/root/.m2:/root/.m2","/usr/bin/docker:/usr/bin/docker"]
shm_size = 0
b) 或者使用gitlab-ci-multi-runner命令創建,同上
# gitlab-ci-multi-runner register -n \
--url http://192.168.1.163/ \
--registration-token asdfasdfasdfasdfasdf \
--description "has no docker shell in enviroment standard CI/CD build by maven project and build to docker images and deploy to k8s cluster" \
--docker-privileged=true \
--docker-pull-policy="if-not-present" \
--docker-image "192.168.1.163/maven_for_docker:3.6.2" \
--docker-volumes /root/.docker/config.json:/root/.docker/config.json \
--docker-volumes /var/run/docker.sock:/var/run/docker.sock \
--docker-volumes /root/.m2:/root/.m2 \
--docker-volumes /usr/bin/docker:/usr/bin/docker \
--executor docker
注 :
給executor作標籤 --tag-list=dev,uat,prod \
4 創建鏡像
4.1創建一個支持kubectl命令的容器
配置文件: Dockerfile_kubectl 以及 config文件
詳情請看
$ sudo docker build --build-arg KUBE_LATEST_VERSION="v1.13.6" -t 192.168.1.163/imooc/kubectl:1.13.6.1 -f Dockerfile_kubectl.
<!-- 查看是否可用 -->
$ sudo docker run -it 192.168.1.163/imooc/kubectl:1.13.6.1 /bin/sh
$ sudo docker push 192.168.1.163/maven_for_docker:3.6.2
4.2創建一個maven倉庫
dockerfile 請看 Dockerfile_maven
sudo docker build --build-arg KUBE_LATEST_VERSION="v1.13.6" -t 192.168.1.163/imooc/kubectl:1.13.6.1 -f Dockerfile_maven.
5. 核心自動部署文件 .gitlab-ci.yml
請查看當前文件目錄中的.gitlab-ci.yml
後記
docker executor是比較方便,但是當項目增多,runner往往會處於堵塞狀態,此時可以是用k8s,作爲runner執行的載體,用於分佈式打包部署,並且安全穩定,易於擴展。
可以參考資料