Как я могу вызвать один хук развертывания из матрицы в github? - PullRequest
2 голосов
/ 22 января 2020

Итак, у меня есть эта матрица

name: test

on: [create, push]

jobs:
  build:
    strategy:
      matrix:
        context: [test, pgtest]
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: docker compose
        run: |
          docker-compose -f docker-compose.${{ matrix.context }}.yml up -d
          docker ps
      - name: install liquibase
        run: |
          wget --quiet https://github.com/liquibase/liquibase/releases/download/v3.8.4/liquibase-3.8.4.tar.gz
          wget --quiet https://jdbc.postgresql.org/download/postgresql-42.2.9.jar
          mkdir -p liquibase
          tar --extract --file liquibase-*.tar.gz --directory liquibase
      - name: wait for dbs
        run: |
          set -x
          wget --quiet https://raw.githubusercontent.com/vishnubob/wait-for-it/master/wait-for-it.sh
          chmod +x wait-for-it.sh
          ./wait-for-it.sh localhost:5432
          docker pull postgres:alpine
          isReady() {
            docker run --network host --rm postgres:alpine pg_isready \
              --host localhost --dbname test --username postgres --timeout 30
          }
          until isReady
          do
            sleep 1
          done
      - name: db migration
        run: |
          ./liquibase/liquibase --defaultsFile=liquibase-${{ matrix.context }}.properties update \
          || ( docker-compose logs && exit 1)

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

Я думаю, что работает на check_run.completed должен позволить мне сделать это, но ... это событие , похоже, тоже не срабатывает.

как я могу запустить одно событие развертывания после запуска всей матрицы

Ответы [ 2 ]

2 голосов
/ 29 января 2020

Если я правильно понимаю ваше требование, вы можете просто добавить другую работу, которая зависит от работы build, содержащей матрицу, с использованием needs. Перед выполнением deploy.

on: push
jobs:
  build:
    strategy:
      matrix:
        context: [test, pgtest]
    runs-on: ubuntu-latest
    steps:
      - name: Tests
        run: echo "Testing ${{ matrix.context }}"

  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Deploy
        run: echo "Deploying"

Возможно, этот ответ завершит решение для вас?

.
1 голос
/ 25 января 2020

Я вижу два способа сделать это:

  1. Разделить текущую матрицу на два задания и привязать развертывание к зависимости от задания test. Таким образом, test и pgtest будут работать параллельно, а когда test завершится, начнется развертывание. Проблема этого подхода заключается в читаемости и обслуживании кода, поскольку код будет полностью дублирован, если вы фактически не инкапсулируете его в само действие, что является чрезмерным перебором. *. Это кажется лучшим вариантом, учитывая вопрос, который вы задали, но могут быть ситуации, когда это само по себе не оптимально.

Последний шаг для решения (2) будет выглядеть примерно так

- name: Deployment
  if: matrix.context == 'test'
  run: echo "Do something"

Надеюсь, это поможет.

...