环境 environment
environment
指令指定一系列键值对,这些键值对将被定义为所有step或特定stage的step的环境变量,具体取决于environment指令位于Pipeline中的位置。
该指令支持一种特殊的助手方法credentials()
,可以通过Jenkins环境中的标识符来访问预定义的凭据。对于类型为“Secret Text”的凭据,该 credentials()
方法将确保环境变量中包含该Secret Text内容。对于“标准用户名和密码”类型的凭证,指定的环境变量将被设置为username:password
并且将自动定义两个附加的环境变量:MYVARNAME_USR
和MYVARNAME_PSW
。
是否必填 | 否 |
---|---|
参数 | 没有 |
允许出现在 | 在pipeline 块内或stage 内 |
例如:
Jenkinsfile (Declarative Pipeline)
pipeline {
agent any
environment {
CC = 'clang'
}
stages {
stage('Example') {
environment {
AN_ACCESS_KEY = credentials('my-prefined-secret-text')
}
steps {
sh 'printenv'
}
}
}
}
environment
顶级pipeline
块中使用的指令将适用于Pipeline中的所有步骤- 在一个
stage
中定义的environment
指令只将给定的环境变量应用于该stage
中的步骤environment
具有一个帮助方法credentials()
,可用于在Jenkins环境中通过其标识符访问预定义的凭据
同时,environment{…}支持credentials()
方法来访问预先在Jenkins保存的凭据,并赋值给环境变量
credentials()
支持的凭据类型:
-
Secret Text
-
Secret File
-
Username and password:使用
变量名_USR
and变量名_PSW
来获取其中的用户名和Password
pipeline {
agent any
stages {
stage('Example Username/Password') {
environment {
SERVICE_CREDS = credentials('my-prefined-username-password')
}
steps {
sh 'echo "Service user is $SERVICE_CREDS_USR"'
sh 'echo "Service password is $SERVICE_CREDS_PSW"'
sh 'curl -u $SERVICE_CREDS https://myservice.example.com'
}
}
}
}
Jenkins凭据管理
Jenkins的凭据有很多种类型,可以将一些敏感信息存储为凭据,然后在项目中引用。 凭据-> 系统-> 全局凭据。
Jenkins凭据管理,在流水线部署过程当中是非常实用的,比如将一些用户账号,如gitlab管理员的一个账号等存在这里,流水线就可以去使用,凭据的作用就是存放这些账号。
Jenkins的每个凭据会有一个唯一的ID,这个ID很重要,可以自定义也可以随机生成。(后续流水线中引用都是通过ID引用的)
Jenkins的凭据有很多种类型,可以将一些敏感信息存储为凭据,然后在项目中引用。 凭据-> 系统-> 全局凭据 Token和用户名密码方式足够使用了
Username with password
类型存储Harbor或者其他系统的用户名和密码。GitLab API token
类型存储Gitlab的用户API token。Secret text
类型可以用来存储OpenShift等系统中的token。Certificate
类型可以用户存储证书,例如k8s的用户证书。
有用户名密码类型凭据和证书类型凭据,用户名密码是存比如gitlab用户名密码
ID让其自动生成
这样一个凭据就创建好了
Started by user admin
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/java-test
[java-test] $ /bin/sh -xe /tmp/jenkins5884252035043282157.sh
+ echo 'gitadmin value is f50b77b0-149d-42fa-b096-0db46e80a84a'
gitadmin value is f50b77b0-149d-42fa-b096-0db46e80a84a
Finished: SUCCESS
可以看到这里传进去的是凭据的ID
secret类型的凭据 这里存放API token
这里存放token
使用凭据
我们可以在项目中增加一个凭据参数,用与项目构建中使用,当我们使用pipeline类型的项目的时候,我们可以通过片段生成器
生成流水线语法
此处注意:需要提前安装插件 Credentials Binding Plugin。
- 选择要使用的凭据的类型
-
输入该凭据的账号的密码的变量名称(后续直接在流水线中使用此变量进行引用)
-
流水线代码
withCredentials([usernamePassword(credentialsId: '24982560-17fc-4589-819b-bc5bea89da77', passwordVariable: 'password', usernameVariable: 'username')]) { // some block sh "curl -u ${username}:${password} xxxxxxxxx" }
pipeline { agent any stages { stage('Hello') { steps { withCredentials([usernamePassword(credentialsId: 'c4d406ea-36de-473d-aa45-068975837137', passwordVariable: 'password', usernameVariable: 'username')]) { echo "{$password}" } } } } }