Jenkinspipeline的创建和参数传递

编程

一、单分支的pipeline

Pipline的特点是可以多节点运行,节点之间可以并行或者串行执行,从而实现编译-部署-部署的持续化构建和发布。

 

与自由风格不同的是,我们可以通过编写功能强大的Jenkinsfile脚本,来实现我们所需要的功能,比如:执行shell,执行bat,重试,等待,并行/串行,发邮件,触发其他工程。难点在于需要遵循一定的Groovy语法。有一定的学习成本。

  1. job的创建

 

2. job的配置

最主要的就是如下图的脚本编写。

(1)选择pipeline script 则就是在文本框中中编写执行的脚本

(2)选择pipeline script from scm 则需要指定git项目地址,并在项目路径下创建一个名为Jenkinsfile的文本文件, 然后编写Groovy脚本。

(3)Groovy语法参考:

https://www.jenkins.io/zh/doc/pipeline/tour/getting-started/

 

二、多分支的pipeline

顾名思义,多分支pipeline就是能够实现每个分支都可以实现流水线,前提是需要每个分支下都有一个名为Jenkinsfile的文本文件。

1. 传统配置:

新建任务的时候,选择如下类型

配置。主要就是确定项目的地址。其余默认即可。此项目下的所有分支都会寻找一个Jenkinsfile的文本文件。如果找到了就执行,没有找到就放弃。

 

比如,我的一个am项目路径下master分支的Jenkinsfile文件,如下图:

面板查看。提供一些简要信息,比如编译的哪些项目,编译时间,点击可以查看具体项目的日志。

 

2. Blue ocean创建:

Blue ocean视图是专门为流水线任务打造的,可以实现创建、编辑、查看日志等功能。点击上图中的左边 “打开Blue Ocean” 即可进入。

比如am 项目下有三个分支都有jenkinsfile,所以显示了三个分支,并且每个分支执行都是成功的。

可点击master分支,查看详情。Build Test Deploy是顺序运行的三个阶段(stage)每个stage中可以包含多个步骤(step)。点击右上角的编辑按钮,可以实现编辑。

点击图中的+号,可以在右侧添加步骤,保存后会在相应分支生成Jenkinsfile文件。更加详细的步骤可以参考:https://www.jenkins.io/zh/doc/book/blueocean

 

 

三、 注意事项

(1)参数化构建。

如果想实现和自由风格一样的参数化构建功能,在选项栏中直接配置是不行的,如下设置是不生效的

脚本内容:   

    pipeline {

  agent {

    node {

      label "idam_4.244"

    }

  }

  stages {

    stage("buildFramework") {

      steps {

           echo "GIT_LOCAL_BRANCH: ${params.GIT_LOCAL_BRANCH}"

        echo "isPublishVersion: ${params.isPublishVersion}"

      }

    }

  }

}

如上脚本,在脚本里获取参数是不行的,即${isPublishVersion} 为null。

解决方案:参数化构建需要在脚本里定义,而不是在选项栏中配置。脚本参考:      

 pipeline {

  agent {

    node {

      label "idam_4.244"

    }

  }

  parameters {

          booleanParam(name: "isPublishVersion", defaultValue: false, description: "默认不发布")

          choice(choices: ["origin/release-bugfix", "origin/release", "origin/master"], description: "构建分支选择,默认origin/release-bugfix" , name: "GIT_LOCAL_BRANCH")

  }

  stages {

    stage("buildFramework") {

      steps {

           echo "GIT_LOCAL_BRANCH: ${params.GIT_LOCAL_BRANCH}"

        echo "isPublishVersion: ${params.isPublishVersion}"

      }

    }

  }

}

保存此脚本后,参数化构建选项栏将会自动根据脚本的参数设置自动生成。如此可实现和普通项目一样的参数选择构建。

 

2. 多项目间参数传递:

流水线中可能会执行多个任务,每个任务执行在不同机器上,而子项目可能会依赖一些参数设置,此时,在执行子项目时就需要传递参数。

