Jenkins 多分支流水線任務對 GitLab SCM 的支持

←手機掃碼閱讀     admin @ 2019-07-11 , reply:0

本文首發於:Jenkins 中文社區

原文鏈接    作者:baymac

譯者:Donghui Wang

tea

這是在 GSoC 2019中的一個 Jenkins 項目。 我們正致力於增加多分支流水線任務和文件夾組織對 GitLab 的支持。 這個計劃是創建以下插件:

  • GitLab API 插件 - 包裝 GitLab Java APIs。

  • GitLab 分支源插件 - 包括兩個包:

    • io.jenkins.plugins.gitlabserverconfig - 管理伺服器配置和 Web hooks 管理。理想情況下應該在另一個名為 GitLab Plugin 的插件中。 未來,這個包應該移動到新的插件中。

    • io.jenkins.plugins.gitlabbranchsource - 為多分支流水線任務(包括 Merge Requests )和文件夾組織添加 GitLab 分支源。

現狀

  • 完全支持自由風格的任務和流水線(單分支)任務。

  • 部分支持多分支流水線任務(沒有 MRS 檢測)。

  • 不支持 Gitlab 文件夾組織。

這個項目的目標

  • 實現一個依賴於 Gitlab API 插件的輕量級 Gitlab 插件。

  • 遵循3個獨立插件的約定,即 GitLab 插件GitLab API 插件GitLab 分支源插件

  • 實現 Gitlab 分支源插件,支持多分支管道作業。

  • 支持新的 Jenkins 特性,例如 Jenkins 代碼即配置 (JCasC), 增量式工具

  • 清晰高效的設計。

  • 支持新的 SCM 特性 APIs。

  • 支持 Java 8 及更高版本。

構建插件

這個插件還沒有二進位文件可用,因為這個插件還處於非常早期的 alpha 階段,還沒有為公眾準備好。 如果您想儘早介入,可以嘗試自己從源代碼構建它。

安裝:

  • 將源代碼簽出到您的本地機器上:


git clone https://github.com/baymac/gitlab-branch-source-plugin.git

cd gitlab-branch-source-plugin
  • 安裝插件:


mvn clean install

mvn clean install -DskipTests # to skip tests
  • 運行插件:


mvn hpi:run # runs a Jenkins instance at localhost:8080

mvn hpi:run -Djetty.port=<port> # to run on your desired port number

如果您想用 Jenkins 伺服器測試它,mvn clean install 之後在你的 Jenkins 實例中遵循以下步驟:

  1. 選擇 系統管理

  2. 選擇 插件管理

  3. 選擇 高級 選項卡

  4. 在 上傳插件 部分,選擇 選擇文件

  5. 選擇 $<root_dir>/target/gitlab-branch-source.hpi

  6. 選擇 上傳

  7. 選擇 安裝(無需重啟)

使用

假設插件安裝已經完成。

在 Jenkins 上設置 Gitlab 伺服器配置

  1. 在 jenkins 上,選擇 系統管理

  2. 選擇 系統設置

  3. 向下滾動找到 GitLab 部分

    gitlab-section

  4. 選擇 Add GitLab Server | 選擇 GitLab Server

  5. 現在您將看到 GitLab 伺服器配置選項。

    gitlab-server

    需要配置的欄位有4個:

    • Name - 插件自動為您生成唯一的伺服器名稱。用戶可能希望配置此欄位以滿足其需要,但應確保它足夠唯一。我們建議保持原樣。

    • Server URL - 包含指向 Gitlab 伺服器的 URL 。默認設置為 "https://gitlab.com" 。用戶可以修改它以輸入其 Gitlab 伺服器 URL ,例如 https://gitlab.gnome.org/、http://gitlab.example.com:7990 等等。

    • Credentials - 包含類型為 GitLab Personal Access Token 的憑據條目列表。當沒有添加憑證時,它顯示 "-none-" 。用戶可以通過單擊 "Add" 按鈕添加憑證。

    • Web Hook - 此欄位是一個複選框。如果希望插件在與 Gitlab 項目相關的任務上設置 Webhook ,請選中此框。該插件監聽相關 Gitlab 項目的 URL ,當 Gitlab 伺服器中發生事件時,伺服器將向設置 Web Hook 的 URL 發送事件觸發器。如果您希望在 Gitlab 項目上持續集成(或持續交付),那麼您可能希望自動設置它。

  6. 添加一個 Personal Access Token 憑據(自動生成 Personal Access Token 請參考下一個部分):

    1. 用戶需要添加一個 GitLab Personal Access Token 類型憑證條目用來安全地將 token 保存在 Jenkins 內部。

    2. 在你的 GitLab 伺服器生成一個 Personal Access Token

      1. 從右上角選擇配置文件下拉菜單

      2. 選擇 Settings

      3. 從左側菜單選擇 Access Token

      4. 輸入一個名稱 | 將 Scope 設置為 apiread_userread_repository

      5. 選擇 Create Personal Access Token

      6. 複製生成的 token

    3. 返回 Jenkins | 在憑據欄位中選擇 Add | 選擇 Jenkins

    4. 設置 Kind 為 GitLab Personal Access Token

    5. 輸入 Token

    6. 在 ID 處輸入唯一的 id

    7. 輸入人類可讀的描述

    8. 選擇 Add

      gitlab-credentials

  7. 測試連接:

    1. 在 Credentials 下拉列表選擇你需要的 token

    2. 選擇 Test Connection

    3. 它應該會返回 Credentials verified for user <username>

  8. 選擇 Apply(在底部)

  9. GitLab 伺服器現在在 Jenkins 設置好了

