东行天下

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5
统计
 

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" 命名以便于能够在流水线中正确的加载

 

posted on   东行天下  阅读(112)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· Qt个人项目总结 —— MySQL数据库查询与断言
 
点击右上角即可分享
微信分享提示