Jenkins是否必须签出才能获得Jenkins文件?

Jenkins是否必须签出才能获得Jenkins文件?,jenkins,jenkins-pipeline,jenkins-groovy,Jenkins,Jenkins Pipeline,Jenkins Groovy,我想了解一下詹金斯是如何在内部工作的 年,@Yen(提问者)指出,Jenkins必须签出回购协议才能获得Jenkins文件。这对我来说没有意义,因为假设我有以下Jenkins文件 pipeline { agent { label 'my-node' } { stages { .. } } } 如果Jenkins为了获得Jenkins文件必须将回购协议签入代理,那么它如何知道签入哪个代理?Jenkins master在将回购签出给代理之前,应该有一个阶段获得Jenkins文件。

我想了解一下詹金斯是如何在内部工作的

年,@Yen(提问者)指出,Jenkins必须签出回购协议才能获得Jenkins文件。这对我来说没有意义,因为假设我有以下Jenkins文件

pipeline {
  agent { label 'my-node' } { 
    stages { .. }
  }
}
如果Jenkins为了获得Jenkins文件必须将回购协议签入代理,那么它如何知道签入哪个代理?Jenkins master在将回购签出给代理之前,应该有一个阶段获得Jenkins文件。
某人?

简而言之,它总是将存储库克隆到管理所有配置和代理的orchestrator(也称为“主控”)上。然后将所有阶段向下传递到Jenkins文件中的
代理
标签。您不必写在何处进行初始克隆的原因是,当您在Jenkins UI上的管道下创建作业时,您已经完成了初始克隆

答案很长,这取决于Jenkins是如何配置的。Jenkins的大多数企业部署倾向于使用所谓的“主”和“从”策略。其中,“主”纯粹用于编排作业并提供必要的配置,“从”用于执行实际操作

