使用withVault将标签从Jenkins管道推送到Bitbucket存储库

l7mqbcuq  于 12个月前  发布在  Jenkins
关注(0)|答案(1)|浏览(171)

我需要在keeper命名空间中从Vault获取凭据,并在Jenkins管道中使用withVault指令而不是withCredentials。我在使用withVault时遇到了问题。
在jenkins pipeline中使用withCredentials指令可以正常工作。

withCredentials([gitUsernamePassword(credentialsId: 'BITBUCKET_ACCESS_TOKEN_TDM', gitToolName: 'git')]) {
                            String tagName = "${branchName}/${params.RELEASE}-${env.BUILD_NUMBER}"
                            sh """
                                git tag ${tagName}
                                git push origin --tags
                            """
                        }

字符串
控制台输出:

12:54:23  + git tag gen_testing/8.4.1-246
12:54:23  + git push origin --tags
12:54:30  To https://bitbucket.company.com/bitbucket/scm/genpower/genpower-core.git
12:54:30   * [new tag]                 gen_testing/8.4.1-246 -> gen_testing/8.4.1-246
12:54:31  Everything up-to-date


下面是我为withVault使用的配置。

withVault(
                            configuration: [
                                timeout: 60, 
                                vaultCredentialId: 'tdmapprole', 
                                vaultNamespace: 'genpower/tdm', 
                                vaultUrl: 'https://nat.keeper.company.com'
                            ], 
                            vaultSecrets: [
                                [
                                    engineVersion: 2, 
                                    path: 'credentials/bitbucket_access_token', 
                                    secretValues: [
                                        [
                                            envVar: 'BITBUCKET_ACCESS_TOKEN_TDM', 
                                            vaultKey: 'tgen-tdm-tbs.gen'
                                        ]
                                    ]
                                ]
                            ]
                            ) {
                                String tagName = "${branchName}/${params.RELEASE}-${env.BUILD_NUMBER}"
                                sh """
                                    git tag ${tagName}
                                    git remote set-url origin https://tgen-tdm-tbs.gen:${env.BITBUCKET_ACCESS_TOKEN_TDM}@bitbucket.company.com/bitbucket/scm/genpower/genpower-core.git
                                    git push origin --tags
                                """
                        }   
                    }


我得到下面的错误。

09:57:54  + git push origin --tags
09:57:54  fatal: could not read Username for 'https://bitbucket.company.com': No such device or address


请注意,我使用访问令牌来推送标签。访问令牌没有任何特殊字符,除了/。从keeper命名空间检索令牌工作正常。
感谢任何关于这方面的投入。谢谢!

9o685dep

9o685dep1#

错误是由于缺少url编码。添加后,它工作了。访问令牌包含特殊字符,由于它失败的错误。如果访问令牌包含下面的任何特殊字符,请将其替换为url编码的表示形式。

!   #   $    &   '   (   )   *   +   ,   /   :   ;   =   ?   @   [   ]
%21 %23 %24 %26 %27 %28 %29 %2A %2B %2C %2F %3A %3B %3D %3F %40 %5B %5D

字符串
因此,首先我将保存令牌的变量从${BITBUCKET_ACCESS_TOKEN_TDM}更改为${BITBUCKET_ACCESS_TOKEN_TDM/"/"/"%2F"}
但是用%2F替换/的转义序列可能会让人头疼,对此有一个简单得多的解决方案。

{
  env.URL_ENCODED_BITBUCKET_ACCESS_TOKEN_TDM=URLEncoder.encode(BITBUCKET_ACCESS_TOKEN_TDM, "UTF-8")
  String tagName = "${branchName}/${params.RELEASE}-${env.BUILD_NUMBER}"
     sh """
          set +x
          git tag ${tagName}
          git remote set-url origin https://tgen-tdm-tbs.gen:${URL_ENCODED_BITBUCKET_ACCESS_TOKEN_TDM}@bitbucket.company.com/bitbucket/scm/genpower/genpower-core.git
          git push origin --tags
          set -x
        """
}


请注意,如果您不关闭bash (set +x)调试,凭据将打印在作业控制台中。

相关问题