從GitLab 8.0開始就把GitLab-Ci集成在GitLab中了,咱們只要在項目中添加一個.gitlab-ci.yml文件,而後添加一個Runner就能夠進行持續集成了,GitLab-Ci實現自動化部署流程:用戶提交代碼->檢查是否有.gitlab-ci.yml文件->若是無,則結束;若是有,則調用runner執行腳本->獲取返回的結果。git
一次piplien至關於一次構建任務,裏面能夠包含多個流程,如編譯、測試、部署等。任何提交或者MergeRequest的合併均可以觸發Pipline,如圖:web
Stages表示構建階段,咱們能夠在一個Piplien中定義多個Stages,這些Stages會有如下特色:centos
所以,Stages和Pipline的關係是:緩存
Jobs表示構建工做,表示某個Stage裏面執行工做,咱們能夠在Stage裏面定義多個Jobs,這些Jobs會有如下特色:服務器
Jobs和Stage的關係圖:ssh
執行構建任務的一個服務,把構建任務放到runner裏面而不是在CI裏面作是不想把」構建」這個重任(一般較大的工程構建都比較小耗資源) 放到gitlab上而影響gitlab性能。經過把gitlab runner安裝到不一樣機器上,讓這臺單獨的機器來執行構建任務,GitLab-Runner能夠分類兩種類型:Shared Runner(共享型)和Specific Runner(指定型):gitlab
向GitLab-CI註冊一個Runner須要兩樣東西:GitLab-CI的url和註冊token。若是要註冊Shared Runner,你須要到管理界面的Runners頁面裏面去找註冊token。以下圖所示:性能
若是要註冊Specific Runner,須要到指定的項目中去找對應的token,如圖:測試
以centos 7爲例, 使用了清華大學的鏡像,新建 gitlab-ci-multi-runner.repogradle
[root@i-vvwtw5ne ~]# touch /etc/yum.repos.d/gitlab-ci-multi-runner.repo
將如下內容寫入文件
[gitlab-ci-multi-runner] name=gitlab-ci-multi-runner baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ci-multi-runner/yum/el7 repo_gpgcheck=0 gpgcheck=0 enabled=1 gpgkey=https://packages.gitlab.com/gpg.key
執行
[root@i-vvwtw5ne ~]# yum makecache [root@i-vvwtw5ne ~]# yum install gitlab-ci-multi-runner
註冊一個Rnner
讓Runner啓動起來
[root@i-vvwtw5ne ~]# gitlab-runner start
登錄到gitlab就能夠看到新註冊的Runner了,如圖:
配置.gitlab-ci.yml文件
在工程目錄下增長一個.gitlab-ci.yml文件,內容以下:
# 緩存服務, 若是有文件須要多個stages共用,例如jar/war包 cache: paths: - target/ # 本次構建的階段:build package stages: - build - deploy # 構建 Job build: stage: build tags: - dev only: - dev script: - echo "=============== 開始編譯構建和打包任務 ===============" - pwd - gradle clean build -x test # 部署 deploy: stage: deploy tags: - dev only: - dev script: - echo "=============== 開始部署任務 ===============" # 測試,是否可以經過 ssh 連通遠程服務器 - sshpass -p Falsesoul**** ssh -o StrictHostKeychecking=no root@192.192.18.73 - echo "=============== 將 jar 包部署到遠程服務器上 ===============" - sshpass -p Falsesoul**** scp -o StrictHostKeychecking=no /home/gitlab-runner/builds/66b08c53/0/cos/yh-cos/yh-cos-web/build/libs/yh-cos-web-0.0.1.jar root@192.192.18.73:/opt/war/ - echo "=============== 開始執行 ===============" - sshpass -p Falsesoul**** ssh -o StrictHostKeychecking=no root@192.192.18.73 "sh deploy.sh"
當有提交或Meger request到dev分支的時候,就會自動觸發pipline,如圖: