3天學會Jenkins_11_gitlab or github程式碼提交後自動構建2

  • 2019 年 12 月 23 日
  • 筆記

轉載註明出處

上一節「gitlab or github程式碼提交後自動構建1」中簡單使用了Pipeline script的方式去構建Pipeline流程,這一節使用Pipeline script from SCM的方式去實現自動構建,即將Jenkinsfile與源碼一同進行版本管理。

1 準備

根據上一節「gitlab or github程式碼提交後自動構建1」中安裝好Gitlab插件並配置好Webhook,最後我們在Gitlab項目倉庫根目錄中新建Jenkinsfile文件,這次演示Jenkinsfile文件主要做的功能就是編譯和執行一個shell腳本。

同樣的也是新建一個Pipeline項目,其他設置保持默認,需要配置的有:

  • Build Triggers
    • Build when a change is pushed to GitLab(保持與上一節一致,配置好Webhook)
  • Pipeline
    • ^(?!origin/master$|origin/develop$).* 【配置除了master和develop分支外所有分支】
    • */${gitlabSourceBranch} 【利用Gitlab插件環境變數,匹配所觸發hook的提交分支】
    • 選擇Pipeline script from SCM
    • SCM 選擇Git
    • 配置好倉庫地址和認證方式
    • Branches to build(這裡需要注意配置,因為我們可以配置成編譯多個分支處理或者單個分支)
    • Additional Behaviours 無需添加
    • Lightweight checkout 去掉勾選

⚠️這裡出現一個很奇怪的問題,儘管Branches to build里配置了除master和develop分支外build所有分支,但是總是無法獲取後面最新提交的程式碼,勾選或者不勾選Lightweight checkout也沒啥用,最後還是依靠Gitlab插件的環境變數gitlabSourceBranch來解決的。

2 Jenkinsfile

Jenkinsfile放入項目根目錄,然後另外新建auto_test.sh腳本文件。當提交程式碼到gitlab遠程倉庫時,會通過配置的hook自動觸發Pipeline構建,執行Jenkensfile文件。

pipeline {      agent any      stages {          stage('Build') {              steps {                  sh 'bash auto_test.sh'              }          }      }  }

auto_test.sh:

#!/bin/bash  test()  {      echo "start to test"      # do something...  }    test

自此就配置完成,在自動執行腳本里可以做你任何想要做的事情,後面進一步可以對Jenkinsfile進行編輯,包括測試、發布等。

3 參考

  • https://github.com/jenkinsci/gitlab-plugin#defined-variables
  • https://stackoverflow.com/questions/25774895/jenkins-git-plugin-not-pulling-latest-changes-before-building-job