Back

Автоматическое создание Pull Request при каждом Push

Автоматическое создание Pull Request при каждом Push

Автоматизация Git может значительно оптимизировать ваш процесс разработки. В этом руководстве рассматривается, как автоматически создавать pull request при каждом push кода в ваш репозиторий, используя различные инструменты и подходы.

Ключевые моменты

  • Изучите три различных метода автоматизации создания PR: GitHub Actions, GitHub CLI и инструменты CI/CD
  • Реализуйте безопасные практики автоматизации с надлежащей аутентификацией и разрешениями
  • Поймите лучшие практики управления автоматизированными pull request
  • Настройте защиту веток и условную логику создания PR

Метод 1: Использование GitHub Actions (Рекомендуется)

GitHub Actions предоставляет нативный, надежный способ автоматизации создания PR. Вот как это настроить:

Шаг 1: Создайте GitHub Actions Workflow

  1. Создайте директорию .github/workflows/ в вашем репозитории, если ее еще нет
  2. Создайте новый файл с именем auto-pr.yml
  3. Добавьте следующую конфигурацию:
name: Auto PR on Push

on:
  push:
    branches:
      - 'feature/**'    # Matches feature/* branches
      - 'bugfix/**'     # Matches bugfix/* branches
      # Add more branch patterns as needed

jobs:
  create-pull-request:
    runs-on: ubuntu-latest
    permissions:
      contents: write
      pull-requests: write
    
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0  # Required for proper branch comparison

      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v6
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          commit-message: ""Auto-created PR from ${{ github.ref_name }}""
          title: ""Auto PR: ${{ github.ref_name }}""
          body: |
            Automated pull request created from push to ${{ github.ref_name }}
            
            Branch: ${{ github.ref_name }}
            Triggered by: ${{ github.actor }}
          branch: ${{ github.ref_name }}
          base: main
          labels: |
            automated-pr
            needs-review

Шаг 2: Настройте параметры репозитория

  1. Перейдите в Settings → Actions → General вашего репозитория
  2. В разделе ""Workflow permissions"" выберите ""Read and write permissions""
  3. Сохраните изменения

Метод 2: Использование GitHub CLI

Для разработчиков, предпочитающих локальную автоматизацию, GitHub CLI предлагает простое решение.

Шаг 1: Установите GitHub CLI

Выберите вашу платформу:

  • macOS: brew install gh
  • Ubuntu/Debian: sudo apt install gh
  • Windows: winget install GitHub.cli или скачайте с <https://cli.github.com>
  • Другой Linux: Следуйте инструкциям на <https://github.com/cli/cli#installation>

Шаг 2: Аутентифицируйте GitHub CLI

gh auth login

Шаг 3: Настройте Post-Push Hook

Создайте и настройте post-push hook:

#!/bin/bash

# Get current branch name
BRANCH=$(git rev-parse --abbrev-ref HEAD)

# Don't create PR for main/master branches
if [[ ""$BRANCH"" == ""main"" ]] || [[ ""$BRANCH"" == ""master"" ]]; then
    exit 0
fi

# Check if PR already exists
PR_EXISTS=$(gh pr list --head ""$BRANCH"" --json number --jq length)

if [ ""$PR_EXISTS"" -eq 0 ]; then
    # Create PR if it doesn't exist
    gh pr create 
        --base main 
        --head ""$BRANCH"" 
        --title ""Auto PR: $BRANCH"" 
        --body ""Automated pull request created from $BRANCH"" 
        --label ""automated-pr""
fi

Метод 3: Использование инструментов CI/CD

Для команд, использующих другие платформы CI/CD, вот как реализовать автоматизацию PR с помощью REST API GitHub.

Пример Jenkins Pipeline

pipeline {
    agent any
    
    environment {
        GITHUB_TOKEN = credentials('github-token')
    }
    
    stages {
        stage('Create PR') {
            steps {
                script {
                    def branchName = sh(
                        returnStdout: true, 
                        script: 'git rev-parse --abbrev-ref HEAD'
                    ).trim()
                    
                    // Don't create PR for main/master
                    if (branchName != 'main' && branchName != 'master') {
                        def response = sh(
                            returnStdout: true,
                            script: """"""
                                curl -X POST 
                                    -H 'Authorization: token ${GITHUB_TOKEN}' 
                                    -H 'Accept: application/vnd.github.v3+json' 
                                    https://api.github.com/repos/${GITHUB_OWNER}/${GITHUB_REPO}/pulls 
                                    -d '{
                                        ""title"": ""Auto PR: ${branchName}"",
                                        ""head"": ""${branchName}"",
                                        ""base"": ""main"",
                                        ""body"": ""Automated pull request created from Jenkins pipeline""
                                    }'
                            """"""
                        )
                    }
                }
            }
        }
    }
}

Лучшие практики и соображения безопасности

  • Включите правила защиты веток для вашей основной ветки
  • Создайте стандартизированные шаблоны PR
  • Используйте метки для различения автоматизированных PR
  • Настройте автоматическое назначение рецензентов
  • Безопасно храните токены, используя секреты репозитория
  • Ограничьте разрешения токенов необходимыми областями
  • Регулярно ротируйте токены аутентификации
  • Просматривайте настройки автоматизированных PR, чтобы предотвратить раскрытие конфиденциальных данных

Заключение

Автоматизация создания pull request может значительно улучшить ваш процесс разработки, обеспечивая согласованность процессов проверки кода и сокращая ручные усилия. Независимо от того, выберете ли вы GitHub Actions, GitHub CLI или инструменты CI/CD, реализация этих методов автоматизации поможет оптимизировать ваш процесс разработки и поддерживать лучший контроль качества кода.

Часто задаваемые вопросы

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

GitHub Actions рекомендуется для большинства пользователей, так как он обеспечивает нативную интеграцию с GitHub, требует минимальной настройки и предлагает надежные функции. Однако, если вы предпочитаете локальную автоматизацию, GitHub CLI является хорошей альтернативой, в то время как инструменты CI/CD лучше подходят для сложных корпоративных сред.

Предоставленные скрипты включают проверки для предотвращения создания дубликатов PR. Для GitHub CLI мы проверяем существующие PR перед созданием новых. С GitHub Actions вы можете использовать действие `peter-evans/create-pull-request`, которое автоматически обрабатывает это.

Да, вы можете настроить шаблон PR, изменив параметр body в любом из методов. Для меток вы можете добавить их в рабочий процесс GitHub Actions или команду CLI. Вы также можете настроить шаблоны PR для всего репозитория.

Используйте секреты репозитория для хранения токенов, реализуйте надлежащее ограничение разрешений и регулярно ротируйте учетные данные. Для GitHub Actions используйте встроенный GITHUB_TOKEN, когда это возможно. Для инструментов CLI и CI/CD создавайте выделенные токены доступа с минимально необходимыми разрешениями.

Listen to your bugs 🧘, with OpenReplay

See how users use your app and resolve issues fast.
Loved by thousands of developers