在我的项目中,部署脚本使用构建作业的结果,但我在部署作业中看到GitLab CI从上次提交中重新获取所有更改,并删除构建作业生成的所有文件。我正在使用Shell Executor。
有没有办法阻止GitLab CI在部署作业上执行此操作,以便我的部署可以从我的构建作业停止的地方继续?
我试过了:
cache:
untracked: true
在我的部署工作上,但它似乎没有任何区别
我的完整.gitlab-ci.yml是:
before_script:
- sudo apt-get -y install default-jdk
- sudo add-apt-repository -y ppa:cwchien/gradle
- sudo apt-get -y update
- sudo apt-get -y install gradle
- curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
- sudo apt-get install -y nodejs
- sudo npm install -g pm2
stages:
- build
- test
- deploy
after_script:
jobBuild:
stage: build
script:
- ( cd my-lib; gradle build assemble)
only:
- master
jobDeploy:
before_script:
stage: deploy
cache:
untracked: true
script:
- <some shell scripts>
only:
- master
答案 0 :(得分:2)
首先,由于它是您要缓存的构建作业中的文件,因此您可能希望将缓存规则添加到jobBuild。您甚至可以通过在作业外定义缓存来全局定义缓存。
缓存机制的问题在于它是一个尽力而为的系统,这意味着缓存可能并不总是可用。
缓存是在尽力而为的基础上提供的,所以不要指望它 缓存将始终存在。有关实施细节,请检查 GitLab Runner。
如果您想在100%的时间内将内置文件从一个作业转移到另一个作业,则需要使用artifcats。
Gitlab CI将允许您定义一组文件和/或文件夹,以便在作业结束时捆绑到工件中。如果您指定对第一个作业的依赖性,那么该工件将可用于后续阶段的作业。
如果您不想在部署阶段获取git repo,可以将GIT_STRATEGY
设置为none
。有关此here的更多信息。
以下是对.gitlab-ci.yml
文件的修改,以完成所有这些操作:
before_script:
- sudo apt-get -y install default-jdk
- sudo add-apt-repository -y ppa:cwchien/gradle
- sudo apt-get -y update
- sudo apt-get -y install gradle
- curl -sL https://deb.nodesource.com/setup_6.x | sudo -E bash -
- sudo apt-get install -y nodejs
- sudo npm install -g pm2
stages:
- build
- test
- deploy
after_script:
jobBuild:
stage: build
script:
- ( cd my-lib; gradle build assemble)
only:
- master
artifacts:
paths:
- path/to/folder/containing/build/files # for example my-lib
jobDeploy:
before_script:
stage: deploy
variables:
GIT_STRATEGY: none
dependencies:
- jobBuild
script:
- cd path/to/folder/containing/build/files # for example my-lib
- <some shell scripts>
only:
- master