我想使用Jenkins远程API,并且正在寻找安全的解决方案。我碰到了Prevent Cross Site Request Forgery exploits
,我想使用它,但是我读到某个地方,你必须提出一个面包屑请求。
如何获得面包屑请求以使API正常工作?
我找到了https://github.com/entagen/jenkins-build-per-branch/pull/20
,但仍然不知道如何解决。
我的詹金斯版本是1.50.x。
使用POST请求时,经过身份验证的远程API请求以403响应
我也没有在文档中找到这个。此代码已针对较旧的Jenkins(1.466)进行了测试,但仍可以使用。
要发出面包屑,请使用 crumbIssuer
// left out: you need to authenticate with user & password -> sample below
HttpGet httpGet = new HttpGet(jenkinsUrl + "crumbIssuer/api/json");
String crumbResponse = toString(httpclient, httpGet);
CrumbJson crumbJson = new Gson().fromJson(crumbResponse, CrumbJson.class);
这会给你这样的回应
{"crumb":"fb171d526b9cc9e25afe80b356e12cb7","crumbRequestField":".crumb"}
其中包含您需要的两条信息
如果您现在想从詹金斯(Jenkins)那里获取东西,请将面包屑添加为标题。在下面的示例中,我获取了最新的构建结果。
HttpPost httpost = new HttpPost(jenkinsUrl + "rssLatest");
httpost.addHeader(crumbJson.crumbRequestField, crumbJson.crumb);
这里是整体示例代码。我正在使用gson
2.2.4
解析响应,其余部分则使用Apache的httpclient
4.2.3
。
import org.apache.http.auth.*;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.*;
import com.google.gson.Gson;
public class JenkinsMonitor {
public static void main(String[] args) throws Exception {
String protocol = "http";
String host = "your-jenkins-host.com";
int port = 8080;
String usernName = "username";
String password = "passwort";
DefaultHttpClient httpclient = new DefaultHttpClient();
httpclient.getCredentialsProvider().setCredentials(
new AuthScope(host, port),
new UsernamePasswordCredentials(usernName, password));
String jenkinsUrl = protocol + "://" + host + ":" + port + "/jenkins/";
try {
// get the crumb from Jenkins
// do this only once per HTTP session
// keep the crumb for every coming request
System.out.println("... issue crumb");
HttpGet httpGet = new HttpGet(jenkinsUrl + "crumbIssuer/api/json");
String crumbResponse= toString(httpclient, httpGet);
CrumbJson crumbJson = new Gson()
.fromJson(crumbResponse, CrumbJson.class);
// add the issued crumb to each request header
// the header field name is also contained in the json response
System.out.println("... issue rss of latest builds");
HttpPost httpost = new HttpPost(jenkinsUrl + "rssLatest");
httpost.addHeader(crumbJson.crumbRequestField, crumbJson.crumb);
toString(httpclient, httpost);
} finally {
httpclient.getConnectionManager().shutdown();
}
}
// helper construct to deserialize crumb json into
public static class CrumbJson {
public String crumb;
public String crumbRequestField;
}
private static String toString(DefaultHttpClient client,
HttpRequestBase request) throws Exception {
ResponseHandler<String> responseHandler = new BasicResponseHandler();
String responseBody = client.execute(request, responseHandler);
System.out.println(responseBody + "\n");
return responseBody;
}
}
有没有可能让詹金斯使用真正的浏览器而不是无头浏览器?我正在运行一些用TestNG编写的测试(使用Selenium webdriver)。当我运行testng时。在Eclipse中,浏览器启动并运行测试。但当我使用Jenkins并用maven运行测试时,它不会启动任何浏览器。
我的Jenkins安装有一个(奇怪的)问题,它基本上导致SVN更新在另一个基础上失败。 堆栈跟踪显示了两个问题: 和 如果我在发生这种情况后重新运行构建,一切都会正常工作。 做记号 由ganders编辑,具有完全相同的问题: 这是导致此错误的机器堆栈跟踪。它看起来就像是在它试图访问SVNExtranals目录(.../主干/公共)时发生的,并且由于某种原因,它在第一次尝试访问时没有凭据。然后下一次
问题内容: 如何轻松地将Jenkins与qUnit集成?我将使用真正的浏览器(如firefox和chrome)运行测试。我的服务器在RedHat 6.1 Linux上运行。我想我都需要插件/库,但我仍然不知道如何使其工作。我第一次与Jenkins合作(在服务器端)。 //编辑: 如果有人也可以共享想法如何构建覆盖率报告,那将是很棒的。 提前致谢 :)。 问题答案: 说詹金斯和QUnit只是难题的一
我想做一些非常简单的事情,在一个文件夹中,我有一个jar文件和一个包含脚本的名为脚本的文件夹。但我可以让詹金斯拉链来做这件事。 zip目录:“awsdeploy”,排除:“”,glob:“”,“scripts/”,zipFile:“SQSToElasticProcessor.zip” 必须显式命名“zip”的参数。@ 第 31 行,第 16 列。
问题内容: 早上好。 我想将Jenkins服务器配置为使用插件 Jenkins NUnit插件 运行NUnit,但是我尝试了很多事情,但是没有用。 我单击按钮添加构建步骤 >> 执行Windows批处理命令, 但是我在这里看到然后我正在配置此表单: “ c:\ program files \ nunit \ bin \ nunit-console.exe” $(项目本地)\ $(DLLTest).
我有一个很棒的管道脚本: 但在输出中,我看到错误“找不到这样的字段:field java.lang.String size”: 我做错了什么? 编辑:我没有“待定签名批准”