我在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
...
答案 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\**