我可以在Jenkins控制台输出中看到凭证。我们如何加密它们?就我而言,“掩码密码插件”被认为不安全。

#1 楼

这是在管道中安全使用它们的示例。在这种情况下,它们将作为环境变量注入,除非您出于某种原因明确选择打印出变量内容,否则永远不必显示它们的值。

环境变量通常被视为这是目前存储秘密的最佳方法,许多现代部署(例如,经常在kubernetes应用程序中广泛使用)都依赖它。

https://www.jenkins.io/doc/book/pipeline/ jenkinsfile /#handling-credentials

Jenkinsfile (Declarative Pipeline)
pipeline {
    agent {
        // Define agent details here
    }
    environment {
        AWS_ACCESS_KEY_ID     = credentials('jenkins-aws-secret-key-id')
        AWS_SECRET_ACCESS_KEY = credentials('jenkins-aws-secret-access-key')
    }
    stages {
        stage('Example stage 1') {
            steps {
                // 
            }
        }
        stage('Example stage 2') {
            steps {
                // 
            }
        }
    }
}


还可以通过让管道/等从其他工具(例如HashiCorp Vault,AWS SSM,Azure Vault)中检索它们来完全避免Jenkins等

评论


谢谢,这是从AWS之类的工具中检索凭证的好主意。我在想,如果有人想使用jenkins,则他或她必须将其凭证存储在AWS中,如果这个jenkins管道工具被大量人使用,那会不会是个问题?

– RTenda
20年4月30日在1:16

您可以进行设置,以使大多数用户无法触摸Jenkins或等效工具中的设置/配置+凭据。我希望服务帐户类型的用户可以完成管道工作,并且可以与Jenkins用户分离。您可能希望一项工作(例如部署到开发中)可以由任何人运行,但只能由devops人员修改,并且您可能希望将生产工作限制为仅允许被允许接触prod的devops人员运行。

–John Humphreys-w00te
20年5月3日在20:16

#2 楼

约翰的答案很好。另一种方法是使用withCredentials块,该块内置在核心Jenkins中。

示例

 pipeline {
  agent any

  stages {
    ...
    stage('Publish') {
      steps {
        withCredentials([usernamePassword(credentialsId: 'sonar-publisher', usernameVariable: 'SONAR_USER', passwordVariable: 'SONAR_PASSWORD')]) {
          // maybe do stuff with variables, echoing them prints *****
          sh './gradlew sonar'
        }
      }
    }
  }
}
 


在这种情况下,唯一的要求是Jenkins主服务器上存在凭据sonar-publisher,并且您的工作可以访问它们。