在Jenkins中动态创建作业

时间:2014-12-29 17:01:37

标签: jenkins

我在jenkins有一个配置的工作,然后,使用jenkins /cli get-job我可以xml(API方法){{1}我的工作结构然后我可以在create-job中使用跟随的xml jenkins(API方法)。

?xml version='1.0' encoding='UTF-8'?>
<project>
 <actions/>
  <description></description>
  <keepDependencies>false</keepDependencies>
  <properties/>
<scm class="hudson.plugins.git.GitSCM" plugin="git@2.2.7">
<configVersion>2</configVersion>
<userRemoteConfigs>
  <hudson.plugins.git.UserRemoteConfig>
  <url>https://username:password@bitbucket.org/repoowner/project.git</url>
  <credentialsId>550e8400-e29b-41d4-a716-446655440000</credentialsId>
  </hudson.plugins.git.UserRemoteConfig>
</userRemoteConfigs>
....

即使我提供此url代码&#34; https://username:password@bitbucket.org/repoowner/project.git&#34; jenkins需要身份验证才能工作,因此在credentialsId标签中,jenkins会提供UUID。

我希望能够通过具有此格式的给定网址的外部应用程序动态创建作业&#34; https://username:password@bitbucket.org/repoowner/project.git&#34;。

怎么做?

感谢。

2 个答案:

答案 0 :(得分:2)

您可以通过API和凭证存储插件获取credentialsId。

e.g。对于全局域中的凭据

$ {your-jenkins-domain} / credential-store / domain / _ / api / xml

<domainWrapper>
 <credentials>
  <_XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/>
 </credentials>
 <description></description>
 <displayName></displayName>
 <fullDisplayName></fullDisplayName>
 <fullName>credential-store/_</fullName>
 <global>true</global>
 <urlName>_</urlName>
</domainWrapper>

但在某些方面它有点棘手:
当访问全局域的xml api时,id已经有一个'_'作为前缀。使用其他域时,前缀丢失(但在作业中添加了前缀...无法确定可以找到前缀的位置)

e.g。我将github访问数据存储在一个独立的域中,credentialsId标记为:

<XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX/>

但在职位ID中使用的是:

0XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX

答案 1 :(得分:0)

实际上我只是在bitbucket中创建一般用户来解决问题,然后UUID它始终相同,我可以将该UUID复制并粘贴到其他project.xml文件中。