这就是管道上的
代理{label'my node}
块进入的地方,它指示“Master”确保所有
阶段都在
代理(也称为“Slave”)中执行,而不是在“Master”本身中执行

由用户Praveen Premartane启动
从git获得toolkit/test/Jenkinsfilegit@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git
磨合耐久性等级:最大生存能力
提交消息:“将分支机构“功能/XXXX-2600”合并到“开发”中”
>git版本列表——无行走f83287e56beb57615bc26c2c1f2751665e54fafa#超时=10
[管道]管道的开始
[管道]节点
在/home/jenkins/workspace/Toolkit中的devops jenkins worker上运行构建git--version#“git version 2.25.1”
使用GIT_SSH设置用于签出GitLab项目的凭据SSH密钥
>git fetch--标记--强制--进度--git@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git+refs/heads/*:refs/remotes/origin/*#timeout=10
>git config remote.origin.urlgit@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git#timeout=10
>git config--添加remote.origin.fetch+refs/heads/*:refs/remotes/origin/*#timeout=10
>git rev parse refs/remotes/origin/develop^{commit}#timeout=10
>git config core.sparsecheckout#timeout=10
>git签出-f FA0FC43E6DE5ABC2940D0C4EE87FCBBA7BABAA6F6#超时=10
提交消息:“XXXX-1595:更新Jenkins作业”
>git版本列表——无行走fa0fc43e6de5abc2940d0c4ee87fcbba7baba6f6#超时=10
[管道]}
[管道]//阶段
[Pipeline]withEnv
[管道]{(隐藏)
您可能已经注意到,Jenkins首先将存储库克隆到“Master”中,一旦它理解了
Jenkins文件中的指令集
,它就开始在另一个节点上执行
阶段
(在我的例子中,
在devops Jenkins worker上运行…

如果您有一个一体式部署,其中单个Jenkins部署同时处理编排和执行工作负载,那么
代理{label'my node}
是相同的

我希望这个答案能更清楚地说明它的作用

Ps:您引用的线程正在尝试停止将同一管道再次克隆到“Salve”节点的特定行为。您可以在上面的日志中看到这种情况。请注意,在devops jenkins worker上运行
之后,开始时的日志也开始重复…


简单的回答是,它总是将存储库克隆到orchestrator(也称为“Master”)管理所有配置和代理。然后将所有阶段传递到Jenkins文件中的
代理
标签。您不必写在何处进行初始克隆的原因是,当您在Jenkins UI上的管道下创建作业时,您已经这样做了

答案很长,这取决于Jenkins是如何配置的。Jenkins的大多数企业部署倾向于使用所谓的“主”和“从”策略。其中“主”纯粹用于协调作业并提供必要的配置,“从”用于执行实际操作

这就是管道上的
代理{label'my node}
块进入的地方,它指示“Master”确保所有
阶段都在
代理(也称为“Slave”)中执行,而不是在“Master”本身中执行

由用户Praveen Premartane启动
从git获得toolkit/test/Jenkinsfilegit@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git
磨合耐久性等级:最大生存能力
提交消息:“将分支机构“功能/XXXX-2600”合并到“开发”中”
>git版本列表——无行走f83287e56beb57615bc26c2c1f2751665e54fafa#超时=10
[管道]管道的开始
[管道]节点
在/home/jenkins/workspace/Toolkit中的devops jenkins worker上运行构建git--version#“git version 2.25.1”
使用GIT_SSH设置用于签出GitLab项目的凭据SSH密钥
>git fetch--标记--强制--进度--git@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git+refs/heads/*:refs/remotes/origin/*#timeout=10
>git config remote.origin.urlgit@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git#timeout=10
>git config--添加remote.origin.fetch+refs/heads/*:refs/remotes/origin/*#timeout=10
>git rev parse refs/remotes/origin/develop^{commit}#timeout=10
>git config core.sparsecheckout#timeout=10
>git签出-f FA0FC43E6DE5ABC2940D0C4EE87FCBBA7BABAA6F6#超时=10
提交消息:“XXXX-1595:更新Jenkins作业”
>git版本列表——无行走fa0fc43e6de5abc2940d0c4ee87fcbba7baba6f6#超时=10
[管道]}
[管道]
Started by user Praveen Premaratne
Obtained toolkit/test/Jenkinsfile from git git@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git
Running in Durability level: MAX_SURVIVABILITY
Commit message: "Merge branch 'feature/XXXX-2600' into 'develop'"
 > git rev-list --no-walk f83287e56beb57615bc26c2c1f2751665e54fafa # timeout=10
[Pipeline] Start of Pipeline
[Pipeline] node
Running on devops-jenkins-worker in /home/jenkins/workspace/Toolkit_Build     <<<< Starting the actual work on the worker
[Pipeline] {
[Pipeline] stage
[Pipeline] { (Declarative: Checkout SCM)
[Pipeline] checkout
Selected Git installation does not exist. Using Default
The recommended git tool is: NONE
using credential 1234-1234-1234-1234-1234
Cloning the remote Git repository
Avoid second fetch
Checking out Revision fa0fc43e6de5abc2940d0c4ee87fcbba7baba6f6 (refs/remotes/origin/develop)
Cloning repository git@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git
 > git init /home/jenkins/workspace/Toolkit_Build # timeout=10
Fetching upstream changes from git@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git
 > git --version # timeout=10
 > git --version # 'git version 2.25.1'
using GIT_SSH to set credentials SSH key used to checkout GitLab projects
 > git fetch --tags --force --progress -- git@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git config remote.origin.url git@gitlab.co.uk:devops/pipelines/jenkins-pipeline.git # timeout=10
 > git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
 > git rev-parse refs/remotes/origin/develop^{commit} # timeout=10
 > git config core.sparsecheckout # timeout=10
 > git checkout -f fa0fc43e6de5abc2940d0c4ee87fcbba7baba6f6 # timeout=10
Commit message: "XXXX-1595: Update Jenkins jobs"
 > git rev-list --no-walk fa0fc43e6de5abc2940d0c4ee87fcbba7baba6f6 # timeout=10
[Pipeline] }
[Pipeline] // stage
[Pipeline] withEnv
[Pipeline] { (hide)