CI,Continuous Integration,持續集成,是軟體開發過程中一個非常重要的環節,在網際網路敏捷開發的過程中,持續集成通常用來進行日常編譯和自動化測試,來保證及時發現提交的問題,避免影響項目進度。
通常持續集成的過程包括:
不同的項目可能步驟有所不同,一些更加規範的公司的項目可能會加入靜態代碼檢查,也有不少的小項目迫於進度和QA的工作壓力,可能連測試過程都沒有。
GitLab CI/CD 轉載自:https://docs.gitlab.com/ee/ci/
CI工具有很多,目前最為常用應該是Jenkins。Jenkins通常包括一個master和很多個slave。master用於配置和組織節點、任務,slave則用來真正執行配置好的任務。因為用戶群體的龐大,Jenkins上的各種插件,尤其是很多可視化插件都非常豐富,可以幫助很多新手快速配置所需的任務。
gitlab-ci是git官方的持續集成工具,在Git工程管理頁面上,也有專門的CI配置和展示頁。
Github上許多優秀的開源項目的Readme.md中,可以看到有如下圖中「build|passing」的圖標,就是通過markdown元素引用了當前版本CI/CD的結果的展示。
隨著代碼更多地通過Git進行管理,gitlab-ci也成為了常見的CI平臺。就我理解,gitlab-ci是一個簡易版的jenkins,git伺服器兼任了Jenkins master的功能,而我只需要準備好一個slave即可。而且,gitlab-ci的runner支持多重環境,尤其是Docker還有專屬的配置支持。配置過程也非常的簡便無腦,比起Jenkins的slave配置可以說是完勝了。
之前我一直都是在公司的Jenkins服務平臺上做CI(其實也沒做過幾個)的,由於Jenkins權限管控的問題,不方便在slave上嘗試和排查環境問題(可以看我之前的oclint出現環境問題的排查)。剛好現在的公司項目使用的是gitlab-ci,因此就想學習一下和嘗試一下。
安裝docker是為了後面跑runner
參考 https://docs.docker.com/install/linux/docker-ce/centos/
curl -sSL https://get.docker.com/ | shmacOS 我們可以使用 Homebrew 來安裝 Docker。
Homebrew 的 Cask 已經支持 Docker for Mac,因此可以很方便的使用 Homebrew Cask 來進行安裝:$ brew cask install docker
==> Creating Caskroom at /usr/local/Caskroom
==> We'll set permissions properly so we won't need sudo in the future
Password: # 輸入 macOS 密碼
==> Satisfying dependencies
==> Downloading https://download.docker.com/mac/stable/21090/Docker.dmg
######################################################################## 100.0%
==> Verifying checksum for Cask docker
==> Installing Cask docker
==> Moving App 'Docker.app' to '/Applications/Docker.app'.
🍺 docker was successfully installed!在載入 Docker app 後,點擊 Next,可能會詢問你的 macOS 登陸密碼,你輸入即可。之後會彈出一個 Docker 運行的提示窗口,狀態欄上也有有個小鯨魚的圖標()。
2.安裝gitlab ci runner參考連結:https://docs.gitlab.com/runner/install/linux-manually.html
使用二進位文件安裝# Linux x86-64
sudo curl -L --output /usr/local/bin/gitlab-runner https://gitlab-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-runner-linux-amd64
sudo chmod +x /usr/local/bin/gitlab-runner
sudo useradd --comment 'GitLab Runner' --create-home gitlab-runner --shell /bin/bash
sudo gitlab-runner install --user=gitlab-runner --working-directory=/home/gitlab-runner
sudo gitlab-runner start查看是否運行正常
root@i-klhcs1uo:~# gitlab-runner status
Runtime platform arch=amd64 os=linux pid=16705 revision=c127439c version=13.0.0
gitlab-runner: Service is running!➜ [/Users/mac] brew install gitlab-runner
➜ [/Users/mac] brew services start gitlab-runner
➜ [/Users/mac] gitlab-runner status
Runtime platform arch=amd64 os=darwin pid=61606 revision=21cb397c version=13.0.1
gitlab-runner: Service is running!3.設置Docker權限
為了讓gitlab-runner能正確的執行docker命令,需要把gitlab-runner用戶添加到docker group裡,然後重啟docker和gitlab ci runner
usermod -aG docker gitlab-runner
service docker restart
gitlan-runner restart4.gitlab-runner註冊
註冊流程是獲取runner token >> 註冊
4.1 gitlab-runner的類型shared :運行整個平臺項目的作業(gitlab)group:運行特定group下的所有項目的作業(group)specific: 運行指定的項目作業(project)首先得知道gitlab-runner的類型有哪些,可以在不同的界面獲取runner token就會生成不同類型的runner。。
4.2 進行註冊
gitlab-runner是支持分布式的,可以運行在各種環境,極大的方便開發和測試,當安裝好gitlan-runner之後,需要進行註冊到gitlab上,進行關聯,首先登陸gitlab獲取url和tocken
獲取shared類型runnertoken
進入系統設置 -> Runners
獲取group類型的runnertoken
進入group -> Settings -> CI/CD -> Runners -> Group Runners
獲取specific類型的runnertoken
進入具體的項目 -> Settings -> CI/CD -> Runners -> Specific Runners➜ [/Users/mac] gitlab-runner register
Runtime platform arch=amd64 os=darwin pid=61621 revision=21cb397c version=13.0.1
WARNING: Running in user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com/):
http://gitlab.example.com/
Please enter the gitlab-ci token for this runner:
6-uZ1ndZ2NRGp8_TghnL
Please enter the gitlab-ci description for this runner:
[Double-dong.local]: gitlab-ci
Please enter the gitlab-ci tags for this runner (comma separated):
python3.4
Registering runner... succeeded runner=6-uZ1ndZ
Please enter the executor: docker+machine, kubernetes, ssh, virtualbox, docker-ssh, parallels, shell, docker-ssh+machine, custom, docker:
docker
Please enter the default Docker image (e.g. ruby:2.6):
python:3.4
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
➜ [/Users/mac] gitlab-runner verify
Runtime platform arch=amd64 os=darwin pid=61635 revision=21cb397c version=13.0.1
WARNING: Running in user-mode.
WARNING: Use sudo for system-mode:
WARNING: $ sudo gitlab-runner...
Verifying runner... is alive runner=NkYLeMbb
➜ [/Users/mac] gitlab-runner list
Runtime platform arch=amd64 os=darwin pid=61640 revision=21cb397c version=13.0.1
Listing configured runners ConfigFile=/Users/mac/.gitlab-runner/config.toml
gitlab-ci Executor=docker Token=NkYLeMbbpJ2NyuwxaVKG URL=http://gitlab.example.com/
token:項目的token,用於關聯runner和項目name:runner的名字,用於區分runnertags:用於匹配任務(jobs)和執行任務的設備(runners)其中url和token在項目的CI配置頁上可以找到。name只是用來區分兩個runner,沒有特殊的作用。tags這個屬性,job和runner都有,用來匹配任務和執行任務的runner。job的tags屬性下一篇會提到,也可以自行查閱.gitlab-ci.yml的語法。runner的tag可以有多個,註冊時用逗號(comma)分隔即可。當某個job的tag是當前runner tags的一個子集時,這個job就可以被分配到當前runner上執行。
舉個慄子runner的tag設為:python2.7,python3.4job的tag設為:python2.7或python3.4,macos就可以在這個runner上執行。job的tag設為:java,這個job就不會被分配到這個runner上。
executor就是執行job的環境,通常我們都會選擇docker,如果有其他需要的也可以自行查閱文檔。
當我們完成設置以後,可以通過vi ~/.gitlab-runner/config.toml打開runner的配置文件,剛才所填寫的信息都會記錄在其中。如果配置了多個runner,就會像圖中一樣,出現兩個runners的section。
註冊成功,返回到gitlab已經是激活的狀態。➜ [/Users/mac] gitlab-runner register \
--non-interactive \
--executor "shell" \
--url "http://gitlab.example.com/" \
--registration-token "AvpQDzBCL66sYKyURChH" \
--description "devops-runner" \
--tag-list "build,deploy" \
--run-untagged="true" \
--locked="false" \
--access-level="not_protected"⚠️:這裡說一下如果gitlab伺服器開啟了https,則gitlab-runner在註冊的時候需要把證書的籤名文件,解決辦法如下:
➜ [/Users/mac] gitlab-runner register \
--non-interactive \
--tls-ca-file=/etc/gitlab/ssl/gitlab.example.com.crt \
--url "https://gitlab.example.com/" \
--registration-token "AvpQDzBCL66sYKyURChH" \
--executor "docker" \
--docker-image maven:latest \
--description "runner " \
--tag-list "run" \
--run-untagged \
--locked="false"
Running in system-mode.
Registering runner... succeeded runner=AvpQDzBC
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!4.3 註冊之後的效果image.png
參考文章:
https://www.jianshu.com/p/30e3f2940078
https://docs.gitlab.com/11.9/runner/register/index.html....