微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我如何在 Jenkins Step 中设置机密

如何解决我如何在 Jenkins Step 中设置机密

我正在寻找一种仅在 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 字符串文本凭据。但是添加凭证需要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”,“sed”还可以替换键的空值,而不是将属性添加到文件末尾。

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

    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 文件夹下以纯文本形式查看。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。