问题描述
在Jenkins的流水线中,希望能够在GitLab上创建一个合并请求。他不想在Jenkinsfile中明文存储私有令牌,想知道是否有一种从Jenkins凭据中获取私有令牌的方法。
解决方案
请注意以下操作注意版本差异及修改前做好备份。
方案1
您可以使用Jenkins的Credential Binding插件来实现这一目标。以下是具体步骤:
- 打开现有的流水线任务,在输入流水线代码的文本区域下方,点击”Pipeline Syntax”链接,打开Snippet Generator。
- 在”Sample Step”下拉菜单中,选择”withCredentials: Bind credentials to variables”。
- 在”Bindings”部分,点击”Add”按钮,添加一个新的凭据,选择”Secret text”类型。输入API令牌,为其指定一个易于记忆的ID(这是我们引用该凭据的方式)和一个描述。
- 当令牌添加完成后,从”Credentials”下拉菜单中选择它。输入您想要用来引用API密钥的变量名。根据您的示例,我将其命名为”private_token”。
- 完成后,点击”Generate Pipeline Script”按钮,生成一个带有withCredentials()函数的示例。使用此函数,调用API密钥时,用户将无法看到其内容,只能看到”private_token”。
以下是一个示例代码片段:
withCredentials([string(credentialsId: 'Gitlab-API-Key', variable: 'private_token')]) {
echo("My private token is: ${private_token}")
}
方案2
您还可以尝试以下方法:
environment {
GITLAB_API_TOKEN = credentials('gitlab_api_token')
}
或者
withCredentials([
[
$class: 'com.dabsquared.gitlabjenkins.connection.GitLabApiTokenImpl',
credentialsId: 'gitlab_api_token',
variable: 'GITLAB_API_TOKEN'
]
])
请参考以下链接获取更多信息:
- https://jenkins.io/doc/pipeline/steps/credentials-binding/
- https://github.com/jenkinsci/gitlab-plugin/issues/536
希望这些解决方案能够帮助到您!
正文完