Jenkins基础:API:2:创建与拷贝Job

在这篇文章中,使用当前的LTS版本的Jenkins创建验证环境,并使用/createItem进行Job的创建与拷贝。

环境准备

这里使用Easypack的Jenkins 2.164.3来创建验证用的Jenkins环境。使用如下步骤即可完成。

事前准备

事前准备docker和docker-compose,版本要求如下所示:

  • Docker: >= 1.13.1
  • docker-compose: >= 1.13
liumiaocn:~ liumiao$ docker version
Client:
 Version:      18.03.1-ce
 API version:  1.37
 Go version:   go1.9.5
 Git commit:   9ee9f40
 Built:        Thu Apr 26 07:13:02 2018
 OS/Arch:      darwin/amd64
 Experimental: false
 Orchestrator: swarm

Server:
 Engine:
  Version:      18.03.1-ce
  API version:  1.37 (minimum version 1.12)
  Go version:   go1.9.5
  Git commit:   9ee9f40
  Built:        Thu Apr 26 07:22:38 2018
  OS/Arch:      linux/amd64
  Experimental: true
liumiaocn:~ liumiao$ 
liumiaocn:~ liumiao$ docker-compose --version
docker-compose version 1.21.1, build 5a3f1a3
liumiaocn:~ liumiao$ 

启动Jenkins

使用Easypack中准备好的LTS的Jenkins镜像,启动Jenkins。

  • git clone

命令:git clone https://github.com/liumiaocn/easypack.git

  • 启动服务

命令:
cd easypack/containers/alpine/jenkins
docker-compose up -d

  • 执行日志
liumiaocn:jenkins liumiao$ docker-compose up -d
Creating network "jenkins_default" with the default driver
Creating jenkins_jenkins_1 ... done
liumiaocn:jenkins liumiao$ docker-compose ps
      Name                     Command               State                         Ports                      
--------------------------------------------------------------------------------------------------------------
jenkins_jenkins_1   /bin/tini -- /usr/local/bi ...   Up      0.0.0.0:50000->50000/tcp, 0.0.0.0:32002->8080/tcp
liumiaocn:jenkins liumiao$ 

Jenkins基础:API:2:创建与拷贝Job_第1张图片

创建Job

此处示例通过API,创建一个Free Style的Job,Job信息如下所示

设定项目 设定内容
Job名称 free_style_job
Job描述 Free Style Job
执行内容 通过Shell的方式执行命令:echo hello liumiaocn
  • API使用方式
操作 HTTP动作 URI 使用示例
创建Job POST /createItem /createItem?name=free_style_job
  • 命令示例
    利用上述创建的Jenkins服务,通过API进行Job的创建,需要做如下设定
    • 用户名:密码
    • 设定Content-Type为application/xml
    • 设定Job名为free_style_job
    • 传入Job的设定文件config.xml

注意此处的config.xml文件是关键,Job的描述以及FreeStyle格式中执行的具体脚本内容都需要在此文件中进行体现,此demo文件也在上传至easypack了,详细内容如下所示

liumiaocn:jenkins liumiao$ cat demo/freestyle/config.xml 
<?xml version='1.1' encoding='UTF-8'?>
<project>
  <description>Free Style Job</description>
  <keepDependencies>false</keepDependencies>
  <properties>
    <com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty plugin="[email protected]">
      <gitLabConnection></gitLabConnection>
    </com.dabsquared.gitlabjenkins.connection.GitLabConnectionProperty>
  </properties>
  <scm class="hudson.scm.NullSCM"/>
  <canRoam>true</canRoam>
  <disabled>false</disabled>
  <blockBuildWhenDownstreamBuilding>false</blockBuildWhenDownstreamBuilding>
  <blockBuildWhenUpstreamBuilding>false</blockBuildWhenUpstreamBuilding>
  <triggers/>
  <concurrentBuild>false</concurrentBuild>
  <builders>
    <hudson.tasks.Shell>
      <command>echo hello liumiaocn</command>
    </hudson.tasks.Shell>
  </builders>
  <publishers/>
  <buildWrappers/>
</project>
liumiaocn:jenkins liumiao$

举一反三:
如果有其他的需要,上述的config.xml应该设定成什么样子,建议一般的开发者对此问题不要太过于纠结。可以手动从Jenkins上生成一个期待设定的文件,Jenkins会替将此config.xml文件进行生成,上述的config.xml文件也是使用这种方式生成的。但是一般需要注意的是,这个文件中自动生成的内容会包含硬编码的内容,尤其是包含插件版本信息的内容([email protected]),在实际的使用是注意不会因为版本的升级对既有技能造成太多影响的方式进行修改即可。

具体命令如下所示:

curl -X POST -u root:liumiaocn -H "Content-Type:application/xml"  -d "@demo/freestyle/config.xml" http://localhost:32002/createItem?name=free_style_job

常见问题

Jenkins中由于对于跨域伪造请求攻击是进行了缺省的防护的,此防护导致上述命令直接执行会失败,所以关闭或者在Header中设定Crumb信息即可保证正常执行。详细说明请参看:

  • https://blog.csdn.net/liumiaocn/article/details/90690296

获取Crumb信息

使用如下命令获取crumb信息

liumiaocn:jenkins liumiao$ curl -u root:liumiaocn 'http://localhost:32002/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)'
Jenkins-Crumb:5955de6dcdcdb990b7341ead1045eb64liumiaocn:jenkins liumiao$

可以看到获取了格式为Jenkins-Crumb:5955de6dcdcdb990b7341ead1045eb64的crumb信息。接下来只需要将其加入到创建Job的Header中即可

liumiaocn:jenkins liumiao$ curl -X POST -u root:liumiaocn -H "Content-Type:application/xml" -H "Jenkins-Crumb:5955de6dcdcdb990b7341ead1045eb64" -d "@demo/freestyle/config.xml" http://localhost:32002/createItem?name=free_style_job
liumiaocn:jenkins liumiao$ 

并无异常信息显示,同时从Jenkins上也可以看到名为free_style_job的Job已经被成功创建。
Jenkins基础:API:2:创建与拷贝Job_第2张图片
然后确认此Free Style的详细信息,也可以看到预定的命令被成功设定到此Job之中了。
Jenkins基础:API:2:创建与拷贝Job_第3张图片

拷贝Job

拷贝Job操作也基本类似,按照如下设定即可进行Job的拷贝, 当然同样需要设定Crumb或者关闭CSRF

操作 HTTP动作 URI 使用示例
拷贝Job POST /createItem /createItem?name=free_style_job_copy&mode=copy&from=free_style_job
  • 执行日志示例
curl -X POST -u root:liumiaocn -H "Content-Type:application/xml" -H "Jenkins-Crumb:5955de6dcdcdb990b7341ead1045eb64" http://localhost:32002/createItem?name=free_style_job\&mode=copy\&from=free_style_job

Jenkins基础:API:2:创建与拷贝Job_第4张图片

你可能感兴趣的:(工具)