gitlab-ci全稱是gitlab continuous integration的意思兴猩,也就是持續(xù)集成期吓。中心思想是當每一次push到gitlab的時候,都會觸發(fā)一次腳本執(zhí)行倾芝,然后腳本的內容包括了測試讨勤,編譯,部署等一系列自定義的內容晨另。
原理
自動部署涉及了若干個角色潭千,主要介紹如下
GitLab-CI
這個是一套配合GitLab使用的持續(xù)集成系統(tǒng),是GitLab自帶的借尿,也就是你裝GitLab的那臺服務器上就帶有的刨晴。無需多考慮。.gitlab-ci.yml的腳本解析就由它來負責路翻。GitLab-Runner
這個是腳本執(zhí)行的承載者狈癞,.gitlab-ci.yml的script部分的運行就是由runner來負責的。GitLab-CI瀏覽過項目里的.gitlab-ci.yml文件之后茂契,根據里面的規(guī)則蝶桶,分配到各個Runner來運行相應的腳本script。這些腳本有的是測試項目用的掉冶,有的是部署用的真竖。.gitlab-ci.yml
這個是在git項目的根目錄下的一個文件,記錄了一系列的階段和執(zhí)行規(guī)則厌小。GitLab-CI在push后會解析它恢共,根據里面的內容調用runner來運行。Pipeline
一次 Pipeline 其實相當于一次構建任務召锈,里面可以包含多個流程旁振,如安裝依賴、運行測試、編譯拐袜、部署測試服務器吉嚣、部署生產服務器等流程。Stages
Stages 表示構建階段蹬铺,說白了就是上面提到的流程尝哆。我們可以在一次 Pipeline 中定義多個 Stages,這些 Stages 會有以下特點:
所有 Stages 會按照順序運行甜攀,即當一個 Stage 完成后秋泄,下一個 Stage 才會開始
只有當所有 Stages 完成后,該構建任務 (Pipeline) 才會成功
如果任何一個 Stage 失敗规阀,那么后面的 Stages 不會執(zhí)行恒序,該構建任務 (Pipeline) 失敗
- Jobs
Jobs 表示構建工作,表示某個 Stage 里面執(zhí)行的工作谁撼。我們可以在 Stages 里面定義多個 Jobs歧胁,這些 Jobs 會有以下特點:
相同 Stage 中的 Jobs 會并行執(zhí)行
相同 Stage 中的 Jobs 都執(zhí)行成功時,該 Stage 才會成功
如果任何一個 Job 失敗厉碟,那么該 Stage 失敗喊巍,即該構建任務 (Pipeline) 失敗
在centOS上安裝gitlab-ci-multi-runner
curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-ci-multi-runner/script.rpm.sh | sudo bash
yum install gitlab-ci-multi-runner
注冊runner
gitlab-runner register
有兩種runner,一種是shared runner箍鼓,可供全局使用崭参,一種是specific runner,為每個項目專用款咖。兩只的區(qū)別是token不同何暮,shared runner使用admin/runner最頂上的token,specific runner是每個項目里的token之剧。
如果是針對不同類型的項目郭卫,可以建一個shared runner,然后指定哪些項目可以使用這個runner背稼。
vi /etc/gitlab-runner/config.toml
concurrent = 1
check_interval = 0
[[runners]]
name = "golang-shared-runner"
url = "http://192.168.100.18:88/ci"
token = "3e09d7b93eaba18a230f284a6f7055"
executor = "docker"
[runners.docker]
tls_verify = false
allowed_images = ["192.168.100.18/*:*"]
image = "golang:latest"
privileged = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
[runners.cache]
一般來說,推薦使用docker方式來打包應用
image這一行的意思是缺省容器玻蝌,即使沒在
.gitlab-ci.yml里配置
為了使用私有倉庫
在里面添加allowed_images
clone repos源代碼時無法解析主機
在runner配置文件里加上解析才能去clone repos源代碼
extra_hosts=["gitlab.cacec.com.cn:192.168.100.32"]
常用命令
exec execute a build locally
run run multi runner service
register register a new runner
install install service
uninstall uninstall service
start start service
stop stop service
restart restart service
status get status of a service
run-single start single runner
unregister unregister specific runner
verify verify all registered runners --delete 刪除無效的runner
archive find and archive files (internal)
artifacts upload build artifacts (internal)
extract extract files from an archive (internal)
help, h Shows a list of commands or help for one command
參考資料:Continuous Delivery of a Spring Boot application with GitLab CI and Kubernetes