Как пропустить задания GitHub Actions в определенные дни (например, в пятницу)?

Вопрос или проблема

У меня есть CI/CD конвейер в GitHub Actions, который разворачивает код, когда изменения загружаются в ветку production. Однако я хочу автоматизироватьCertain задачи по обслуживанию (например, очистку Docker, временных файлов и создание резервных копий базы данных) по пятницам, когда развертывания не должны происходить. Поэтому мне нужно пропустить задачу развертывания в конвейере по пятницам.

Вот моя текущая конфигурация рабочего процесса GitHub Actions для шага развертывания:

deploy:
  runs-on: ubuntu-latest
  needs: [pytest] # Разворачивать только если тесты прошли
  if: github.ref_name == 'production' && github.event_name == 'push'
  steps:
    - name: Проверка кода
      uses: actions/checkout@v4

    - name: Добавить SSH ключ
      uses: webfactory/[email protected]
      with:
        ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

    - name: Добавить известные хосты
      run: ssh-keyscan -H ${{ secrets.VM_IP }} >> ~/.ssh/known_hosts

    - name: Развертывание на продакшн сервере
      run: |
        ssh -o StrictHostKeyChecking=no ${{ secrets.VM_USER }}@${{ secrets.VM_IP }} << 'EOF'
          cd /home/${{ secrets.VM_USER }}/client-portal
          git pull origin production
          git checkout production
          docker compose -f docker-compose.production.yml build
          docker compose -f docker-compose.production.yml down --remove-orphans
          docker compose -f docker-compose.production.yml up -d
        EOF

Вопрос:

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

Спасибо заранее!

Ответ или решение

Для того чтобы пропустить выполнение задания развертывания в GitHub Actions по пятницам, вы можете использовать условие if, которое проверяет текущий день недели. GitHub Actions предоставляет переменную среды RUNNER_ENV, которая содержит информацию о текущем контексте выполнения, включая день недели.

Вы можете получить день недели в виде числа (0 для воскресенья, 1 для понедельника и так далее до 6 для субботы) и использовать это значение в условии вашего задания. Вот пример того, как вы можете изменить вашу конфигурацию GitHub Actions для пропуска задания развертывания по пятницам:

name: CI/CD Pipeline

on:
  push:
    branches:
      - production

jobs:
  pytest:
    runs-on: ubuntu-latest
    steps:
      # Шаги для запуска тестов
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Run Tests
        run: |
          # Запуск тестов здесь
          echo "Running tests..."

  deploy:
    runs-on: ubuntu-latest
    needs: pytest
    if: github.ref_name == 'production' && github.event_name == 'push' && format('{0:dddd}', github.event_head_commit.timestamp) != 'Friday'
    steps:
      - name: Checkout Code
        uses: actions/checkout@v4

      - name: Add SSH Key
        uses: webfactory/ssh-agent@v0.5.3
        with:
          ssh-private-key: ${{ secrets.SSH_PRIVATE_KEY }}

      - name: Add known hosts
        run: ssh-keyscan -H ${{ secrets.VM_IP }} >> ~/.ssh/known_hosts

      - name: Deploy to Production Server
        run: |
          ssh -o StrictHostKeyChecking=no ${{ secrets.VM_USER }}@${{ secrets.VM_IP }} << 'EOF'
            cd /home/${{ secrets.VM_USER }}/client-portal
            git pull origin production
            git checkout production
            docker compose -f docker-compose.production.yml build
            docker compose -f docker-compose.production.yml down --remove-orphans
            docker compose -f docker-compose.production.yml up -d
          EOF

Разъяснения по коду:

  1. Условие if: В условии для задания deploy мы добавили проверку на день недели. Функция format('{0:dddd}', github.event_head_commit.timestamp) преобразует дату коммита в день недели. Если день недели равен ‘Friday’, шаги задания развертывания не будут выполнены.

  2. Параметры: github.ref_name проверяет, что ветка — production, а github.event_namepush, что соответствует вашему исходному условию.

  3. Другие части: Остальные шаги остаются без изменений и выполняют свою обычную работу по развертыванию.

С помощью этого подхода, вы сможете эффективно контролировать выполнение вашего задания развертывания в зависимости от дня недели, и исключать его выполнение по пятницам.

Оцените материал
Добавить комментарий

Капча загружается...