【问题标题】:How do I set secrets in Jenkins Step如何在 Jenkins Step 中设置秘密
【发布时间】:2021-02-18 09:49:54
【问题描述】:

我正在寻找仅在 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'
                }
            }
...


谢谢!

【问题讨论】:

    标签: spring-boot maven jenkins-pipeline kubernetes-secrets


    【解决方案1】:

    选项 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" 
       }
    }
    

    【讨论】:

    • 非常感谢-勇对您的支持!我已经实现了选项 2,但我得到了日志中提示的每个参数 null,例如“echo spring.datasource.password = null”。已安装凭据绑定插件。你知道为什么吗?
    • 更正,应该使用env.DB_PASSWORD
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-15
      • 2013-01-23
      • 2016-08-21
      • 2016-02-17
      • 1970-01-01
      相关资源
      最近更新 更多