首页 > 其他分享 >environment与options

environment与options

时间:2024-06-23 16:42:36浏览次数:20  
标签:Pipeline gitlab echo environment user key 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

标签:Pipeline,gitlab,echo,environment,user,key,options
From: https://www.cnblogs.com/fsdstudy/p/18263594

相关文章

  • HKCU\Environment\UserInitMprLogonScript;HKLM\Software\Microsoft\Windows NT
    HKCU\Environment\UserInitMprLogonScript: 这个键位于HKEY_CURRENT_USER(HKCU)的Environment分支下,它用于存储与当前用户环境相关的设置。UserInitMprLogonScript 键可能被设置为在用户登录时运行一个脚本或程序。这个脚本通常用于配置用户特定的环境设置或执行一些登录......
  • flinksql API StreamTableEnvironment StreamStatementSet应用
    1.问题描述在应用flink实时消费kafka数据多端中,一般会使用flink原生的addsink或flinkSQL利用SqlDialect,比如消费kafka数据实时写入hive和kafka一般用两种方式:第一种方式是写入hive利用SqlDialect,写入kafka利用flink的旁路输出流+原生addSink第二种方式是写入hive和kafka都利用S......
  • Spring Environment 容器环境变量注入Spring属性不一致却能生效
    https://blog.csdn.net/fenglllle/article/details/126942480 前言最近使用容器部署应用,Spring应用,会注入一些环境变量,然而这些环境变量的大小写和真实的取值差异很大,而且也不是xxx.xxx,而是xxx_xxx,非常奇怪,代码里也没发现原因。通过分析Spring源码发现,原理就是Spring的特殊处理......
  • vscode create python project virtual environment
     python3-mvenvvenvpipinstallrequests   #encoding:utf-8#版权所有2024涂聚文有限公司#许可信息查看:#描述:python3-mvenvvenv#pipinstallrequests#pipinstallboost###Author:geovindu,GeovinDu涂聚文.#IDE:vscodep......
  • [Bash] Environment variables
    Environmentvariablesaredefinedbytheshellandshellscripts.Tolistthecurrentenvironmentvariables,typeexport:~$exportdeclare-xDISPLAY=":0"declare-xHOME="/home/substack"declare-xHUSHLOGIN="FALSE"declar......
  • TCP_MSS_OPTIONS_05:在SYN-ACK段中非法的MSS选项长度
    测试目的:本测试用例的目的是验证DUT(被测试设备)在发送SYN段后,能否正确处理来自TESTER的SYN,ACK段中非法长度的MSS选项,而不会发生崩溃。这确保了DUT在面对不符合协议规范的数据包时的稳定性和健壮性。描述:在TCP三次握手过程中,SYN-ACK段是响应主动打开连接请求的一方(通常是......
  • TCP_MSS_OPTIONS_03:未实现的TCP选项
    测试目的:本测试用例旨在验证DUT(被测试设备)在接收到包含未实现的TCP选项的SYN段时,是否能够正确处理并建立TCP连接。测试目的是确保DUT能够忽略它未实现的TCP选项,而不会导致连接建立过程中断或产生错误。描述:在TCP协议中,可能存在一些未被DUT实现的选项。根据TCP规范,未实现......
  • TCP_MSS_OPTIONS_02:在SYN段中无操作和选项列表结束选项
    测试目的:本测试用例的目的是验证DUT(被测试设备)在接收到SYN段中包含多个NoOperation(NO-OP)选项和一个EndofOptionsList(EOL)选项时,是否能够正确处理这些选项并成功建立TCP连接。描述:在TCP连接建立过程中,SYN段用于发起一个新的连接。除了用于协商参数的选项,如MSS,SYN段还可......
  • TCP_MSS_OPTIONS_01:在SYN段中非法的MSS选项长度
    测试目的:此测试用例旨在验证DUT(被测试设备)在接收到具有非法选项长度的MSS(最大报文段大小)选项的SYN段时的健壮性。测试目的是确保DUT能够处理这种情况,而不会崩溃或出现异常行为。描述:在TCP连接建立过程中,SYN段用于发起一个新的连接。MSS选项是SYN段中常见的一个选项,它用于......
  • Nginx 配置防护 缓慢的 HTTP拒绝服务攻击+点击劫持:X-Frame-Options未配置
    一安全团队检测网站1 检测到目标主机可能存在缓慢的HTTP拒绝服务攻击缓慢的HTTP拒绝服务攻击是一种专门针对于Web的应用层拒绝服务攻击,攻击者操纵网络,对目标Web服务器进行海量HTTP请求攻击,直到服务器带宽被打满,造成了拒绝服务。慢速HTTP拒绝服务攻击经过不断的演变和发展......