Gitlab+Jenkins+Pipeline+WebHook+Multibranch-實現持續集成

[Gitlab + Jenkins + Pipeline + WebHook+ Multibranch] - 實現持續集成和自動發佈

本文的實現:git

Jenkins準備工做

  • 安裝插件
    1. gitlab
    2. pipeline
  • 配置Gitlab的鏈接
    1. 打開系統管理 - 系統設置 - gitlab
    2. 去掉此選項的勾選Enable authentication for '/project' end-point
    3. 配置GitLab connections
    4. 設置Connection nameGitlab host URL
    5. Credentials的配置
      1. 添加Jenkins憑據
      2. 類型選擇Gitlab API token
      3. API token的獲取
        1. 在Gitlab上擁有一個用戶並具備developer角色
        2. 獲取方法:登陸用戶 - User settings - Access Tokens,建立一個Token記錄
      4. 複製Token值並保存到Jenkins的憑據中
      5. 點擊下面的Test Connection測試
        1. 成功會提示Success
        2. 若是失敗檢查gitlab的url地址是否正確
  • 配置多分支流水線任務
    1. 新建任務,選擇多分支流水線
    2. 配置任務
    3. 添加一個倉庫,類型選Git
    4. Credentials的配置
      1. 添加Jenkins憑據
      2. 類型選擇Username with Password
      3. 用戶的獲取
        1. 在Gitlab上擁有一個用戶並具備developer角色
        2. 若是你的項目類型屬於Private,這個用戶必須是這個項目的成員
    5. 其餘默認讀取根目錄下的Jenkinsfile文件

Jenkinsfile準備工做

參考 Jenkinsfile Demogithub

主要配置:web

// 獲取gitlab connection, 填寫咱們以前配置gitlab connection
properties([gitLabConnection('gitlab-bigdata')])
// 拉取代碼
checkout scm
// 告訴gitlab job狀態
updateGitlabCommitStatus name: 'build', state: 'pending'
// 根據不一樣的分支觸發不一樣的步驟
if (env.BRANCH_NAME == 'master' || env.BRANCH_NAME == 'dev' ) {
        stage("Build Docker Image"){
            echo "build docker image"
            echo "Only dev/master branch can build docker image"
        }

        if(env.BRANCH_NAME == 'dev'){
            stage("Deploy to test"){
                echo "branch dev to deploy to environment test"
            }

            stage("Integration test"){
                echo "test環境集成測試"
            }

        }

        if(env.BRANCH_NAME == 'master'){
            stage("Deploy to prod"){
                echo "branch master to deploy to environment prod"
            }

            stage("Health check"){
                echo "prod檢查"
            }

        }
    }

Gitlab準備工做

  • 修改默認的安全請求
    1. 注意: 當Jenkins和Gitlab在同一臺機器時
    2. 使用root登陸,管理中心 - 設置 - 網絡 - 外發請求(Admin Area - settings - Network - Outbound requests)
    3. 加上此選項的勾選Allow requests to the local network from hooks and services, 保存

選擇Jenkins任務的觸發方式

  • 手動觸發
  • 定時觸發
  • Gitlab triggerdocker

    1. 進入項目,Settings - Integrations
    2. 填寫Jenkins任務的地址,選中Push eventsMerge request events
    3. Jenkins url格式:http://JENKINS_URL/project/PROJECT_NAME
    When you configure the plugin to trigger your Jenkins job, by following the instructions below depending on job type, it will listen on a dedicated URL for JSON POSTs from GitLab's webhooks. That URL always takes the form http://JENKINS_URL/project/PROJECT_NAME, or http://JENKINS_URL/project/FOLDER/PROJECT_NAME if the project is inside a folder in Jenkins. You should not be using http://JENKINS_URL/job/PROJECT_NAME/build or http://JENKINS_URL/job/gitlab-plugin/buildWithParameters, as this will bypass the plugin completely.

驗證

  1. 提交代碼
  2. 查看狀態 - 進入項目
    1. WebHook狀態
      1. 依次點擊Settings - Integrations
      2. 編輯觸發Jenkins的那條記錄
      3. 查看Recent Deliveries部分,顯示了最近的Trigger狀態
    2. Pipelines狀態
    3. Jenkins Job狀態
  3. 成功狀態
    1. WebHook狀態 - 200
    2. Pipelines狀態 - passed
    3. Jenkins Job狀態 - 成功

感謝

相關文章
相關標籤/搜索