Jenkinsfile `pipeline` 为不同的 `stage` 使用不同的 GitHub 凭据?
Jenkinsfile `pipeline` to use different GitHub credentials for different `stages`?
我有一个 Jenkins 管道 运行 在两个节点上并行进行两个测试,例如:
pipeline
{
agent { label 'MASTER' }
stages
{
stage('x86 and Arm tests')
{
parallel
{
stage('x86')
{
agent
{
label ('x86')
}
steps
{
sh "something"
}
}
stage('arm')
{
agent
{
label ('arm')
}
steps
{
sh "something"
}
}
}
}
}
}
问题是 GitHub 凭据:我需要两个不同的 GitHub 凭据来进行两次测试(x86 机器与 Arm 机器)。
目前我已经将我的作业配置为通过 x86 计算机的 SSH 密钥进行身份验证。但是这个密钥似乎不适用于Arm作业。
如何告诉 Jenkins pipeline
在 stage
中使用特定的 GitHub clone/checkout 凭据?
当 运行 来自 SCM 的声明性管道时,对于在执行期间使用的每个代理,用于加载管道的存储库将自动签出到工作区。
如果您想更改此默认行为并手动控制每个代理的 SCM 配置,您必须首先使用 skipDefaultCheckout 选项禁用该行为。
skipDefaultCheckout
Skip checking out code from source control by default in the agent directive.
For example: options { skipDefaultCheckout() }
然后在每个代理中,您应该使用分支、存储库 URL 和凭据等所需参数检查您的存储库。为此,您可以使用通用 checkout step or you can use other SCM specific steps like the git 步骤,它是更强大的结帐步骤的一个子集的简化 shorthand。
如果在其中一个代理上,您想使用用于获取管道脚本的相同配置(如默认行为),您可以使用 checkout scm
.
来实现
这是一个包含多个选项的示例:
pipeline {
agent any
options {
skipDefaultCheckout()
}
stages {
stage('Tests') {
parallel {
stage('x86') {
agent {
label 'x86'
}
steps {
// use the same configuration used for fetching the pipeline itself
checkout scm
}
}
stage('arm') {
agent {
label 'arm'
}
steps {
// use the checkout step - in this case for Git SCM
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[credentialsId: 'my-private-key-credential-id', url: 'http://git-server/user/repository.git']]])
}
}
stage('x64') {
agent {
label 'x64'
}
steps {
// use the shortened git step
git branch: 'master', credentialsId: 'my-private-key-credential-id', url: 'https://github.com/jenkinsci/jenkins.git'
}
}
}
}
}
}
您现在可以选择在每个构建代理上定义不同的凭据,它们将在结帐过程中使用。另一种选择是使用 SCM 步骤具有的 credentialsId
选项,在 Jenkins 中定义 SCM 提供程序所需的凭据(用户名和密码或 ssh 密钥)并将它们传递给步骤 - 这样您就不需要任何pre-configuration 在代理上。
有关详细信息,请参阅 Using Credentials in Jenkins。
此外,所有传递给 SCM 步骤(分支、url、credentialsId 等)的参数都可以定义为作业参数 - 让您更灵活、更轻松地执行不同的配置。
我有一个 Jenkins 管道 运行 在两个节点上并行进行两个测试,例如:
pipeline
{
agent { label 'MASTER' }
stages
{
stage('x86 and Arm tests')
{
parallel
{
stage('x86')
{
agent
{
label ('x86')
}
steps
{
sh "something"
}
}
stage('arm')
{
agent
{
label ('arm')
}
steps
{
sh "something"
}
}
}
}
}
}
问题是 GitHub 凭据:我需要两个不同的 GitHub 凭据来进行两次测试(x86 机器与 Arm 机器)。
目前我已经将我的作业配置为通过 x86 计算机的 SSH 密钥进行身份验证。但是这个密钥似乎不适用于Arm作业。
如何告诉 Jenkins pipeline
在 stage
中使用特定的 GitHub clone/checkout 凭据?
当 运行 来自 SCM 的声明性管道时,对于在执行期间使用的每个代理,用于加载管道的存储库将自动签出到工作区。
如果您想更改此默认行为并手动控制每个代理的 SCM 配置,您必须首先使用 skipDefaultCheckout 选项禁用该行为。
skipDefaultCheckout
Skip checking out code from source control by default in the agent directive.
For example:options { skipDefaultCheckout() }
然后在每个代理中,您应该使用分支、存储库 URL 和凭据等所需参数检查您的存储库。为此,您可以使用通用 checkout step or you can use other SCM specific steps like the git 步骤,它是更强大的结帐步骤的一个子集的简化 shorthand。
如果在其中一个代理上,您想使用用于获取管道脚本的相同配置(如默认行为),您可以使用 checkout scm
.
来实现
这是一个包含多个选项的示例:
pipeline {
agent any
options {
skipDefaultCheckout()
}
stages {
stage('Tests') {
parallel {
stage('x86') {
agent {
label 'x86'
}
steps {
// use the same configuration used for fetching the pipeline itself
checkout scm
}
}
stage('arm') {
agent {
label 'arm'
}
steps {
// use the checkout step - in this case for Git SCM
checkout([$class: 'GitSCM', branches: [[name: '*/master']],
userRemoteConfigs: [[credentialsId: 'my-private-key-credential-id', url: 'http://git-server/user/repository.git']]])
}
}
stage('x64') {
agent {
label 'x64'
}
steps {
// use the shortened git step
git branch: 'master', credentialsId: 'my-private-key-credential-id', url: 'https://github.com/jenkinsci/jenkins.git'
}
}
}
}
}
}
您现在可以选择在每个构建代理上定义不同的凭据,它们将在结帐过程中使用。另一种选择是使用 SCM 步骤具有的 credentialsId
选项,在 Jenkins 中定义 SCM 提供程序所需的凭据(用户名和密码或 ssh 密钥)并将它们传递给步骤 - 这样您就不需要任何pre-configuration 在代理上。
有关详细信息,请参阅 Using Credentials in Jenkins。
此外,所有传递给 SCM 步骤(分支、url、credentialsId 等)的参数都可以定义为作业参数 - 让您更灵活、更轻松地执行不同的配置。