개인 프로젝트를 혼자 진행할 때가 있다.
혼자 하더라도 체계는 갖추고 싶어 적어도 Jira와 PR은 사용하고 있다.
PR을 생성하기 위해, GitHub에 접속하고 Jira 번호를 설명란에 작성하는 과정이 번거로웠다.(귀찮았달까?ㅎ)
그래서 PR을 자동으로 생성하는 CI를 만들어보고자 했다.
GitHub Actions
추가적인 설치없이 CI를 추가하기 위해 GitHub Actions를 사용한다.
Workflow
하나의 자동화된 전체 프로세스를 workflow라고 부른다.
예를들어 어떠한 이벤트(git push, pr 생성 등)가 발생하면, 이벤트를 감지해 설정해놓은 일을 실행하는 일련의 프로세스를 뜻한다.
크게 `job` 단위로 작업을 구분하고, 각 job은 `step` 단위를 통해 단계별로 실행한다.
job은 복수 개가 있을 수 있으며, 여러 job이 독립적으로 실행될 수도 있고, 다른 job끼리 의존되게 실행될 수도 있다.
Github Action의 코어 개념에서 좀 더 자세한 설명을 볼 수 있다.ㅎㅎ
Github Action에 대한 소개와 사용법
Github Action은 github에서 공식적으로 제공하는 CI/CD 툴, 다시 말해 개발의 work flow를 자동화할 수 있게 도와주는 툴이다. CI는 Continuous Integration(지속적 통합), CD는 Continuous Delivery(지속적 전
velog.io
자동으로 PR 생성하기
push가 되면 자동으로 PR을 생성하는 workflow를 공유한다.
흐름은 다음과 같다.
1. `feature/[이슈키]` 브랜치에서 push 이벤트 발생
2. 브랜치명에서 이슈키 추출
3. 지라 이슈 제목 가져오기 (PR의 제목으로 설정할 예정)
4. PR 생성
5. 생성된 PR에 `assignee` 추가
- 혹시 지라를 사용하지 않는다면, 해당 step에서 Jira 관련 부분을 제거하세요 :)
- `https://[USER_NAME].atlassian.net`에서 [USER_NAME]은 당신의 Jira 주소를 넣어주세요 :)
name: Auto PR
permissions:
contents: read
pull-requests: write
issues: write
on:
push:
branches:
- "feature/TEST-*"
jobs:
auto-pr:
runs-on: ubuntu-latest
steps:
- name: 체크아웃
uses: actions/checkout@v4
with:
fetch-depth: 0
- name: 브랜치명에서 지라 이슈키 추출
run: |
branch="${GITHUB_REF#refs/heads/}"
echo "branch=$branch" >> $GITHUB_ENV
if [[ "$branch" =~ ([A-Z]+-[0-9]+) ]]; then
echo "issue_key=${BASH_REMATCH[1]}" >> $GITHUB_ENV
else
echo "issue_key=" >> $GITHUB_ENV
fi
- name: 지라 이슈 제목 가져오기
if: env.issue_key != ''
run: |
jira_response=$(curl -s -u "${{ secrets.JIRA_EMAIL }}:${{ secrets.JIRA_TOKEN }}" \
-H "Accept: application/json" \
"https://[USER_NAME].atlassian.net/rest/api/3/issue/${{ env.issue_key }}")
title=$(echo "$jira_response" | jq -r '.fields.summary')
echo "jira_title=$title" >> $GITHUB_ENV
- name: PR 생성하기
uses: thomaseizinger/create-pull-request@master
with:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
head: ${{ github.ref_name }}
base: develop
title: "[${{ env.issue_key }}] ${{ env.jira_title }}"
body: |
자동 생성된 PR입니다.
- 지라이슈: [${{ env.issue_key }}](https://[USER_NAME].atlassian.net/browse/${{ env.issue_key }})
- name: PR에 Assignee 추가하기
uses: actions/github-script@v7
with:
script: |
const { repo, owner } = context.repo;
const prList = await github.rest.pulls.list({
owner,
repo,
head: `${owner}:${process.env.branch}`,
state: 'open'
});
if (prList.data.length > 0) {
const prNumber = prList.data[0].number;
// Assignee 추가
await github.rest.issues.addAssignees({
owner,
repo,
issue_number: prNumber,
assignees: [owner]
});
console.log(`Assignee를 ${owner}로 추가 완료 :)`);
} else {
console.log("PR을 찾지 못했습니다. :(");
}
env:
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
branch: ${{ github.ref_name }}
GH_TOKEN
PR을 생성하고 수정하는 작업에는 토큰이 필요하다.
GitHub 개인 토큰 만들기에서 쉽게 만들 수 있다.
만들 때 하단에 `Permissions`가 있는데, 그 중 Repository Permissions에서 몇 가지 선택을 해야한다.


이제 생성을 하면 토큰이 만들어진다.
만들어진 토큰은 최초 1회 이후에는 확인이 안 되니, 다른 곳에서도 쓸거라면 꼭 저장을 해둔다!
GITHUB_TOKEN 네이밍은 되지 않으니 참고해주세요 :)
이제 GitHub Repository로 이동 후, `Settings > Secret and variables > Actions`에서 Repository secret에 토큰을 등록한다.

이름이 꼭 `GITHUB_TOKEN`일 필요는 없어요..!
하지만 이름을 바꾸면 workflow의 `secret.GITHUB_TOKEN`명도 바꿔줘야 해요 :)
JIRA_EMAIL & JIRA_API_TOKEN
workflow에 `JIRA_EMAIL`과 `JIRA_API_TOKEN`가 있다.
Jira의 제목명을 가져오기 위해 사용한다.
Jira 토큰은 Jira토큰 발급하기에서 쉽게 만들 수 있고, 이메일은 현재 Jira에 등록해둔 이메일을 사용하면 된다.
이 두 개 또한 Repository secret에 등록하면 끝이다.
PR 생성
이제 이 워크플로우를 commit & push 하면 자동으로 PR이 생성된다.

이제 push 한 다음에 생성해야하는 귀찮음이 사라졌다!!
이제 누가 리뷰도 해주면 좋겠다..
'GITHUB' 카테고리의 다른 글
| [GitHub] AI가 해주는 PR 리뷰 (0) | 2025.12.21 |
|---|