我正在尝试创建一个WCF REST客户端,它将与Jenkins通信并从XML文件创建作业,然后构建作业.我的理解是你可以用詹金斯做到这一点.
有人可以提供一些可以在浏览器地址栏上输入的命令来创建和构建作业吗?即:http:localhost/jenkins/createItem?name=TESTJOB
沿着这些方向的东西.
我正在尝试使用带有curl的Jenkins API在Ubuntu 17.10上创建一个新工作.我正在关注这个帖子的例子.创造面包屑效果很好.但是,创建作业的调用失败,并带有根本原因的堆栈跟踪:
[编辑添加堆栈跟踪的其余部分]
org.xml.sax.SAXParseException; lineNumber: 1; columnNumber: 1; Premature end of file.
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1239)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transformIdentity(TransformerImpl.java:668)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:737)
at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:351)
at jenkins.util.xml.XMLUtils._transform(XMLUtils.java:212)
at jenkins.util.xml.XMLUtils.safeTransform(XMLUtils.java:84)
at hudson.model.ItemGroupMixIn.createProjectFromXML(ItemGroupMixIn.java:272)
at hudson.model.ItemGroupMixIn.createTopLevelItem(ItemGroupMixIn.java:189)
at jenkins.model.Jenkins.doCreateItem(Jenkins.java:3816)
at java.lang.invoke.MethodHandle.invokeWithArguments(MethodHandle.java:627)
at org.kohsuke.stapler.Function$MethodFunction.invoke(Function.java:343)
at org.kohsuke.stapler.interceptor.RequirePOST$Processor.invoke(RequirePOST.java:77)
at org.kohsuke.stapler.PreInvokeInterceptedFunction.invoke(PreInvokeInterceptedFunction.java:26)
at org.kohsuke.stapler.Function.bindAndInvoke(Function.java:184)
at org.kohsuke.stapler.Function.bindAndInvokeAndServeResponse(Function.java:117)
at org.kohsuke.stapler.MetaClass$1.doDispatch(MetaClass.java:129)
at org.kohsuke.stapler.NameBasedDispatcher.dispatch(NameBasedDispatcher.java:58)
at org.kohsuke.stapler.Stapler.tryInvoke(Stapler.java:715)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:845)
at org.kohsuke.stapler.Stapler.invoke(Stapler.java:649)
at org.kohsuke.stapler.Stapler.service(Stapler.java:238)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:841)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1650)
at hudson.util.PluginServletFilter$1.doFilter(PluginServletFilter.java:154)
at hudson.util.PluginServletFilter.doFilter(PluginServletFilter.java:157)
at org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1637)
at jenkins.security.ApiCrumbExclusion.process(ApiCrumbExclusion.java:48)
at hudson.security.csrf.CrumbFilter.doFilter(CrumbFilter.java:73)
...
Caused: java.io.IOException: Failed to persist config.xml …
Run Code Online (Sandbox Code Playgroud) 作为管理员,如何在不登录的情况下为我以外的用户获取API令牌?当我访问用户配置页面时,我看到的只是"令牌被隐藏",我也无法改变它.
曾经有一种匿名用户(例如脚本)的方法可以通过其 REST API 查询 Jenkins 的某些方面。例如,找出启动特定构建作业的用户的姓名或执行日期。然而,安全模型在过去几年发生了变化,这似乎使这变得更加困难,即使对于只读访问也是如此。
我将 Jenkins 与 ADS 身份验证一起使用。我需要提供对脚本的 API 访问,但我不想使用特定用户的个人 API 令牌(在脚本中硬编码),因为该脚本可能由我组织中的任何人运行,包括作为其他自动化的一部分,而且我不想将其与特定员工联系起来。
相反,我需要一个基于工作的令牌——一个为工作设置的令牌。有一个构建令牌,但我认为这不适用于 REST API。
我想过创建一个特殊的“自动”用户,并为该用户创建一个令牌,但 Active Directory 配置似乎阻止我创建新的 Jenkins 用户。我无法创建新的 AD 用户,因为我在我的组织中根本没有能力这样做。
使用 API 令牌进行匿名访问的最佳方法是什么?此外,有没有办法确保令牌仅提供有限的访问权限 - 例如只读?理想情况下,这样的代币将仅限于一组特定的工作,而不是全球性的。
我想问一下,如果我使用詹金斯.如何获取所有工件列表并下载它,但不能从jenkins Web界面获取.我想为某些目标制作自己的网络界面.
有没有jenkins API可以做到这一点?
我们有一个使用特定参数运行构建的Jenkins作业.其中两个参数对我很重要:部署构建的机器以及部署的软件包的版本号.
https://开头jenkinsurl /工作/ folder_level1 /工作/ folder_level2 /工作/ folder_level3/JOB_ID /
以下是url的json输出示例:
https://开头jenkinsurl /工作/ folder_level1 /工作/ folder_level2 /工作/ folder_level3/JOB_ID/API/JSON
{"actions":[{"parameters":[{"name":"lab_name","value":"labA"},{"name":"version_no","value":"1.1"}]}
Run Code Online (Sandbox Code Playgroud)
使用Jenkins REST API或Python Jenkins包装器,如果我知道folder_level1并希望将实验室名称与folder_level3中的作业匹配以最终从该URL获取版本,我将如何搜索作业?
我似乎无法通过 API 找到队列中某个项目的作业名称。我错过了什么(明显的)?
我创建了两个虚拟作业,它们需要一台名为“build1”的离线机器。
当我访问http://JENKINS_URL:8080/queue/api/json我得到这个:
{
"_class": "hudson.model.Queue",
"discoverableItems": [],
"items": [
{
"_class": "hudson.model.Queue$BuildableItem",
"actions": [
{}
],
"blocked": false,
"buildable": true,
"id": 262,
"inQueueSince": 1529331225093,
"params": "",
"stuck": true,
"task": {
"_class": "org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution$PlaceholderTask"
},
"url": "queue/item/262/",
"why": "build1 is offline",
"buildableStartMilliseconds": 1529331225094,
"pending": false
},
{
"_class": "hudson.model.Queue$BuildableItem",
"actions": [
{}
],
"blocked": false,
"buildable": true,
"id": 260,
"inQueueSince": 1529331219128,
"params": "",
"stuck": true,
"task": {
"_class": "org.jenkinsci.plugins.workflow.support.steps.ExecutorStepExecution$PlaceholderTask"
},
"url": "queue/item/260/",
"why": "build1 is offline",
"buildableStartMilliseconds": …
Run Code Online (Sandbox Code Playgroud) 我用来JenkinsAPI
触发参数化作业。我知道 Jenkins 使用 REST API,但我们的设置不允许直接这样做;所以我触发工作的主要方式是通过这个库。
到目前为止,我在服务器上查找作业或触发作业没有任何问题,但我面临两个问题
1)当我触发一个作业时,我不知道它的结果。我假设运行该函数时会返回作业的输出build_job
,但事实并非如此。我需要知道该作业是否通过或失败,但我找不到获取此信息的方法,因为当我触发它时我什至无法检索作业编号。
2)作业运行时出现错误,尽管作业确实顺利通过:
raise ValueError("Not a Queue URL: %s" % redirect_url)
我确实读了一点,似乎 Jenkins 正在 http 和 https url 之间切换,这使库感到困惑。如果我理解正确的话,这被认为是詹金斯问题,因此没有得到解决JenkinsAPI
。
这是到目前为止的代码,它确实连接到我的詹金斯服务器,检索作业列表,触发作业,但不允许我知道作业是通过还是失败,并且我收到了前面提到的错误。
有什么方法可以让它发挥作用,以便我可以获得我触发的作业的通过/失败结果?
jenkins_url = 'http://myjenkins_host:8080'
# Create server
server = Jenkins(jenkins_url, username='user', password='123456789abcdef')
# Check job and print description
for job_name, job_instance in server.get_jobs():
if job_name == "testjob":
print('Job Name:%s' % job_instance.name)
print('Job Description:%s' % (job_instance.get_description()))
# Trigger job
params = {'a':1, 'b':2, 'c': True}
server.build_job("testjob", params)
# HOW do …
Run Code Online (Sandbox Code Playgroud) 我有一个 Jenkins 的工作,它被安排在一个特定的时间。我想以编程方式修改该时间。
我尝试通过安装 Schedule Build 插件来修改构建并使用http://jenkins_url/job/jobname/build?delay=3344sec
. 但这会将工作置于包含 Java 线程的静默期。我希望在不将其置于安静期的情况下修改 Schedule 条目。
知道如何查询 jenkins 来获取运行特定 GIT 存储库的所有作业的列表吗?或者列出所有作业以及他们正在使用的 GIT 源代码?
谢谢,