在Jenkins作业的Bash脚本中引用全局凭据

zqry0prt  于 2023-03-17  发布在  Jenkins
关注(0)|答案(6)|浏览(275)

我创建了全局凭据(用户名、密码)并提供了自定义ID。如何在Bash脚本中引用此ID?我已经在作业配置中选中了“inject global password”。
我尝试了Jenkins: Access global passwords in powershell,但不起作用。
假设全局凭据的ID是“USER_PASSWORD”,我的bash脚本尝试:

echo ${USER_PASSWORD}
echo ${env:USER_PASSWORD}

不起作用。我读了一些在线帖子,我需要查询Jenkins API来获得凭据。这听起来不对。

mspsb9vt

mspsb9vt1#

使用Credentials Binding Plugin,可以将全局凭据注入到生成上下文中。这可以通过选中作业配置页的生成环境部分中标记为 * 使用机密文本或文件 * 的复选框来完成。添加 * 用户名和密码(分隔)* 绑定,选择您创建的特定凭据,并定义您的用户名和密码变量。
下面是一个正在使用的凭据绑定插件的示例,但使用了冒号分隔的用户名/密码变量,而不是两个单独的变量:

然后,您可以使用在shell脚本中定义的用户名和/或密码变量。假设用户名值为foo,密码值为bar...

  • 用户名和密码 * 绑定,变量名USER_CREDENTIALS
echo $USER_CREDENTIALS # -> foo:bar
  • 用户名和密码(分开)* 绑定,变量名USER_IDUSER_PASSWORD
echo $USER_ID          # -> foo
echo $USER_PASSWORD    # -> bar
yhqotfr8

yhqotfr82#

如果您的凭证ID是“USER_PASSWORD”,您必须使用以下命令读取它:USER_CREDENTIALS = credentials('USER_PASSWORD')。完成此操作后,用户名和密码将在以下环境变量中可用:USER_CREDENTIALS_USRUSER_CREDENTIALS_PSW。Jenkins总是在变量名后面加上_USR_PSW
示例管道(我没有完全测试它,但应该可以工作):

pipeline {
    agent any

    environment {
        USER_CREDENTIALS = credentials('USER_PASSWORD')
    }

    stages {
        stage('Run') {
            steps {
                sh "echo $USER_CREDENTIALS_USR"
                sh "echo $USER_CREDENTIALS_PSW"
            }
        }
    }
}

如果您得到****(四个星号)作为输出,这是可以的- Jenkins会在控制台输出中自动屏蔽用户名和密码。
更多信息:https://jenkins.io/doc/book/pipeline/jenkinsfile/#usernames-and-passwords网站。

laik7k3q

laik7k3q3#

对于如何在bash脚本中使用参数化凭据参数username和password作为环境变量,我找不到一个直接的答案。
1.添加凭据参数。我将其命名为“CREDENTIALS”。凭据类型为“用户名和密码”。x1c 0d1x
1.在生成环境中选中“使用机密文本或文件"。
1.添加“用户名和密码(分隔)”绑定。我将用户名变量设置为USER,将密码变量设置为PW。对于凭据,请选择“参数表达式”并输入步骤1中的名称。在本例中,它将是${CREDENTIALS}.

1.现在${USER}${PW}可用于bash脚本。

1aaf6o9v

1aaf6o9v4#

在我的情况下,我用withCredentials Credentials Binding Plugin解决了这个问题。

stage('Commit') {
   withCredentials([usernamePassword(credentialsId: 'hash', usernameVariable: 'USERNAME', passwordVariable: 'PASSWORD')]) {
      sh 'svn commit xxx.ear -m "Comment" --username $USERNAME --password $PASSWORD'
   }
}
z9zf31ra

z9zf31ra5#

在我的示例中,我使用了以下代码来读取Active中配置的凭据

Choices Paramater Plugin's Groovy Script to populate the choices.

        def creds = com.cloudbees.plugins.credentials.CredentialsProvider.lookupCredentials(
            com.cloudbees.plugins.credentials.common.StandardUsernamePasswordCredentials.class,
            jenkins.model.Jenkins.instance
        )
    
    def user = creds[0].username
    def pwd= creds[0].password
    def gettags = ("git ls-remote --tags https://$user:$pwd@github.com/<yourRepo>.git").execute()

这样,凭据就不会硬编码在脚本中,这样,如果我们想更改生成的令牌,它就可以管理注意:我们使用GitHubTokens而不是密码来执行操作

0ejtzxu1

0ejtzxu16#

对我来说,问题仅仅是大括号不起作用。

#!/bin/bash

# did not work:
echo ${USERNAME}

# DID work:
echo $USERNAME

相关问题