在Jenkins中使用API方式创建pipeline类型的job, 但是容易出现pipeline代码换行所导致的问题,这篇文章以curl为例进行问题再现和对应说明。
事前准备
环境准备
本文使用Easypack的LTS Jenkins 2.176.1版,环境准备请参看
获取Jenkins-Crumb
使用如下示例代码获取Jenkins-Crumb,为使用API方式生成示例作准备。
liumiaocn:jenkins liumiao$ jenkins_host_url=http://localhost:32002
liumiaocn:jenkins liumiao$ user_passwd="root:liumiaocn"
liumiaocn:jenkins liumiao$ jenkins_crumb=`curl -u $user_passwd ${
jenkins_host_url}'/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,":",//crumb)' 2>/dev/null`
liumiaocn:jenkins liumiao$ echo $jenkins_crumb
Jenkins-Crumb:ec5c35f8712ad12f83fd511273a7238f
liumiaocn:jenkins liumiao$
Jenkinsfile说明
本文示例所使用的Jenkinsfile信息如下所示:
- pipeline是结构,在其中可以指定agent和stages等相关信息
- agent用于指定执行job的节点,any为不做限制
- stages用与设定具体的stage
- stage为具体的节点,比如本文示例中模拟实际的 Build(构建)、测试(Test)、部署(Deploy)的过程,当然实际情况要复杂地多。
pipeline {
agent any
stages {
stage('Build') {
steps {
sh 'echo Build stage ...'
}
}
stage('Test'){
steps {
sh 'echo Test stage ...'
}
}
stage('Deploy') {
steps {
sh 'echo Deploy stage ...'
}
}
}
}
问题再现
使用如下代码示例创建Job
liumiaocn:jenkins liumiao$ ls demo/pipeline/stage/config.xml
demo/pipeline/stage/config.xml
liumiaocn:jenkins liumiao$ cat demo/pipeline/stage/config.xml
<?xml version='1.1' encoding='UTF-8'?>
<flow-definition plugin="workflow-job@2.32">
<actions>
<org.jenkinsci.plugins.pipeline.modeldefinition.actions.DeclarativeJobAction plugin="pipeline-model-definition@1.3.8"/>
</actions>
<description>Pipeline Job Sample</description>
<keepDependencies>false</keepDependencies>
<properties>
<hudson.plugins.jira.JiraProject