如何在Jenkins步骤中设置秘密



我正在寻找一个只在Jenkins步骤中注入秘密的解决方案:

application.properties:

spring.datasource.username=mySecretValue
spring.datasource.password=mySecretValue
...

当前状态:

stage('Test') {
agent {
docker {
image 'myregistry.com/maven:3-alpine'
reuseNode true
}
}
steps {
configFileProvider([configFile(fileId: 'maven-settings-my-services', variable: 'MAVEN_SETTINGS')]) {
sh 'mvn -s $MAVEN_SETTINGS verify'
}
}
...

谢谢!

选项1)为该秘密添加密码作业参数。但是这个作业必须手动运行,因为需要有人输入密码。

// write the secret to application.property at any stage that
// prior to test and deployment stage
sh "echo spring.datasource.password=${params.DB_PASSWORD} >> application.property"

选项2)将秘密添加为詹金斯字符串文本凭证。但是添加凭据需要Jenkins管理员访问,并且还需要考虑将来的更新。

stage('test or deployment') {
environment {
DB_PASSWORD = credentials('<credential_id_of_the_secret>')
}
steps {
sh "echo spring.datasource.password=${env.DB_PASSWORD} >> application.property" 
}
}

我的一种方法是将秘密与凭据插件变量一起附加:

echo 'Attach properties for tests to property file:'
withCredentials([string(credentialsId: 'DB_PW', variable: 'SECRET_ENV')]) {
sh 'echo spring.mydatabase.password=${SECRET_ENV} >> ./src/main/resources/application.properties'

代替"echo"还可以选择替换键的空值,而不是将属性添加到文件末尾。

第二种方法是附加一个完整的属性文件,而不是键/值对。属性文件包含测试所需的所有属性:

echo 'Attach properties file for test runs:'   withCredentials([file(credentialsId: 'TEST_PROPERTIES', variable: 'APPLICATION_PROPERTIES')]) {    dir('$WORKSPACE') {
sh 'sed s#'/src/main/resources/' application.properties > TEST_PROPERTIES'

在这两种情况下,秘密必须在运行后删除,否则它们可以在Workspace文件夹下以明文形式查看。

最新更新