github action & jira 이슈 연동하기

prana·2024년 8월 28일
0

오류-문제해결

목록 보기
8/15

설정 순서

1. 파일 생성

  1. 프로젝트에 .github 폴더 생성 후
  2. 하위에 폴더 workflows, ISSUE_TEMPLATE 생성
  3. ISSUE_TEMPLATE에는 issue_form.yml 파일을,
    workflows에는 create-jira-issue.yml 파일을 생성하고 각각 알맞게 설정을 작업해준다.

  • issue_form.yml
name: 'All-clear 이슈 생성'
description: 'TastyTrack Repo에 이슈를 생성하며, 생성된 이슈는 Jira와 연동됩니다.'
labels: [ order ]
title: '이슈 이름을 작성해주세요.'
body:
  - type: input
    id: parentKey
    attributes:
      label: '상위 작업 Ticket Number'
      description: '상위 작업의 Ticket Number를 기입해주세요.'
      placeholder: 'TT-00'
    validations:
      required: true

  - type: input
    id: branchName
    attributes:
      label: '브랜치 이름 (이슈 요약)'
      description: '영문 소문자로 브랜치 이름을 지어주세요. (ex: [스토리번호]-[도메인명]-[기능])'
    validations:
      required: true

  - type: input
    id: branchPrefix
    attributes:
      label: '브랜치 전략(GitFlow)'
      description: 'feat/fix/docs/style/refactor/test/chore 중 해당 이슈와 걸맞게 작성해주세요.'
    validations:
      required: true

  - type: textarea
    id: details
    attributes:
      label: '상세 내용(Details)'
      description: '이슈 내용을 자세히 설명해주세요.'
      value: |
        - 상세 내용에 대해 작성해주세요.
    validations:
      required: true

  - type: textarea
    id: tasks
    attributes:
      label: '체크리스트(Tasks)'
      description: '해당 이슈에 대해 필요한 작업 목록을 작성해주세요.'
      value: |
        - [ ] Task1
        - [ ] Task2
    validations:
      required: true
  • create-jira-issue.yml
name: Create Jira issue
on:
  issues:
    types:
      - opened
jobs:
  create-issue:
    name: Create Jira issue
    runs-on: ubuntu-latest
    steps:
      - name: Login
        uses: atlassian/gajira-login@v3
        env:
          JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}👈
          JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}👈
          JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}👈

      - name: Checkout main code
        uses: actions/checkout@v4
        with:
          ref: dev

      - name: Issue Parser
        uses: stefanbuck/github-issue-praser@v3
        id: issue-parser
        with:
          template-path: .github/ISSUE_TEMPLATE/issue_form.yml

      - name: Log Issue Parser
        run: |
          echo '${{ steps.issue-parser.outputs.jsonString }}'

      - name: Convert markdown to Jira Syntax
        uses: peter-evans/jira2md@v1
        id: md2jira
        with:
          input-text: |
            ### Github Issue Link
            - ${{ github.event.issue.html_url }}

            ${{ github.event.issue.body }}
          mode: md2jira

      - name: Create Issue
        id: create
        uses: atlassian/gajira-create@v3
        with:
          project: TT
          issuetype: Sub-task
          summary: "${{ github.event.issue.title }}"
          description: "${{ steps.md2jira.outputs.output-text }}"
          fields: |
            {
              "parent": {
                "key": "${{ steps.issue-parser.outputs.issueparser_parentKey }}"
              }
            }

      - name: Log created issue
        run: echo "Jira Issue ${{ steps.issue-parser.outputs.parentKey }}/${{ steps.create.outputs.issue }} was created"

      - name: Checkout develop code
        uses: actions/checkout@v4
        with:
          ref: dev

      - name: Create branch with Ticket number
        run: |
          BRANCH_NAME="${{ steps.issue-parser.outputs.issueparser_branchPrefix }}/#${{ steps.issue-parser.outputs.issueparser_parentKey }}-${{ steps.issue-parser.outputs.issueparser_branchName }}"
          git checkout -b "$BRANCH_NAME"
          git push origin "$BRANCH_NAME"

      - name: Update issue title
        uses: actions-cool/issues-helper@v3
        with:
          actions: "update-issue"
          token: ${{ secrets.GITHUB_TOKEN }}
          title: "${{ steps.create.outputs.issue }} ${{ github.event.issue.title }}"

  • 이부분은 github secrets 에 등록해야 한다.

    JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }}👈
    JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }}👈
    JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }}👈

  • PULL_REQUEST_TEMPLATE.md
## 📌 작업 내용 (필수)
- (기능에서 어떤 부분이 구현되었는지 설명해주세요.)
- ex. `로그인 시, 구글 소셜 로그인 기능을 추가했습니다.`

<br/>

## 🌱 반영 브랜치
- (반영 브랜치를 표시합니다. ex. `feat/login -> dev` ) 
- (이슈를 완료했다면 닫을 이슈의 번호를 표기합니다. ex. `close #1` )
- close #

<br/>

## 🔥 트러블 슈팅 (선택)
- (어려운 점이 있었다면 무엇이고 어떻게 해결했는지 작성해주세요.)

2. github secrets 등록하기


1. settings

  • settings에서 JIRA_BASE_URL, JIRA_API_TOKEN,JIRA_USER_EMAIL을 등록해준다. (Edit 연필아이콘 클릭!)
  • JIRA_BASE_URL: https://{작성한 도메인명}.atlassian.net
  • JIRA_API_TOKEN: 밑에 사이트에서 발급받은 토큰
  • JIRA_USER_EMAIL: (토큰 발급받은 계정) JIRA에 로그인한 이메일주소
  1. 만약의 Organization에서 만든 Repository라면..
  • organizations의 settings에 들어가서,
    Actions/General - Workflow permissions

  • Read and write permissions 로 체크 - Save

3. JIRA 설정해주기

  1. 설정 - 세부사항
  • 조금 전에 create-jira-issue.yml 에서 project 키를 TT라고 해주었으므로, jira에서도 같은 키로 맞춰준다.

    (jira에서 키를 먼저 설정하고, yml에 설정값을 맞춰준다고 생각하면 좋을 것 같다.)
  1. 설정 - 이슈 유형

나는 이슈 단위를 에픽 > 스토리 > Task > Sub-task 순으로 하게 되었다. 그래서 issue type을 Sub-task에서 브랜치들을 자동으로 생성하는 쪽으로 설정했기에 왼쪽처럼 유형을 맞춰준다.

  • 우리가 해야할 일(스토리;초록색 아이콘)에 수동으로 작성하여 추가해준 뒤 github issue 등록을 한다.
    30초 뒤 Sub-task(우측)에 브랜치가 자동으로 생성되는 것을 볼 수 있을 것이다.


화이팅!!~~

0개의 댓글