如何扩展模板脚本?

How to extend template script?

我的 .gitlab-ci.yml 文件中有以下模板:

x-android-build-tools: &android_build_tools
  image: jangrewe/gitlab-ci-android
  stage: build
  script:
    - export GRADLE_USER_HOME=$(pwd)/.gradle
    - chmod +x ./gradlew
  artifacts:
    expire_in: 1 hours
    paths:
      - app/build/

我想扩展脚本部分以进行实际构建。例如:

android-stage-build:
  <<: *android_build_tools
  environment: stage
  only:
    - dev
  after_script:
    - ./gradlew :app:assembleDebug

效果很好,但是有问题。 Docker 启动两个作业而不是忽略模板。

有没有办法运行 只有“android-stage-build”作业在需要时触发模板作业?

是的。您只是缺少 . :)

https://docs.gitlab.com/ee/ci/yaml/yaml_optimization.html#anchors

这样写应该可以:

.x-android-build-tools: &android_build_tools
  image: jangrewe/gitlab-ci-android
  stage: build
  script:
    - export GRADLE_USER_HOME=$(pwd)/.gradle
    - chmod +x ./gradlew
  artifacts:
    expire_in: 1 hours
    paths:
      - app/build/

android-stage-build:
  <<: *android_build_tools
  environment: stage
  only:
    - dev
  after_script:
    - ./gradlew :app:assembleDebug

为了让gitlab ci忽略第一个条目,需要在定义前加一个点(.)

.x-android-build-tools: &android_build_tools
  image: jangrewe/gitlab-ci-android
  stage: build
  script:
    - export GRADLE_USER_HOME=$(pwd)/.gradle
    - chmod +x ./gradlew
  artifacts:
    expire_in: 1 hours
    paths:
      - app/build/

android-stage-build:
  <<: *android_build_tools
  environment: stage
  only:
    - dev
  after_script:
    - ./gradlew :app:assembleDebug

除此之外,我认为,根据我在这里阅读的内容,您不想使用 after_script

我认为您想在模板中使用 before_script,并在构建阶段使用 cific script-key。 主要区别在于 after_script 也会在脚本失败时运行。根据我在这里读到的内容,您似乎不希望这种情况发生。