GitLab部署作业从git

时间:2017-05-01 12:39:54

标签: gitlab-ci

在我的项目中,部署脚本使用构建作业的结果,但我在部署作业中看到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

1 个答案:

答案 0 :(得分:2)

有关Gitlab CI cache

的更多信息

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

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

  

缓存是在尽力而为的基础上提供的,所以不要指望它   缓存将始终存在。有关实施细节,请检查   GitLab Runner。

如果您想在100%的时间内将内置文件从一个作业转移到另一个作业,则需要使用artifcats

使用artifacts

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