這兩天在折騰持續整合和交付,公司考慮使用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