這兩天在折騰持續集成和交付,公司考慮使用gitlab自帶的ci/cd來處理,特此記下來整個流程步驟.
好記性不如一支爛筆頭---尼古拉斯-古人言
第一步: 安裝gitlab,這個自然不用多說
第二步: 使用docker容器安裝gitlab-runner組件
新建一個docker-compose.yml文件,內容如下,在linux系統下使用 docker-compose up -d 命令跑起來就好(如果不會,可度娘搜索安裝和使用)
1 version: "3.3" 2 services: 3 gitlab-runner: 4 image: gitlab/gitlab-runner:latest 5 container_name: gitlab-runner 6 #總是重啟后啟動 7 restart: always 8 privileged: true 9 volumes: 10 - ./config:/etc/gitlab-runner 11 - /var/run/docker.sock:/var/run/docker.sock 12 - /bin/docker:/bin/docker 13 networks: 14 - gitlab_runner_net 15 16 networks: 17 gitlab_runner_net: 18 driver: bridge
第三步: 安裝完之后,需要將安裝好的gitlab-runner注冊到gitlab中去,這里我們就需要用到如下圖中紅色框框內的token令牌
1.進入容器內部
1 docker exec -it 96d4d3170eaf /bin/bash
2.開啟注冊
1 gitlab-runner register
3.輸入上面的命令后根據提示輸入指定信息
1 Enter the GitLab instance URL (for example, https://gitlab.com/): 2 http://192.168.1.250:9080/ #gitlab的地址 3 Enter the registration token: 4 XLccjJJ_mDkNRyzdyXsY #上面圖片中的token,這樣允許gitlab-runner免密連接gitlab 5 Enter a description for the runner: 6 [96d4d3170eaf]: signbox-service-message shell #這里輸入備注信息,可留空 7 Enter tags for the runner (comma-separated): 8 deploy,master,dev #這里輸入標簽,最好是和git分支中tag的對應起來 9 Registering runner... succeeded runner=XLccjJJ_ 10 Enter an executor: docker-ssh, shell, virtualbox, docker-ssh+machine, kubernetes, custom, docker, parallels, ssh, docker+machine: 11 shell #這里直接輸入shell就好 12 Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
完成注冊后,在gitlab中就能看到注冊的gitlab-runner信息了,如下圖
第四步: 添加gitlab-runner賬號授權
1.添加一個 gitlab-runner 用戶(一般這個用戶是不存在的)
1 sudo adduser gitlab-runner
2.將gitlab-runner用戶添加到docker組內
1 sudo gpasswd -a gitlab-runner docker
3.查看docker組中是否已經成功(如果出現:docker:x:973:root,gitlab-runner則成功)
1 cat /etc/group |grep docker
4.重啟docker容器服務
1 sudo systemctl restart docker
5.給docker.sock設置權限
1 sudo chmod a+rw /var/run/docker.sock
第五步: 在項目根目錄下創建文件名為 .gitlab-ci.yml 的文件,此文件是用來構建打包部署的
1 stages: 2 - build 3 - deploy 4 5 build: 6 stage: build 7 script: 8 - cd ./ 9 - docker build -f "./src/Test.Web/Dockerfile" --force-rm -t image-test --label "com.microsoft.created-by=visual-studio" --label "com.microsoft.visual-studio.project-name=Test.Web" "./" 10 only: 11 - master 12 13 deploy: 14 stage: deploy 15 script: 16 - cd ./ 17 - docker stop image-test18 - docker rm image-test19 - docker run -d --name image-test -p 8080:80 image-test-app20 only: 21 - master
我這里把構建分為了兩個階段,一個是編譯,另外一個是部署
1.build階段負責把源代碼編譯成一個容器鏡像.這里需要注意的地方就是 cd 只cd到根目錄下,不要直接cd到Dockerfile文件所在目錄,而是在編譯命令中指定Dockerfile文件目錄
2.根據編譯好的容器鏡像啟動容器.這里需要注意的是需要大家多一步判斷如果容器為新建則要排除停止和刪除容器,否則會出現部署不通過的錯誤
第六步: 使用git提交代碼就會自動觸發構建(當每一步都是綠色時,則表示構建成功),如下圖
溫馨提示:從圖1中進入圖2中紅色框框項勾選上,則可以即使提交代碼時沒有tag標簽也可以支持構建
圖1
圖2
補充:在DOCKER容器中安裝 docker-compose 的文檔地址:https://docs.docker.com/compose/install/