GitLab CI 持續集成

簡介

從GitLab 8.0開始就把GitLab-Ci集成在GitLab中了,咱們只要在項目中添加一個.gitlab-ci.yml文件,而後添加一個Runner就能夠進行持續集成了,GitLab-Ci實現自動化部署流程:用戶提交代碼->檢查是否有.gitlab-ci.yml文件->若是無,則結束;若是有,則調用runner執行腳本->獲取返回的結果。git

概念

  • pipline

一次piplien至關於一次構建任務,裏面能夠包含多個流程,如編譯、測試、部署等。任何提交或者MergeRequest的合併均可以觸發Pipline,如圖:web

  • Stages

Stages表示構建階段,咱們能夠在一個Piplien中定義多個Stages,這些Stages會有如下特色:centos

  1. 全部的Stages會按照順序運行,即當一個Stages完成後,下一個Stage纔開始
  2. 只有當全部Stages完成後,該構建任務(Pipline)纔會成功
  3. 若是任何一個Stage失效,那麼後面Stages不會執行,該構建任務(Pipline)失效

所以,Stages和Pipline的關係是:緩存

  • Jobs

Jobs表示構建工做,表示某個Stage裏面執行工做,咱們能夠在Stage裏面定義多個Jobs,這些Jobs會有如下特色:服務器

  1. 相同Stage中的Jobs會並行執行。
  2. 相同Stage中的Jobs都執行成功時,該Stage纔會成功。
  3. 若是任何一個Job失敗,即該構建任務(Pipline)失敗。

Jobs和Stage的關係圖:ssh

  • gitlab runner

執行構建任務的一個服務,把構建任務放到runner裏面而不是在CI裏面作是不想把」構建」這個重任(一般較大的工程構建都比較小耗資源) 放到gitlab上而影響gitlab性能。經過把gitlab runner安裝到不一樣機器上,讓這臺單獨的機器來執行構建任務,GitLab-Runner能夠分類兩種類型:Shared Runner(共享型)和Specific Runner(指定型):gitlab

  1. Shared Runner:這種Runner(工人)是全部工程都可以用的。只有系統管理員可以建立Shared Runner。
  2. Specific Runner:這種Runner(工人)只能爲指定的工程服務。擁有該工程訪問權限的人都可以爲該工程建立Shared Runner。

向GitLab-CI註冊一個Runner須要兩樣東西:GitLab-CI的url和註冊token。若是要註冊Shared Runner,你須要到管理界面的Runners頁面裏面去找註冊token。以下圖所示:性能

若是要註冊Specific Runner,須要到指定的項目中去找對應的token,如圖:測試

實踐

  • GitLab-Runner的安裝與註冊

以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,如圖:

相關文章
相關標籤/搜索