本文首發於:Jenkins 中文社區
原文鏈接 作者:baymac
譯者:Donghui Wang
這是在 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 實例中遵循以下步驟:
選擇 系統管理
選擇 插件管理
選擇 高級
選項卡
在 上傳插件
部分,選擇 選擇文件
選擇 $<root_dir>/target/gitlab-branch-source.hpi
選擇 上傳
選擇 安裝(無需重啟)
假設插件安裝已經完成。
在 jenkins 上,選擇 系統管理
選擇 系統設置
向下滾動找到 GitLab
部分
選擇 Add GitLab Server
| 選擇 GitLab Server
現在您將看到 GitLab 伺服器配置選項。
需要配置的欄位有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 項目上持續集成(或持續交付),那麼您可能希望自動設置它。
添加一個 Personal Access Token 憑據(自動生成 Personal Access Token 請參考下一個部分):
用戶需要添加一個 GitLab Personal Access Token
類型憑證條目用來安全地將 token 保存在 Jenkins 內部。
在你的 GitLab 伺服器生成一個 Personal Access Token
從右上角選擇配置文件下拉菜單
選擇 Settings
從左側菜單選擇 Access Token
輸入一個名稱 | 將 Scope 設置為 api
,read_user
,read_repository
選擇 Create Personal Access Token
複製生成的 token
返回 Jenkins | 在憑據欄位中選擇 Add
| 選擇 Jenkins
設置 Kind
為 GitLab Personal Access Token
輸入 Token
在 ID
處輸入唯一的 id
輸入人類可讀的描述
選擇 Add
測試連接:
在 Credentials
下拉列表選擇你需要的 token
選擇 Test Connection
它應該會返回 Credentials verified for user <username>
選擇 Apply
(在底部)
GitLab 伺服器現在在 Jenkins 設置好了
或者,用戶可以在 Jenkins 內部生成 Gitlab 個人訪問令牌,並自動添加 Gitlab 個人訪問令牌憑據到 Jenkins 伺服器憑據。
在 GitLab
部分的底部選擇 Advanced
選擇 Manage Additional GitLab Actions
選擇 Convert login and password to token
設置 GitLab Server URL
有兩個選項來生成令牌:
From credentials
- 要選擇已在的持久存儲的用戶名密碼憑據,或添加用戶名密碼憑據來持久存儲它。
From login and password
- 如果這是一次性的,那麼您可以直接在文本框中輸入憑據,並且用戶名/密碼憑據不會持久化。
設置完你的用戶名密碼憑據后,選擇 Create token credentials
.
token 創建器將在 GitLab 伺服器中為具有所需範圍的給定用戶創建個人訪問令牌,並為 Jenkins 伺服器中的相同用戶創建憑據。 您可以返回 GitLab 伺服器配置來選擇生成的新憑證(首先選擇 "-none-" ,然後將出現新的憑證)。出於安全原因,此令牌不顯示為純文本,而是返回一個 id
。 它是一個128位長的 UUID-4字元串(36個字元)。
沒有必要在UI中浪費時間。 Jenkins 配置即代碼 (JCasC)
或者簡單地 配置即代碼
插件允許你通過一個 yaml
文件配置 Jenkins。 如果你是新用戶,你可以在這裡了解更多關於 JCasC 的信息.
這裡有多種方式配置 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 插件
。
我們的團隊成員:baymac,LinuxSuRen, Marky,Joseph, Justin,Jeff。
也感謝整個 Jenkins 社區提供的專業技術和靈感。
[admin
]