12k
All articles

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

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

OpenReplay Team
OpenReplay Team
Автоматическое создание 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, реализация этих методов автоматизации поможет оптимизировать ваш процесс разработки и поддерживать лучший контроль качества кода.

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

Почему я должен автоматизировать создание pull request?

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

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

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

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

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

Могу ли я настроить шаблон PR и метки?

Да, вы можете настроить шаблон 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

We use cookies to improve your experience. By using our site, you accept cookies.