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$ 

在这里插入图片描述

创建Job

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

设定项目设定内容
Job名称free_style_job
Job描述Free Style Job
执行内容通过Shell的方式执行命令:echo hello liumiaocn
  • API使用方式
操作HTTP动作URI使用示例
创建JobPOST/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="gitlab-plugin@1.5.12">
      <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文件也是使用这种方式生成的。但是一般需要注意的是,这个文件中自动生成的内容会包含硬编码的内容,尤其是包含插件版本信息的内容(gitlab-plugin@1.5.12),在实际的使用是注意不会因为版本的升级对既有技能造成太多影响的方式进行修改即可。

具体命令如下所示:

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信息即可保证正常执行。详细说明请参看:

获取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已经被成功创建。
在这里插入图片描述
然后确认此Free Style的详细信息,也可以看到预定的命令被成功设定到此Job之中了。
在这里插入图片描述

拷贝Job

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

操作HTTP动作URI使用示例
拷贝JobPOST/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

在这里插入图片描述

淼叔 CSDN认证博客专家 神经网络 TensorFlow NLP
资深架构师,PMP、OCP、CSM、HPE University讲师,EXIN DevOps Professional与DevOps Master认证讲师,曾担任HPE GD China DevOps & Agile Leader,帮助企业级客户提供DevOps咨询培训以及实施指导。熟悉通信和金融领域,有超过十年金融外汇行业的架构设计、开发、维护经验,在十几年的IT从业生涯中拥有了软件开发设计领域接近全生命周期的经验和知识积累,著有企业级DevOps技术与工具实战。
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页