Запускать задание только в определенной ветке с GitHub Actions - PullRequest
1 голос
/ 27 сентября 2019

Я относительно новичок в GitHub Actions, и у меня есть 2 задания - одно, которое выполняет мои тесты, и одно, которое развертывает мой проект на сервере.

Очевидно, что я хочу, чтобы тесты выполнялись в каждой ветви,но развертывание должно происходить только тогда, когда что-то подталкивается к мастеру.

Я изо всех сил пытаюсь найти способ запустить задание в определенной ветви.Я знаю, что возможно запустить только целых рабочих процессов в определенной ветви, однако это означало бы, что у меня будет рабочий процесс "тестирования" и рабочий процесс "развертывания".

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

Как мне этого добиться?Можно ли запустить заданий в определенной ветке?

Ответы [ 2 ]

0 голосов
/ 28 сентября 2019

Хотя в данный момент у вас не может быть условий на уровне job , у вас могут быть условия на уровне step - см. Контексты и синтаксис выражений для действий GitHub .

Для получения имени ветви текущим решением является проверка GITHUB_REF переменной среды - см. Переменные среды по умолчанию и этот вопрос для получения подробной информации.

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

jobs:

 test:
  runs-on: ubuntu-latest
  steps:
  - name: Run tests
    run: ./my-tests.sh

 deploy:
  runs-on: ubuntu-latest
  needs: test
  steps:
  - name: Extract branch name
    shell: bash
    run: echo "##[set-output name=branch;]$(echo ${GITHUB_REF##*/})"
    id: extract_branch
  - name: Deploy
    run: ./deploy.sh
    if: steps.extract_branch.outputs.branch == 'master'

Если вы предпочитаете хранить все в файле рабочего процесса вместо отдельного сценария, вы всегда можете добавить if к каждому шагу в задании.


Я надеюсь, что это всего лишь временное решение / обходной путь, и условия работы будут добавлены до окончания бета-тестирования.

0 голосов
/ 28 сентября 2019

Я не думаю, что фильтрация ветвей для заданий возможна.Это относится ко всему рабочему процессу.Поэтому я думаю, что вы правы, решение состоит в том, чтобы иметь два рабочих процесса.

Первый рабочий процесс запускается для каждой ветви, кроме master.В этом рабочем процессе вы запускаете только тесты.

on:
  push:
    branches:
      - '*'
      - '!master'

Второй рабочий процесс запускается всего за master, запускает как ваши тесты, так и развертывается, если тесты были успешно пройдены.

on:
  push:
    branches:
      - master

К сожалению,это означает, что ваши шаги тестирования будут дублироваться в обоих рабочих процессах.Насколько мне известно, в GitHub Actions нет способа делиться общими заданиями и шагами между рабочими процессами, такими как, например, сферы CircleCI.Скорее всего, это будет функция, которую они добавят в будущем, когда она станет более зрелой.

...