天天看點

Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置

Jenkins+Gitlab CICD自動觸發建構配置

Gitlab配置

新增賬號什麼的就不贅述了, 建一個測試項目或者選擇已有的項目, 随便 commit 幾條内容

  • 按下圖步驟建立賬号的 access token , 用于 Jenkins 調用 GitLab 的 API
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置
    記下生成的

    token

Jenkins安裝配置

下載下傳Jenkins: 下載下傳位址

現在後解壓到目錄即可

配置JAVA_HOME

安裝JDK在此不再說明,自己搜尋安裝即可

cat ~/.bash_profile
# 增加或者更改如下内容即可
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export JAVA_HOME=/workbase/software/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
           

配置Tomcat 8

安裝Tomcat同樣不再說明

注意: 更改${TOMCAT_HOME}/conf/server.xml配置

<!--<Listener className="org.apache.catalina.core.JasperListener" />-->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />

<Host name="localhost"  appBase="webapps" unpackWARs="true" >
    <!-- docBase 替換為自己的目錄即可 -->
    <Context crossContext="true" docBase="/workbase/software/jenkins.war" reloadable="true" allowLinking="true" path=""/>
           

安裝插件

  • Git Parameter ( 用于參數化建構中動态擷取項目分支 )
  • Generic Webhook Trigger ( 用于解析 Webhook 傳過來的參數 )
  • GitLab ( 用于推送建構結果給 GitLab )

配置Jenkins Gitlab

  • 添加Gitlab憑證
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置
  • 配置Gitlab連接配接
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置
  • 配置項目
    Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置
  • 參數說明
    • GitLab Connection 選擇上面添加的 GitLab 連接配接 ( Jenkins )
    • 勾選 參數化建構過程, 添加

      Git Parameter

      類型的參數

      ref

      , 這樣建構的時候就可以指定分支進行建構。
    • Source Code Management

      選擇

      Git

      , 添加項目位址和授權方式 ( 帳号密碼 或者 ssh key ) , 分支填寫建構參數

      $ref

      如果選擇

      sshkey

      的方式需要在

      Jenkins

      伺服器啟動

      jenkins

      服務的使用者生成公鑰配置在

      GitLab

      伺服器上。
    • Build Triggers 選擇 Generic Webhook Trigger 方式用于解析 GitLab 推過來的詳細參數。
      • ref

        : 通過

        Gitlab API

        請求

        Request body

        中擷取

        $.ref

        擷取分支或者tag
      • object_kind

        : 通過

        Gitlab API

        請求

        Request body

        中擷取

        $.object_kind

        操作類型
      • git_ssh_url

        :通過

        Gitlab API

        請求

        Request body

        中擷取

        $.project.git_ssh_url

        項目的ssh位址
      • commits_id

        : 通過

        Gitlab API

        請求

        Request body

        中擷取

        $.commits[0].id

        該次送出的

        ID

      • Token

        : 自己通過shell随機生成一個即可,也可以自定義任意值
      • Optional filter

        : 使用正規表達式對 Text 進行比對, 比對成功才允許觸發建構
        • Expression

          :預設的待比對項
        • Text

          : 比對的内容
    • Build 内容按自己實際的項目類型進行調整, 使用 Maven 插件 或 腳本 等等。
    • Post-build Actions 添加 Publish build status to GitLab 動作, 實作建構結束後通知建構結果給 GitLab
  • Gitlab

    添加

    webhooks

Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置
  • GitLab 的項目頁面中, 添加一個 Webhook ( http://JENKINS_URL/generic-webhook-trigger/invoke?token=<上面 Jenkins 項目配置中的 token> ) , 觸發器選擇 标簽推送事件。

建立完成點選測試如果報錯如下:

Requests to the local network are not allowed
           

解決辦法: 允許 GitLab 本地網絡發送 Webhook 請求

建立任務測試

  • 本地推送tag到遠端
git push moshu stable_production-20200305
           
  • GitLab

    中檢視

GitLab

頁面可以看到觸發了 Webhook , View details 檢視請求詳情, Response body 中 triggered 字段值為 true 則表示成功觸發了 Jenkins 進行建構

  • Gitlab

    檢視建構結果
Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置
  • Jenkins

    檢視
Jenkins+Gitlab CICD流程配置Jenkins+Gitlab CICD自動觸發建構配置

完成

額外配置

Jenkin進行Git檢出的代碼有存在與本地不同的情況(有一些大檔案不需要送出,但是在打包又會用到),這種情況如何處理?

我處理的方式: 使用rsync同步檔案的功能将本地的檔案推送到Jenkins Git檢出的目錄,并且保持與本地同步(配合.gitignore進行使用)

代碼:

# 需要過濾的檔案
cat ./exclude_rules
- .git/
- .idea/
- .vscode/
- .DS_Store