ssh key
对管道中的所有阶段可见。从官方文档中,我了解到:
environment
伪指令用于拒绝在Jenkinsfile中使用的环境变量定义的变量范围取决于
environment
伪指令的位置借助以下命令,可以在
environment
伪指令中设置某些类型的凭据。 credentials
帮助程序帮助程序支持的凭据类型为:
机密文本
用户名和密码
机密文件
对于其他类型的凭据,该文档建议使用
snippet generator
,它会生成一个步骤。ssh密钥步骤示例
withCredentials([sshUserPrivateKey(credentialsId: 'jenkins_aws_to_bitbucket', keyFileVariable: 'BITBUCKET_PRV_KEY')]) {
// some block
}
这旨在用于以下阶段:
pipeline {
agent {
// define agent details
}
stages {
stage('Example stage 1') {
steps {
withCredentials(bindings: [sshUserPrivateKey(credentialsId: 'jenkins-ssh-key-for-abc', \
keyFileVariable: 'SSH_KEY_FOR_ABC')]) {
//
}
withCredentials(bindings: [certificate(credentialsId: 'jenkins-certificate-for-xyz', \
keystoreVariable: 'CERTIFICATE_FOR_XYZ', \
passwordVariable: 'XYZ-CERTIFICATE-PASSWORD')]) {
//
}
}
}
stage('Example stage 2') {
steps {
//
}
}
}
}
摘录源
问题
如果步骤在一个阶段内,则这些凭据在其他阶段是否可见s?
如果不是,如何使这些凭据在所有阶段都可以全局可见
#1 楼
否,凭据只能在传递给
withCredentials
的块内看到,而不能在此范围之外。如果不切换到脚本管道,就无法使凭据全局可用。使用脚本,您可以将整个作业包装在
withCredentials
中。使用声明式是不可能的。#2 楼
我在这样的声明性管道中全局设置凭据,然后我的詹金斯可以在各个阶段与Google Dataflow进行交流。例如,我使用了一个秘密文件(Google服务帐户)。
pipeline {
agent any
environment {
//Secret File ID was defined in Jenkins -> Credentials -> System -> Global credentials
GOOGLE_APPLICATION_CREDENTIALS = credentials('mySecretFileId')
GCP_PROJECT_NAME = 'myProject'
}
stages {
stage('step 1') {
steps {
sh "gcloud auth activate-service-account --key-file ${env.GOOGLE_APPLICATION_CREDENTIALS}"
sh "gcloud config set project ${env.GCP_PROJECT_NAME}"
// access google dataflow
sh "gcloud dataflow jobs list --status=active"
// ....
}
}
stage('stage 2') {
steps {
// access google dataflow
sh "gcloud dataflow jobs list --status=active"
}
}
//...
}
}