簡體   English   中英

在Jenkins Groovy作業配置中使用LatestSuccessfulBuild編號

[英]Using latestSuccessfulBuild number in Jenkins groovy job configuration

我有一個詹金斯(Jenkins)工作,我想在Build Flow groovy腳本中使用它的lastSuccessfulBuild號。 我可以從Jenkins api獲取上次成功的內部版本號:

http:// {JENKINS_DOMAIN} / job / {JOB_NAME} / lastSuccessfulBuild / buildNumber

我嘗試在Build Flow groovy腳本中使用groovy的RESTClient ,但是在導入groovyx.net.http.RESTClient庫時出現語法錯誤。 有誰知道繞過此錯誤或以其他方式獲取api結果嗎?

也許這會幫助您:

import hudson.model.Build;
println(build.getProject().getLastSuccessfulBuild())

例如,我們有一個簡單的構建流程groovy腳本,僅構建了一個項目“ JobA”。 如果我們要檢查並打印上一次成功的構建,可以編寫以下腳本:

import hudson.model.Build;

def buildA = build("jobA")
println(buildA.getProject().getLastSuccessfulBuild())

可能有點矯kill過正,但是您可以使用HttpClient,因為您只需要在url上獲取請求即可。

這是我從周圍的一些代碼中剔除的代碼

在我們自己的Jenkins實例上對其進行了測試,該實例對ssl具有基本的身份驗證。

import org.apache.http.HttpResponse
import org.apache.http.HttpVersion
import org.apache.http.client.HttpClient
import org.apache.http.client.methods.HttpGet
import org.apache.http.client.params.ClientPNames
import org.apache.http.conn.ClientConnectionManager
import org.apache.http.conn.scheme.PlainSocketFactory
import org.apache.http.conn.scheme.Scheme
import org.apache.http.conn.scheme.SchemeRegistry
import org.apache.http.conn.ssl.SSLSocketFactory
import org.apache.http.impl.client.DefaultHttpClient
import org.apache.http.impl.conn.PoolingClientConnectionManager
import org.apache.http.params.BasicHttpParams
import org.apache.http.params.HttpConnectionParams
import org.apache.http.params.HttpParams
import org.apache.http.params.HttpProtocolParams


class LastSuccessfulBuild {
    def static main(args) {
        println new LastSuccessfulBuild().connect("your.jenkins.com", "443", "/path/to/job/YourJob/lastSuccessfulBuild/buildNumber", "your.user:your-password")
    }

    def connect(host, port, path, auth) {
        def url  = new URL("https", host, Integer.parseInt(port), path)
        HttpClient client = createClient()
        HttpGet get = new HttpGet(url.toURI())
        get.setHeader("Authorization", "Basic ${auth.getBytes().encodeBase64().toString()}")

        HttpResponse response = client.execute(get)
        def status = response.statusLine.statusCode
        if (status != 200) {
            throw new IOException("Failed to get page, status: $response.statusLine")
        }
        return response.entity.content.text
    }

    def createClient() {
        HttpParams params = new BasicHttpParams()
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1)
        HttpProtocolParams.setContentCharset(params, "UTF-8")
        params.setBooleanParameter(ClientPNames.HANDLE_REDIRECTS, true)

        SchemeRegistry registry = new SchemeRegistry()
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80))
        registry.register(new Scheme("https",SSLSocketFactory.getSocketFactory(),443))

        ClientConnectionManager ccm = new PoolingClientConnectionManager(registry)
        HttpConnectionParams.setConnectionTimeout(params, 8000)
        HttpConnectionParams.setSoTimeout(params, 5400000)
        HttpClient client = new DefaultHttpClient(ccm, params)

        return client
    }

}

暫無
暫無

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

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