我有一个jenkins工作,我想在Build Flow groovy脚本中使用它的lastSuccessfulBuild编号。 我可以从Jenkins api获得最后一个成功的内部版本号:
的http:// {JENKINS_DOMAIN} /作业/ {JOB_NAME} / lastSuccessfulBuild / buildNumber
我尝试在Build Flow groovy脚本中使用groovy的RESTClient但是在导入groovyx.net.http.RESTClient
库时出现语法错误。
有没有人知道绕过这个错误或以其他方式获得api结果?
答案 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
}
}