GitLab 部署作业从 git 获取更改

GitLab deploy job fetches changes from git

在我的项目中,部署脚本使用构建作业的结果,但我看到在我的部署作业中 GitLab CI 重新获取上次提交的所有更改,并删除构建生成的所有文件工作。我正在使用 Shell 执行器。

有没有办法阻止 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

关于 Gitlab 的更多信息 CI cache

首先,由于您要缓存的是构建作业中的文件,因此您可能需要将缓存规则添加到 jobBuild。您甚至可以通过在作业外定义它来全局定义缓存。

缓存机制的问题在于它是一个尽力而为的系统,这意味着缓存可能并不总是可用。

The cache is provided on a best-effort basis, so don't expect that the cache will be always present. For implementation details, please check GitLab Runner.

如果您想要将构建的文件在 100% 的时间内从一个作业传输到另一个作业,则需要使用 artifacts

使用artifacts

Gitlab CI 将允许您定义一组文件 and/or 文件夹,以便在作业结束时捆绑到工件中。如果您指定对第一个作业的依赖性,那么该工件将可用于后期阶段的作业。

如果您不想在部署阶段获取 git 存储库,您可以将 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