簡體   English   中英

從Jenkins Groovy腳本訪問GitLab JSON

[英]Accessing GitLab JSON from Jenkins Groovy script

在我正在進行的項目中,我們將GitLab CE和Jenkins用於CI。

當前,我們僅通過將分支名稱作為輸入參數來使用Jenkins作業合並更改。 我想創建一個需要合並請求ID(例如123)並使用Gi​​tLab URL API來獲取信息(例如源分支,目標分支等)的作業,然后進行其余的工作(構建,合並)。

我是一個初學者(包括Jenkins和Groovy),我所做的只是:

// Removing whitespace from input parameter
def mergeRequest = MergeRequestID
mergeRequest = mergeRequest.replaceAll("\\s","")

// Obtaining JSON with merge request information, 13 is an ID of the project
def apiURL = new URL("https://example.com/api/v4/projects/13/merge_requests/" + mergeRequest)
List json = new JsonSlurper().parse(apiUrl.newReader())

// Here: check for upvotes/downvotes, discussions or anything else. 
assert json.upvotes >= 2  : "Request should have at least 2 upvotes"
assert json.downvotes == 0 : "Request cannot have any downvotes"
assert json.target_branch == "master": "Target branch is not set to master"

def map = ["sourceBranchName ": json.source_branch, "targetBranchName ": json.target_branch]
return map

我最終遇到FileNotFoundException,后來發現,嘗試從該作業訪問此URL時,我得到404響應,盡管它在我的瀏覽器中有效。 我認為這可能是Jenkins機器的授權問題。

我知道我們在Jenkins中有一些gitlab插件,並且可以進行通信(過去,我們設法使用webhooks觸發構建或將構建狀態發布回GitLab)。 我可以使用其他任何方式以groovy腳本(在開始或工作中執行)獲取此JSON嗎?

原來,這是一個身份驗證問題。
我通過在請求的標頭中提供GitLab API專用令牌來解決此問題:

...
import com.cloudbees.plugins.credentials.CredentialsProvider
import com.dabsquared.gitlabjenkins.connection.GitLabApiTokenImpl

def branch = Branch
branch = branch.replaceAll("\\s","")

// Get GitLab API token(s) already stored in Jenkins credentials
def gitlabToken = CredentialsProvider.lookupCredentials(GitLabApiTokenImpl.class).apiToken[0]
def mergeRequestURL = new URL("https://example.com/api/v4/projects/1/merge_requests/" + branch)

// Put the token in request properties before sending it
def contentJson = new JsonSlurper().parse(
    mergeRequestURL.newReader(
        requestProperties: ['Private-Token': gitlabToken.toString()]))

def map = ["Branch": contentJson.source_branch]
return map

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM