詹金斯管道:是否有可能避免多次结账?

Bas*_*ien 15 git jenkins jenkins-pipeline

我已经使用管道功能将一些旧的Jenkins作业移动到新的作业,以便能够在git存储库中集成Jenkins配置.它工作正常,但我问自己是否有办法减少建设时发生的结账次数.

建立

  • 我有一个与我的git存储库相关的Jenkins multibranch作业
  • 我的git存储库中有一个Jenkinsfile

    #!groovy
    node {
    
      stage 'Checkout'
      checkout scm
    
      // build project
      stage 'Build'
      ...
    }
    
    Run Code Online (Sandbox Code Playgroud)

问题

当我推送到我的远程分支BRANCH_1时,会触发multibranch jenkins作业,我的理解是发生以下步骤:

  • multibranch作业git fetch为分支索引创建一个并触发与我的远程分支对应的作业:BRANCH_1_job
  • BRANCH_1_job使a git checkout检索触发分支的Jenkins文件
  • Jenkins文件被执行并checkout scm自行创建.如果我不这样做,我就无法构建我的项目,因为没有可用的源.

因此,为了建立我的分支,我最终得到了一个git fetch和两个git checkout.

问题

  • 我能正确理解这个过程吗?还是我错过了什么?
  • 有没有办法减少数量git checkout?当我查看官方示例时,他们都会将结帐scm作为第一步.我个人认为我没有必要这样做,因为jenkins工作已经不得不进行检查以检索Jenkins文件(所以我的来源必须以某种方式在这里).
  • 一旦git repo包含大量refs,你不觉得这些多次结账会导致糟糕的性能吗?

谢谢大家

fdd*_*fdd 6

与普通的git詹金斯必须做两次检出:一个得到Jenkinsfile知道什么任务中的执行,然后将实际存储库的内容作建筑用途的另一结账.从技术上讲,Jenkins只需要从repo加载一个Jenkins文件,但是git不允许签出单个文件.因此,使用multibranch插件使用普通git无法避免双重结账.

如果你在Bitbucket或GitHub上托管git,那么你可以通过使用他们特定的Jenkins插件而不是multibranch插件来避免双重结账.

相应地查看Jenkins插件站点的BitbucketGitHub插件.

这些插件使用相应的Git提供程序的REST API来加载单个Jenkins文件.所以你在技术上仍然有一个双结账,但第一个是一个简单的REST调用来下载单个文件,而不是对整个存储库进行完整的本机git checkout.