environment与options

简介: environment与options

流水线变量

在pipeline中也是可以定义变量,使用变量的。使用关键字environment

1. 全局变量/局部变量

1.1 全局变量

流水线中也是有局部变量和全局变量之分的,他们都是使用关键字environment来定义

pipeline {
    agent {
        kubernetes {
            cloud 'kubernetes'
            showRawYaml true
            yaml """
"""
        }
    }
    environment {
        key = 'key01'
    }
    stages {
        stage('Hello') {
            steps {
                echo "${ key }"
            }
        }
    }
}

这里我们在stages外面定义了一个environment,里面有变量名key,他的值是key01

然后我们在stages里面输出了这个量,引用变量的格式是"${变量名}"

然后构建这个流水线

Running on hello-kuber-5-svx2v-pnhsc-dz2k7 in /home/jenkins/agent/workspace/hello-kuber
[Pipeline] {
[Pipeline] withEnv
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Hello)
[Pipeline] echo
key01
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS

看最后的输出,他就将变量的值key01给输出了

2. 局部变量

除了全局变量,还可以定义局部变量

pipeline {
    agent {
        kubernetes {
            cloud 'kubernetes'
            showRawYaml true
            yaml """
"""
        }
    }
    environment {
        key = 'key01'
    }
    stages {
        stage('Hello') {
            environment {
                key = 'key02'
            }
            steps {
                echo "${ key }"
            }
        }
    }
}

现在有全局变量key=key01,和一个局部变量key=key02,输出一下这个变量

[Pipeline] echo
key02
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS

点击立即构建之后他输出的是key02,全局变量和局部变量冲突之后会采用局部变量,因为局部变量的优先级更高。当然局部变量只存在于这个stages中。

3. credentials插件

我们在流水线中需要使用某个凭证的时候,jenkins也是给我们提供了一个获取凭证的方式,就是使用credentials插件

pipeline {
    agent {
        kubernetes {
            cloud 'kubernetes'
            showRawYaml true
            yaml """
"""
        }
    }
    environment {
        key = 'key01'
        gitlab_user = credentials('test')
    }
    stages {
        stage('Hello') {
            environment {
                key = 'key02'
            }
            steps {
                echo "${ key }"
                echo "${gitlab_user_USR}"
                echo "${gitlab_user_PSW}"
            }
        }
    }
}

在变量里面我们多加了一行内容gitlab_user = credentials('test'),他这个是调用credentials插件来获取id为test这个凭证的内容然后复制给变量gitlab_user,然后我们在stages里面去输出这个凭证的用户名和密码

注意我们输出的方式,我们的变量名是gitlab_user,如果我们获取的凭据他是用户名和密码这种凭据的话,那么这个变量只是一个前缀,需要获取具体的用户名就是gitlab_user.USR

密码就是gitlab_user.PAS,我们来构建一下,看一下输出

[Pipeline] echo
test
[Pipeline] echo
Warning: A secret was passed to "echo" using Groovy String interpolation, which is insecure.
     Affected argument(s) used the following variable(s): [gitlab_user_PSW]
     See https://jenkins.io/redirect/groovy-string-interpolation for details.
****
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS

可以看到用户名test已经被输出了,但是在输出密码的时候还是输出的****,这是因为他的保护机制,如果你是正常使用这个密码去连接的话是没有问题的

options

options用于定义pipeline运行时的约束,如是否在执行pipeline时打印时间戳,如果pipeline执行超过2小时,则强行终止并判定失败;禁止并行(这里的并行并不是指pipeline语法中的parallel,而是说一个任务不能有两个job同时运行)等等。

options的示例:

options {
    timestamps() //日志会有时间
    skipDefaultCheckout() //删除隐式checkout scm语句
    disableConcurrentBuilds() //禁止并行
    timeout(time: 2, unit: 'HOURS')
}

常用options说明如下:

  • buildDiscarder:为最近的流水线运行的特定数量保存组件和控制台输出
  • disableConcurrentBuilds:关闭并行执行构建,可被用来防止同时访问共享资源等
  • overrideIndexTriggers:允许覆盖分支索引触发器的默认处理
  • skipDefaultCheckout:在pipeline中,如果配置有代码仓库,则agent会默认检出代码,此选项用于跳过这个默认动作
  • skipStagesAfterUnstable:一旦构建状态变得unstable,则跳过该阶段
  • checkoutToSubdirectory:在工作空间的子目录中自动的执行源码检出
  • timeout:设置流水线运行的超时时间
timeout(time: 30, unit: 'MINUTES')
  • retry:在失败时,指定重试次数
  • timestamps:在流水线输出时,打印时间

