在Jenkins groovy作业配置中使用latestSuccessfulBuild编号

时间:2014-10-03 22:00:50

标签: api groovy build jenkins config

我有一个jenkins工作,我想在Build Flow groovy脚本中使用它的lastSuccessfulBuild编号。 我可以从Jenkins api获得最后一个成功的内部版本号:

  

的http:// {JENKINS_DOMAIN} /作业/ {JOB_NAME} / lastSuccessfulBuild / buildNumber

我尝试在Build Flow groovy脚本中使用groovy的RESTClient但是在导入groovyx.net.http.RESTClient库时出现语法错误。 有没有人知道绕过这个错误或以其他方式获得api结果?

2 个答案:

答案 0 :(得分:3)

也许这会对你有所帮助:

import hudson.model.Build;
println(build.getProject().getLastSuccessfulBuild())
例如,我们有简单的构建流程groovy脚本,只构建一个项目" JobA"。如果我们想要检查并打印它最后一次成功的构建,我们可以编写这样的脚本:

import hudson.model.Build;

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

答案 1 :(得分:2)

可能有点矫枉过正,但您可以使用HttpClient,因为您只需要在网址上获取请求。

在这里,我从我躺在的一些代码中敲了一下

在我们自己的Jenkins实例上测试它,它在ssl上有基本的auth。

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
    }

}