Travis CI: Как условно запустить задания по развертыванию провайдера? - PullRequest
0 голосов
/ 30 января 2019

У меня есть сценарий travis, развертываемый в разные сегменты S3 на основе 2 условий: 1. имя ветви 2. переменная $TRAVIS_BRANCH env

... travis stuff
deploy:
  - provider: s3
    ... other config
    bucket: my-staging-bucket
    on:
      repo: MyOrg/my-repo
      branch: staging
      condition: $TRAVIS_BRANCH = staging
  - provider: s3
    ... other config
    bucket: my-prod-bucket
    on:
      repo: MyOrg/my-repo
      branch: production
      condition: $TRAVIS_BRANCH = production

Работает, как и ожидалось: при развертывании в промежуточную версиюпервый конфигурационный файл успешно создается и развертывается, и мне выдается соответствующий обмен сообщениями в журнале заданий Travis.

Он также пытается выполнить развертывание в рабочей среде и останавливается условиями on:, снова предоставляя обмен сообщениями, который указывает намного.Полученные в результате сообщения журнала выглядят так: первые две строки указывают на успешное депонирование на промежуточную стадию и отсутствие развертывания на производственном уровне.

-Preparing deploy
-Deploying application
-Skipping a deployment with the s3 provider because a custom condition was not met

Это согласуется при обратной ситуации:

-Skipping a deployment with the s3 provider because this branch is not permitted: production
-Skipping a deployment with the s3 provider because a custom condition was not met
...
-Preparing deploy
-Deploying application

Это привело к некоторой путанице в команде, так как обмен сообщениями выглядит ложно отрицательным, что указывает на сбой развертывания, когда он фактически функционирует как задумано. Я хотел бы настроить Travis таким образом, чтобы он запускал сценарий развертывания только для этой ветви и комбинированной переменной env .
Есть ли способ сделать это?У меня сложилось впечатление, что это был метод условного развертывания.

Если нет способа предотвратить запуск обоих заданий развертывания, есть ли способ подавить обмен сообщениями в журнале заданий?

1 Ответ

0 голосов
/ 01 февраля 2019

Лучший способ сделать это - использовать этапы и функции Трэвиса.Этапы группы рабочих мест.Рабочие места внутри этапов идут параллельно.Этапы выполняются последовательно, один за другим.Целые этапы могут быть условными, а этапы также могут содержать условные задания.Задания на этапе также могут быть развернутыми заданиями (т. Е. Весь deploy: в вашем travis.yml может быть вложен в условный этап. Что наиболее важно для ваших целей, условные этапы и включенные в них задания пропускаются без уведомления, если условиене выполнено .

Это очень отличается от стандартной матрицы deploy:, которая у вас уже есть, т.е. ваш текущий шаг развертывания содержит 2 развертывания, и вы получаете сообщение, что оно пропускает развертывание.

Вместо этого вы можете изменить это на отдельные этапы развертывания с условными заданиями.

Недостаток использования таких этапов заключается в том, что каждый этап выполняется на своей собственной виртуальной машине, и поэтому вы не можете обмениваться данными.от одного этапа к следующему (т. е. артефакты сборки с предыдущих этапов не распространяются на последующие этапы). Обойти это можно, поделившись, например, результатами построения длительного этапа компиляции через S3.

Подробнееинформацию можно найти здесь: https://docs.travis -ci.com / user / build-stage

У меня есть работаВот пример в моем github: https://github.com/brianonn/travis-test

jobs:
  include:
    - stage: compile
      script: bash scripts/compile.sh

    - stage: test
      script: bash scripts/test.sh

    - stage: deploy-staging
      if: branch = staging
      name: "Deploy to staging S3"
      script: skip
      deploy:
        provider: script
        script: bash scripts/deploy.sh staging
        on:
          branch: staging
          condition: $TRAVIS_BRANCH = staging

    - stage: deploy-prod
      if: branch = production
      name: "Deploy to production S3"
      script: skip
      deploy:
        provider: script
        script: bash scripts/deploy.sh production
        on:
          branch: production
          condition: $TRAVIS_BRANCH = production

Это создает журнал заданий Travis, специфичный для каждого из этапов и производства:

push to staging branch push to production branch

...