对于String类型的传递,可以使用如下方式,GIT_LOCAL_BRANCH 参数便是前面脚本里设置的,现在需要传给zerotrust-idam-framework-dailybuild-IAM项目。请注意值的取法:

build job: "zerotrust-idam-framework-dailybuild-IAM", parameters: [string(name:"GIT_LOCAL_BRANCH", value: "${params.GIT_LOCAL_BRANCH}")]

对于Boolean类型的参数传递,只能使用如下方式

[$class: "BooleanParameterValue", name: "isPublishVersion", value: "${params.isPublishVersion}"]

如果Boolean和String类型都需要传递,则只能使用以下方式

build job: "zerotrust-idam-am-dailybuild-IAM", parameters: [

[$class: "StringParameterValue", name: "GIT_LOCAL_BRANCH", value: "${params.GIT_LOCAL_BRANCH}"],

[$class: "BooleanParameterValue", name: "isPublishVersion", value: "${params.isPublishVersion}"]

]

另外,注意boolean类型的值传递其实也是string类型,所以前面的boolean参数值传递写法为:

value: "${params.isPublishVersion}"

 

最后,贴下自己写的流水线脚本,仅供参考。实现了job的参数化构建,以及job间的参数传递:

pipeline {

agent {

node {

label "idam_4.244"

}

}

parameters {

booleanParam(name: "isPublishVersion", defaultValue: false, description: "默认不发布")

choice(choices: ["origin/release","origin/release-bugfix", "origin/master"], description: "构建分支选择,默认origin/release-bugfix" , name: "GIT_LOCAL_BRANCH")

}

stages {

stage("buildFramework") {

steps {

echo "GIT_LOCAL_BRANCH: ${params.GIT_LOCAL_BRANCH}"

echo "isPublishVersion: ${params.isPublishVersion}"

build job: "zerotrust-idam-framework-dailybuild-IAM", parameters: [string(name:"GIT_LOCAL_BRANCH", value: "${params.GIT_LOCAL_BRANCH}")]

}

}

stage("buildIAM") {

parallel {

stage("IDM") {

steps {

build job: "zerotrust-idam-idm-dailybuild-IAM", parameters: [

[$class: "StringParameterValue", name: "GIT_LOCAL_BRANCH", value: "${params.GIT_LOCAL_BRANCH}"],

[$class: "BooleanParameterValue", name: "isPublishVersion", value: "${params.isPublishVersion}"]

]

}

}

stage("AM") {

steps {

build job: "zerotrust-idam-authz-dailybuild-IAM", parameters: [

[$class: "StringParameterValue", name: "GIT_LOCAL_BRANCH", value: "${params.GIT_LOCAL_BRANCH}"],

[$class: "BooleanParameterValue", name: "isPublishVersion", value: "${params.isPublishVersion}"]

]

build job: "zerotrust-idam-am-dailybuild-IAM", parameters: [

[$class: "StringParameterValue", name: "GIT_LOCAL_BRANCH", value: "${params.GIT_LOCAL_BRANCH}"],

[$class: "BooleanParameterValue", name: "isPublishVersion", value: "${params.isPublishVersion}"]

]

}

}

}

}

stage("deploy") {

parallel {

stage("IDM") {

steps {

build "zerotrust-idam-idm-dailydeploy"

}

}

stage("AM") {

steps {

build "zerotrust-idam-am-dailyDeploy"

}

}

}

}

stage("smoke") {

parallel {

stage("IDM") {

steps {

build "zerotrust-idam-idm-smoke"

}

}

stage("AM") {

steps {

build "zerotrust-idam-am-smoke"

}

}

}

}

}

}

执行过后的Ocean Blue视图:smoke阶段的IDM步骤构建失败了。

以上是 Jenkinspipeline的创建和参数传递 的全部内容, 来源链接: utcz.com/z/516952.html

回到顶部