在 Jenkins 內創建個人訪問令牌

或者,用戶可以在 Jenkins 內部生成 Gitlab 個人訪問令牌,並自動添加 Gitlab 個人訪問令牌憑據到 Jenkins 伺服器憑據。

  1. 在 GitLab 部分的底部選擇 Advanced

  2. 選擇 Manage Additional GitLab Actions

  3. 選擇 Convert login and password to token

  4. 設置 GitLab Server URL

  5. 有兩個選項來生成令牌:

    1. From credentials - 要選擇已在的持久存儲的用戶名密碼憑據,或添加用戶名密碼憑據來持久存儲它。

    2. From login and password - 如果這是一次性的,那麼您可以直接在文本框中輸入憑據,並且用戶名/密碼憑據不會持久化。

  6. 設置完你的用戶名密碼憑據后,選擇 Create token credentials.

  7. token 創建器將在 GitLab 伺服器中為具有所需範圍的給定用戶創建個人訪問令牌,並為 Jenkins 伺服器中的相同用戶創建憑據。 您可以返回 GitLab 伺服器配置來選擇生成的新憑證(首先選擇 "-none-" ,然後將出現新的憑證)。出於安全原因,此令牌不顯示為純文本,而是返回一個 id 。 它是一個128位長的 UUID-4字元串(36個字元)。

    gitlab-token-creator

配置即代碼

沒有必要在UI中浪費時間。 Jenkins 配置即代碼 (JCasC) 或者簡單地 配置即代碼 插件允許你通過一個 yaml 文件配置 Jenkins。 如果你是新用戶,你可以在這裡了解更多關於 JCasC 的信息.

添加配置 YAML:

這裡有多種方式配置 JCasC yaml 文件來配置 Jenkins:

  • JCasC 默認情況下在 $JENKINS_ROOT 搜索一個名為 jenkins.yaml 的文件。

  • JCasC 尋找一個環境變數 CASC_JENKINS_CONFIG ,其中包含配置 yaml 文件的路徑。

    • 一個包含一組配置文件的文件夾的路徑,例如: /var/jenkins_home/casc_configs

    • 單個文件的完整路徑,例如: /var/jenkins_home/casc_configs/jenkins.yaml

    • 一個指向 web 上提供的文件的 URL ,例如: https://<your-domain>/jenkins.yaml

  • 您還可以在 UI 中設置配置的 yaml 路徑。轉到 <your-jenkins-domain>/configuration-as-code。 輸入 jenkins.yaml 的路徑或 URL 並選擇 Apply New Configuration

一個通過 jenkins.yaml 配置 GitLab 伺服器的例子:


credentials:
  system:
    domainCredentials:
      - credentials:
          - gitlabPersonalAccessToken:
              scope: SYSTEM
              id: "i<3GitLab"
              token: "XfsqZvVtAx5YCph5bq3r" # gitlab personal access token

unclassified:
  gitLabServers:
    servers:
      - credentialsId: "i<3GitLab"
        manageHooks: true
        name: "gitlab.com"
        serverUrl: "https://gitlab.com"

要獲得更好的安全性,請參閱 JCasC 文檔中的處理 secrets 部分

未來工作範圍

GSoC 的第二階段將用於開發 Gitlab 分支源插件。新功能正在開發中,但代碼庫不穩定,需要大量的錯誤修復。 一些功能(如多分支流水線任務)工作正常。在第二階段結束時會有更多關於它的信息。

問題跟蹤

這個項目使用 Jenkins JIRA 來跟蹤問題。你可以在 gitlab-branch-source-plugin 模塊提交問題。

致謝

這個插件是由 Google 編程夏令營 (GSoC)團隊為 GitLab 支持多分支流水線而構建和維護的。 很多靈感來自於 GitLab 插件Gitea 插件 及 GitHub 插件

我們的團隊成員:baymacLinuxSuRen, MarkyJoseph, JustinJeff

來自其他人的支持:OlegGreg, Owen

也感謝整個 Jenkins 社區提供的專業技術和靈感。

鏈接

 

 

 





[admin ]

來源:OsChina
連結:https://www.oschina.net/news/108155/phase-1-multibranch-pipeline-support-for-gitlab
Jenkins 多分支流水線任務對 GitLab SCM 的支持已經有52次圍觀

http://coctec.com/news/all/show-post-209570.html