gitlab-ci全稱是gitlab continuous integration的意思,也就是持續(xù)集成。中心思想是當(dāng)每一次push到gitlab的時候,都會觸發(fā)一次腳本執(zhí)行,然后腳本的內(nèi)容包括了測試,編譯,部署等一系列自定義的內(nèi)容。
原理
自動部署涉及了若干個角色,主要介紹如下
GitLab-CI
這個是一套配合GitLab使用的持續(xù)集成系統(tǒng),是GitLab自帶的,也就是你裝GitLab的那臺服務(wù)器上就帶有的。無需多考慮。.gitlab-ci.yml的腳本解析就由它來負(fù)責(zé)。GitLab-Runner
這個是腳本執(zhí)行的承載者,.gitlab-ci.yml的script部分的運(yùn)行就是由runner來負(fù)責(zé)的。GitLab-CI瀏覽過項(xiàng)目里的.gitlab-ci.yml文件之后,根據(jù)里面的規(guī)則,分配到各個Runner來運(yùn)行相應(yīng)的腳本script。這些腳本有的是測試項(xiàng)目用的,有的是部署用的。.gitlab-ci.yml
這個是在git項(xiàng)目的根目錄下的一個文件,記錄了一系列的階段和執(zhí)行規(guī)則。GitLab-CI在push后會解析它,根據(jù)里面的內(nèi)容調(diào)用runner來運(yùn)行。Pipeline
一次 Pipeline 其實(shí)相當(dāng)于一次構(gòu)建任務(wù),里面可以包含多個流程,如安裝依賴、運(yùn)行測試、編譯、部署測試服務(wù)器、部署生產(chǎn)服務(wù)器等流程。Stages
Stages 表示構(gòu)建階段,說白了就是上面提到的流程。我們可以在一次 Pipeline 中定義多個 Stages,這些 Stages 會有以下特點(diǎn):
所有 Stages 會按照順序運(yùn)行,即當(dāng)一個 Stage 完成后,下一個 Stage 才會開始
只有當(dāng)所有 Stages 完成后,該構(gòu)建任務(wù) (Pipeline) 才會成功
如果任何一個 Stage 失敗,那么后面的 Stages 不會執(zhí)行,該構(gòu)建任務(wù) (Pipeline) 失敗
- Jobs
Jobs 表示構(gòu)建工作,表示某個 Stage 里面執(zhí)行的工作。我們可以在 Stages 里面定義多個 Jobs,這些 Jobs 會有以下特點(diǎn):
相同 Stage 中的 Jobs 會并行執(zhí)行
相同 Stage 中的 Jobs 都執(zhí)行成功時,該 Stage 才會成功
如果任何一個 Job 失敗,那么該 Stage 失敗,即該構(gòu)建任務(wù) (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,為每個項(xiàng)目專用。兩只的區(qū)別是token不同,shared runner使用admin/runner最頂上的token,specific runner是每個項(xiàng)目里的token。
如果是針對不同類型的項(xiàng)目,可以建一個shared runner,然后指定哪些項(xiàng)目可以使用這個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方式來打包應(yīng)用
image這一行的意思是缺省容器,即使沒在
.gitlab-ci.yml里配置
為了使用私有倉庫
在里面添加allowed_images
clone repos源代碼時無法解析主機(jī)
在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