GitLab 部署作业从 git 获取更改

zak*_*um1 6 gitlab-ci

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

有没有办法阻止 GitLab CI 在部署作业中执行此操作,以便我的部署可以从构建作业停止的地方继续?

我努力了:

cache:
    untracked: true
Run Code Online (Sandbox Code Playgroud)

在我的部署工作中,但这似乎没有任何区别

我完整的 .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
Run Code Online (Sandbox Code Playgroud)

Jaw*_*wad 6

有关 Gitlab CI缓存的更多信息

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

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

缓存是尽力提供的,因此不要期望缓存始终存在。有关实现细节,请查看 GitLab Runner。

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

使用工件

Gitlab CI 将允许您定义一组文件和/或文件夹,以在作业结束时捆绑到工件中。如果您指定了对第一个作业的依赖关系,则该工件将可在后续阶段的作业中使用。

如果您不想在部署阶段获取 git 存储库,可以将您的设置GIT_STRATEGYnone. 有关此的更多信息,请参见此处

这是对文件的修改.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
Run Code Online (Sandbox Code Playgroud)