Gitlab CI:仅在第一次构建管道

时间:2016-09-13 12:23:08

标签: yaml gitlab gitlab-ci

我在Gitlab CI的.yml文件中有~5-10个版本。为了节省时间,我想知道是否有办法不在每个作业之间重新克隆回购。理想情况下,回购将被克隆一次,然后所有3个工作都会运行。我也不想将作业组合到一个构建中,因为我希望单独看到每个作业的结果(当它们合并时,gitlab的“通过/失败”只是上一个作业的结果)。

我不想简单地做git fetch,因为我想在开始时想要一个新的克隆。

stages:
  - run

job1:
  stage: run
  script: 
    - pwd
    - make all TEST=job1

job2:
stage: run
script: 
    - pwd
    - make all TEST=job2

job3:
stage: run
script: 
    - pwd
    - make all TEST=job3

...

2 个答案:

答案 0 :(得分:2)

这可能会有所帮助,假设您使用的是足够新版本的gitlab和跑步者:https://docs.gitlab.com/ce/ci/yaml/README.html#git-strategy

您可以将git-strategy设置为none,并在before_script部分中手动克隆repo。

这仍然会有一些困难 - 因为不同的跑步者可以为不同的工作提供服务,如果你没有这个项目的专用跑步者,所有跑步者都需要访问回购地点。

答案 1 :(得分:0)

我也在摆弄这个话题。
实际上,我首先进行一个结帐阶段(使用GIT_STRATEGY: clone),然后执行具有多个作业和GIT_STRATEGY: fetch的构建阶段。
这样可以确保仓库一开始就被完全克隆,并且仅在每个构建步骤中都被提取。也许这对您也有帮助。

stages:
  - checkout
  - build

checkout:
  variables:
    GIT_STRATEGY: clone
    GIT_SUBMODULE_STRATEGY: recursive

  stage: checkout
  script: '@echo Checking out...'

build:commander:
  stage: build
  variables:
    GIT_STRATEGY: fetch  
  script:
    - _Publish.bat commander
  artifacts:
    paths:
      - BuildArtifacts\Commander\**    

build:login:
  stage: build
  variables:
    GIT_STRATEGY: fetch  
  script:
    - _Publish.bat login
  artifacts:
    paths:
      - BuildArtifacts\Login\**    

build:cli:
  stage: build
  variables:
    GIT_STRATEGY: fetch  
  script:
    - _Publish.bat cli
  artifacts:
    paths:
      - BuildArtifacts\Cli\**