1. 定义options

如果在options里面加入了timestamps(),那么需要安装一个插件叫做 timestamper

如果没有按装直接定义这个options的话构建是会报错的

pipeline {
    agent {
        kubernetes {
            cloud 'kubernetes'
            showRawYaml true
            yaml """
"""
        }
    }
    options {
    timestamps() 
    skipDefaultCheckout() 
    disableConcurrentBuilds() 
    timeout(time: 2, unit: 'HOURS')
    }
    environment {
        key = 'key01'
        gitlab_user = credentials('test')
    }
    stages {
        stage('Hello') {
            environment {
                key = 'key02'
            }
            steps {
                echo "${ key }"
                echo "${gitlab_user_USR}"
            }
        }
    }
}

然后我们在输出里面就可以看到有时间了

16:29:08  key02
[Pipeline] echo
16:29:08  test
[Pipeline] echo
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // timeout
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] }
[Pipeline] // withEnv
[Pipeline] }
[Pipeline] // withCredentials
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // podTemplate
[Pipeline] End of Pipeline
Finished: SUCCESS

本文来自博客园,作者:FuShudi,转载请注明原文链接:https://www.cnblogs.com/fsdstudy/p/18263594

分类: Euler / HCIE / CICD

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
消息中间件 缓存 监控
订单系统的优化
订单系统的优化
|
1月前
|
传感器 算法 物联网
从裸机到智慧物联:嵌入式RTOS任务调度原理深度剖析
本文深入剖析RTOS任务调度原理,从裸机程序的局限性切入,揭示超级循环在实时性、优先级响应和周期精度上的缺陷;系统在后面将讲解任务控制块、状态机、调度算法与上下文切换四大核心机制,助开发者理解vTaskDelay等API背后的本质。
152 5
|
机器学习/深度学习 人工智能 自然语言处理
LLM 大模型学习必知必会系列(一):大模型基础知识篇
LLM 大模型学习必知必会系列(一):大模型基础知识篇
LLM 大模型学习必知必会系列(一):大模型基础知识篇
|
前端开发 Unix Linux
揭秘 Electron 的 Linux 打包过程:你知道背后发生了什么吗?
本文详细介绍了 `electron-builder` 在 Linux 平台上如何打包 Electron 应用程序,涵盖了 AppImage、Flatpak、Snap 等多种格式的打包原理和具体实现。文章从初始化 `LinuxPackager` 到创建各种目标格式的包,详细解析了每个步骤的代码逻辑和关键方法,帮助开发者更好地理解和使用 `electron-builder` 进行 Linux 应用的打包。
1021 2
揭秘 Electron 的 Linux 打包过程:你知道背后发生了什么吗?
|
Kubernetes 架构师 Java
史上最全对照表:大厂P6/P7/P8 职业技能 薪资水平 成长路线
40岁老架构师尼恩,专注于帮助读者提升技术能力和职业发展。其读者群中,多位成员成功获得知名互联网企业的面试机会。尼恩不仅提供系统化的面试准备指导,还特别针对谈薪酬环节给予专业建议,助力求职者在与HR谈判时更加自信。此外,尼恩还分享了阿里巴巴的职级体系,作为行业内广泛认可的标准,帮助读者更好地理解各职级的要求和发展路径。通过尼恩的技术圣经系列PDF,如《尼恩Java面试宝典》等,读者可以进一步提升自身技术实力,应对职场挑战。关注“技术自由圈”公众号,获取更多资源。
|
SQL Java 关系型数据库
初探Apollo远程服务配置中心
初探Apollo远程服务配置中心
|
供应链 安全 Dubbo
GOTC演讲回顾|基于代码疫苗技术的开源软件供应链安全治理
以“代码疫苗技术”为核,构建覆盖治理与运营全流程的开源安全解决方案。
448 0
|
JavaScript
通过jquery实现文字上下滚动的效果
文字上下滚动是经常用到的js效果,这里介绍一种上下渐隐渐出的文字展现效果!
391 0
|
移动开发 容灾 Cloud Native
蚂蚁金融科技现身金融博览会,全栈式技术产品助力企业数字化转型
蚂蚁集团启动金融科技开放战略,以开放合作达成服务更多小微群体的愿景。
蚂蚁金融科技现身金融博览会,全栈式技术产品助力企业数字化转型
特殊符号大全(建议收藏_复制着用_数学符号最下面)(4)
特殊符号大全(建议收藏_复制着用_数学符号最下面)(4)
8655 0

热门文章

最新文章