【问题标题】:Using latestSuccessfulBuild number in Jenkins groovy job configuration在 Jenkins groovy 作业配置中使用 latestSuccessfulBuild 号
【发布时间】:2014-10-03 22:00:50
【问题描述】:

我有一份 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 结果?

【问题讨论】:

    标签: api groovy build jenkins config


    【解决方案1】:

    也许这会对你有所帮助:

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

    例如,我们有一个简单的构建流程 groovy 脚本,只构建一个项目“JobA”。如果我们想检查并打印它最后一次成功的构建,我们可以编写这样的脚本:

    import hudson.model.Build;
    
    def buildA = build("jobA")
    println(buildA.getProject().getLastSuccessfulBuild())
    

    【讨论】:

    • 如果您能扩展您的答案并提供一些说明将会很有帮助。
    【解决方案2】:

    可能有点矫枉过正,但您可以使用 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
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-28
      相关资源
      最近更新 更多