【问题标题】:Using parameterized credentials in Jenkins在 Jenkins 中使用参数化凭据
【发布时间】:2015-12-12 02:24:35
【问题描述】:

假设我有一些 web 应用程序的开发、质量保证和稳定的服务器环境,以及相应的 git 分支。每个环境都应该持续集成。这些环境中的每一个都有一个单独的用户名/密码对,用于发布应用程序。我想做一个 Jenkins 多配置(矩阵)作业来发布到所有这些环境。几乎可以肯定,发布必须使用 shell 脚本。

我失败的尝试包括使用 Jenkins Credentials 和 Credentials Binding 插件。凭据绑定提供了一种使用参数将凭据作为环境变量注入的方法。但是,动态设置此参数(即,if ENV == dev: CREDS = CREDS_dev 之类的东西)似乎是不可能的。构建脚本随后发生,即使使用环境脚本插件也不起作用。

有什么办法可以做到吗?

【问题讨论】:

    标签: jenkins


    【解决方案1】:

    有类似的情况并使用带有参数化构建的 groovy 脚本 (https://wiki.jenkins-ci.org/display/JENKINS/EnvInject+Plugin)。在我的例子中,我有一个选择参数定义为“DEPLOY”并且有不同的值,比如“Test”、“Release”,然后在下面的 groovy 脚本(Evaluated Groovy script)中:

    if ("Test".equals(DEPLOY)) {def map = [DEPLOY_URL: "http://someurl", DEPLOY_STORAGE: "testaccount"]; return map } 
    

    您应该能够在此处指定您的凭据或复制环境变量。之后,您可以使用以下命令在 Windows 批处理命令中访问这些变量:

    echo %DEPLOY_URL%
    echo %DEPLOY_STORAGE%
    

    我还定义了另一个选择参数“Deploy.Branch”,其值为“dev”和“master”。并将其用作Branches to Build的参数,该值设置为(如果要根据参数动态指定分支):

    */${Deploy.Branch}
    

    希望这会有所帮助。

    【讨论】:

    • “testaccount”是某个帐户的用户名吗?密码从哪里来?
    • 是的,您可以像这样添加另一个变量:... DEPLOY_STORAGE: "testaccount", DEPLOY_PASSWORD: "pass"]
    • 对,但是密码是硬编码在作业中的。我希望使用 Jenkins 凭据来实现。
    • 在 jenkins 设置中设置全局环境变量,然后在上面的脚本中使用它们来设置本地环境变量,而不是硬编码值
    • 全局环境变量中的密码有点安全风险,不是吗?同样,我想用凭证来做这件事。我已经可以用普通的 env vars 做到这一点。
    【解决方案2】:

    这就是我最终要做的。对于我认为是 Jenkins 中存在缺陷的设计或缺失的用例,这是一种解决方法。

    • 重做我的凭据,使其具有标准 ID(这是在高级部分,创建后无法设置)
    • Matrix 作业运行一个简单的脚本来确定什么 env 映射到什么 creds ID,然后触发...
    • 进行部署的主要工作

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-16
      • 2015-12-04
      • 1970-01-01
      • 2014-09-22
      相关资源
      最近更新 更多