[英]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.