在 Jenkins 管道中处理秘密

Posted

技术标签:

【中文标题】在 Jenkins 管道中处理秘密【英文标题】:Handing Secrets in Jenkins pipeline 【发布时间】:2020-08-05 10:35:47 【问题描述】:

我是 Jenkins 世界的新手,我有一个用例,我使用 JenkinsFile 设置了一个 jenkins 管道。作为部署阶段的一部分,我们将在后端调用一些 ansible 脚本,以将映像部署到在云环境中运行的 Kubernetes 集群中。该脚本预计环境变量中的秘密很少,所以我想了解哪个是在 Jenkins 中处理秘密的最佳选项,我是否需要它们输入 jenkins 凭据并在 jenkins 环境中读取它们标记如下。或者在执行管道时使用输入插件从用户那里获取值是安全的,但是如果我从用户那里获取,那么我将无法完全自动化管道将等到用户输入密码。您能否以安全的方式帮助处理凭据。

pipeline
  agent any 
    environment 
        SECRET_VALUE=credentials('SECRET_VALUE_FROM_JENKINS_CREDENTIALS')
    
  

【问题讨论】:

你可以参考这里-jenkins.io/doc/book/using/using-credentials 【参考方案1】:

这取决于您的用例,实际上您上面提到的两种方法都可以。

将您的秘密作为 Jenkins 凭证保存应该没有任何问题,在我的情况下,我所有的秘密都在 Hashicorp 保险库中,并且我的 Jenkins 凭证以保险库位置为例...

      - usernamePassword:
          scope: GLOBAL
          id: serviceUser
          username: svc_admin
          password: "$secret/xyz/service_user/password"
          description: My secret service user

Jenkins 部署是通过 JCasC 进行的。

【讨论】:

非常感谢您的回答,hashicorp 保险库和 Jenkins 凭证中的秘密有多么不同。抱歉,只是想了解更多关于保险库的信息。【参考方案2】:

作为 jenkins 管理员,我可以说在 jenkins 中存储凭据是安全的。

只需在 jenkins 中创建凭据并在管道中使用。在 jenkins 中安装掩码密码插件也很好,它将在 jenkins 作业的输出中屏蔽凭据。

【讨论】:

以上是关于在 Jenkins 管道中处理秘密的主要内容,如果未能解决你的问题,请参考以下文章

在Jenkins管道中执行文件名中有空格的批处理

Jenkins 管道函数 fileExist 可以处理通配符吗?

使用 jenkins 管道在 Windows 服务器上部署 jar

Jenkins多分支管道脚本

在 Jenkins 管道中使用 Ansible 进行部署

如何在 Jenkins 声明式管道中创建方法?