gitlab shared runner 實戰篇

假設用戶在本機中有完善的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

github gitlabCICD草稿

gitlab 官方.gitlab-ci.yml 配置目錄篇

後記

docker executor是比較方便,但是當項目增多,runner往往會處於堵塞狀態,此時可以是用k8s,作爲runner執行的載體,用於分佈式打包部署,並且安全穩定,易於擴展。
可以參考資料

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章