1.调用脚本时,使用script和不使用script的区别
使用script表示调用脚本式pipeline
此步骤用于将脚本化流水线语句添加到声明式流水线中,从而提供更多功能。此步骤必须包括在“step”级别
脚本块可以多次用于不同的项目。这些块使您可以扩展Jenkins功能,并可以实现为共享库。可以在Jenkins共享库中找到有关此内容的更多信息。同样,可以将共享库导入并使用到“script”中,从而扩展了流水线功能。
2.ide高亮显示Jenkinsfile语法
顶部插入行 #!/usr/bin/env groovy
3.环境变量访问(分为内置变量和自定义变量)
3.1 自定义变量
env
命令来获取Jenkins的全部内置环境变量
1 pipeline { 2 agent any 3 stages{ 4 stage("PrintEnviroment"){ 5 steps{ 6 // method A 7 echo "Running ${env.BUILD_ID} on ${env.JENKINS_URL}" 8 // method B 9 echo "Running $env.BUILD_ID on $env.JENKINS_URL" 10 // method C 11 echo "Running ${BUILD_ID} on ${JENKINS_URL}" 12 } 13 } 14 } 15 }
默认情况下,env中的所有环境变量都可以直接在pipeline中使用。因此上面三种方法都可以使用,但不推荐第三种方法,因为在出现变量名冲突时,排查问题非常难。
3.2 自定义变量
1 pipeline { 2 agent any 3 environment{ 4 NAME="Surpass" 5 AGE="28" 6 } 7 stages{ 8 stage("PrintGolbalEnviroment"){ 9 steps{ 10 echo "Global Enviroment is name is ${env.NAME} age is ${env.AGE}" 11 } 12 } 13 stage("PrintLocalEnviroment"){ 14 environment{ 15 CITY="Shanghai" 16 FROM="Wuhan" 17 } 18 steps{ 19 echo "Global Enviroment is name is ${env.NAME} age is ${env.AGE}" 20 echo "Local Enviroment is city is ${env.CITY} from is ${env.FROM}" 21 } 22 } 23 } 24 }
1 environment 可以在pipeline中定义,属于全局环境变量,代表整个pipeline均可以使用该环境变量。也可以在stage中定义,属于局部环境变量,仅限于该阶段内部有效,外部无法使用。
除了以上几中自定义环境变量,还可以通过script
来定义全局变量
,示例如下所示:
1 pipeline { 2 agent any 3 environment{ 4 NAME="Surpass" 5 AGE="28" 6 } 7 stages{ 8 stage("Set environment by script"){ 9 steps{ 10 script{ 11 env.SURPASS_NAME="Surpass" 12 env.SURPASS_AGE=28 13 } 14 } 15 } 16 17 stage("PrintGolbalEnvironment"){ 18 steps{ 19 echo "Global Enviroment is name is ${env.NAME} age is ${env.AGE}" 20 } 21 } 22 stage("PrintLocalEnvironment"){ 23 environment{ 24 CITY="Shanghai" 25 FROM="Wuhan" 26 } 27 steps{ 28 echo "Global Enviroment is name is ${env.NAME} age is ${env.AGE}" 29 echo "Local Enviroment is city is ${env.CITY} from is ${env.FROM}" 30 } 31 } 32 stage("PrintSetEnvironment"){ 33 steps{ 34 echo "print global env by script ${env.SURPASS_NAME}" 35 echo "print global env by script ${env.SURPASS_AGE}" 36 } 37 } 38 } 39 }
在自定义环境变量,需要注意的地方如下所示:
1.环境变量是不能跨pipeline进行访问的,即不同的pipeline间不能共享环境变量 2.如果用户自定义的环境变量与env环境变量重名,则被重命名的环境将被覆盖
env中的环境变量都是内置的,用户自定义的环境变量是与具体的pipeline相关的。如果需要定义全局并且跨pipeline自定义环境变量,可以这样设置。
Manage Jenkins->Configure System-> Global properties,勾选 Environment variables,添加对应的环境变量即可。
4.关闭默认的checkout from scm功能
在使用Pipeline script from SCM时,会默认检出
options { skipDefaultCheckout true }
5.控制台输出增加时间戳
需要安装timestamper插件
options{ timestamps() }
6.设置环境变量
声明式流水线,使用 environment , 分局部和全局变量
脚本式流水线,使用 withEnv
7.调用shell
sh "cd myfile"
执行shell命令并获取其返回值
sh既有 ``returnStatus`` 也有 ``returnStdout``
使用returnStdout
时,返回的字符串末尾会追加一个空格。可以使用.trim()
将其移除
def exitValue = sh(script: "find ${WORKSPACE} -name pom.xml", returnStdout: true).trim()
8.处理参数
pipeline { agent any parameters { string(name: 'Greeting', defaultValue: 'Hello', description: 'How should I greet the world?') } stages { stage('Example') { steps { echo "${params.Greeting} World!" } } } }
9.可选的步骤参数
下面的语句有着相同的功能:
git url: 'git://example.com/amazing-project.git', branch: 'master' git([url: 'git://example.com/amazing-project.git', branch: 'master'])
为了方便,当调用只有一个参数的步骤时(或仅一个强制参数),参数名称可以省略,例如:sh 'echo hello' /* short form */
sh([script: 'echo hello']) /* long form */
二、共享库
共享库也可以定义全局变量,和定义内置步骤的操作类似, 比如 sh
或 git
。定义在共享库中 的全局变量*must* 必须以全小写或 "camelCased" 命名以便于能够在流水线中正确的加载
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言