Github actions

Github actions

์žฅ์ : Github repository ์“ฐ๋ฉฐ ๋ฐ”๋กœ ๋ฐฐํฌ๊นŒ์ง€ ์ด์–ด์„œ ํ•  ์ˆ˜ ์žˆ๋‹ค.
๋‹จ์ : ์—ฌ๋Ÿฌ ๋ธŒ๋žœ์น˜์— workflow ํŒŒ์ผ์ด ์žˆ์„ ๋•Œ ์–ด๋–ค๊ฒƒ์ด ์‹คํ–‰๋˜๋Š”๊ฑด์ง€ ์•Œ๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค?
ย 

Name

Action์˜ ์ด๋ฆ„. ์ด ์ด๋ฆ„์„ ์ž˜ ์ •ํ•ด์•ผ Action์—์„œ ์—ฌ๋Ÿฌ job์ด ์‹คํ–‰๋  ๋•Œ ๊ตฌ๋ถ„ํ•˜๊ธฐ๊ฐ€ ์‰ฝ๋‹ค.
name: Jira Transition to InProgress
์•„๋ž˜์ฒ˜๋Ÿผ Actionํƒญ์—์„œ ๋ถ„๋ฅ˜๋œ ์ƒํƒœ๋กœ๋„ ๋ณผ ์ˆ˜ ์žˆ์œผ๋‹ˆ ์ด๋ฆ„ ๋˜ํ•œ ์ž˜ ์ง€์–ด์•ผํ•œ๋‹ค.
notion image
ย 

On: Trigger

on์œผ๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ถ€๋ถ„
create์— branches๋ฉด ๊ทธ ์•„๋ž˜ ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ์„ฑ๋  ๋•Œ
โ†’ ์•„๋ž˜ ์ฝ”๋“œ๊ฐ€ ํ•˜๋Š”๊ฒƒ์€ feature, feat, fix, hotfix๋กœ ์‹œ์ž‘ํ•˜๋Š” ๋ธŒ๋žœ์น˜๊ฐ€ ์ƒ๊ฒผ์„ ๋•Œ ์•„๋ž˜ job์„ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
on: create: branches: - 'feature/**' - 'feat/**' - 'fix/**' - 'hotfix/**'

Env

action YAML ๋‚ด์—์„œ ์‚ฌ์šฉํ•  ํ™˜๊ฒฝ๋ณ€์ˆ˜๋ฅผ ์ •์˜ํ•˜๊ณ  ๊ทธ ์ดํ›„ Jobs์—์„œ ์ด๊ฑธ ๋ณ€์ˆ˜์ฒ˜๋Ÿผ ์‚ฌ์šฉ ํ•  ์ˆ˜ ์žˆ์Œ.
env: AWS_ACCOUNT_ID: ${{ secrets.AWS_ACCOUNT_ID }} AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} AWS_DEFAULT_REGION: ap-northeast-2 AWS_DEFAULT_OUTPUT: json IMAGE: datepop-micro
์‚ฌ์šฉํ• ๋•Œ๋Š” ์•„๋ž˜์ฒ˜๋Ÿผ $๋ณ€์ˆ˜๋ช…์œผ๋กœ ์‚ฌ์šฉํ•จ.
echo ::set-output name=URL::$AWS_ACCOUNT_ID.dkr.ecr.$AWS_DEFAULT_REGION.amazonaws.com/$IMAGE
ย 

Jobs

์‹ค์ œ๋กœ Action์ด ํ•  ์ผ์„ ์ •๋ฆฌํ•˜๋Š” ๊ฒƒ.
ํ•˜๋‚˜์˜ Action์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ job์„ ์„ค์ • ํ•  ์ˆ˜ ์žˆ์Œ. ์—ฌ๊ธฐ์„œ๋Š” ํ•˜๋‚˜์˜ โ€˜jiraTicketToInProgressโ€™ Job๋งŒ ์กด์žฌํ•จ.
ํ•˜๋‚˜์˜ Job๋‚ด์—์„œ๋„ ์—ฌ๋Ÿฌ step์„ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๋™์ž‘๋“ค์„ ํฌํ•จ ์‹œํ‚ฌ์ˆ˜๊ฐ€ ์žˆ์Œ.
์—ฌ๊ธฐ์„œ๋Š” Login โ†’ Find in Jira ticket โ†’ Transition issue to Done์œผ๋กœ step ์„ค์ •์„ ํ•จ.
ย 
์•„๋ž˜ ๋‚ด์šฉ ์ค‘ ${{ secrets.JIRA_BASE_URL }} ์ด๋ ‡๊ฒŒ ๋˜์–ด์žˆ๋Š”๊ฒŒ ์žˆ๋Š”๋ฐ ์ด๊ฑด ๋‹ค Github repository์—์„œ secret key๋กœ ์„ค์ •์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ๊ทธ๋ž˜์„œ ๋ฏผ๊ฐํ•œ ์ •๋ณด๋“ค์€ secret์ฒ˜๋ฆฌํ•ด์„œ ํŒŒ์ผ๋กœ ์ €์žฅํ•˜๊ณ  ์ด ํŒŒ์ผ์€ ๊ณต๊ฐœ์ ์œผ๋กœ ๊ณต๊ฐœ๋ฅผ ํ•ด๋„ ์ƒ๊ด€์—†๋‹ค.
Secret ์„ค์ •์€ Github โ†’ Settings โ†’ Secrets โ†’ Actions์— ๋“ค์–ด๊ฐ„ ๋‹ค์Œ New repository secret ๋ฒ„ํŠผ์„ ๋ˆŒ๋Ÿฌ์„œ ์„ค์ •ํ•˜๋ฉด ๋œ๋‹ค.
ย 
notion image
ย 
์™„์„ฑ๋œ jobs YAML ํŒŒ์ผ โ–ผ
jobs: jiraTicketToInProgress: name: Transition Issue to In Progress runs-on: ubuntu-latest steps: - name: Login uses: atlassian/gajira-login@master env: JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} - name: Find in Jira ticket uses: atlassian/gajira-find-issue-key@master id: jira-ticket with: string: ${{ github.event.ref }} - name: Transition issue to Done if: steps.jira-ticket.outputs.issue != '' uses: atlassian/gajira-transition@master with: issue: ${{ steps.jira-ticket.outputs.issue }} transition: "In Progress"
ย 
์œ„์˜ ๋‚ด์šฉ์„ ๋‹ค ํ•˜๋‚˜์˜ ํŒŒ์ผ๋กœ ํ•ฉ์น˜๋ฉด
name: Jira Transition to InProgress on: create: branches: - 'feature/**' - 'feat/**' - 'fix/**' - 'hotfix/**' jobs: jiraTicketToInProgress: name: Transition Issue to In Progress runs-on: ubuntu-latest steps: - name: Login uses: atlassian/gajira-login@master env: JIRA_BASE_URL: ${{ secrets.JIRA_BASE_URL }} JIRA_USER_EMAIL: ${{ secrets.JIRA_USER_EMAIL }} JIRA_API_TOKEN: ${{ secrets.JIRA_API_TOKEN }} - name: Find in Jira ticket uses: atlassian/gajira-find-issue-key@master id: jira-ticket with: string: ${{ github.event.ref }} - name: Transition issue to Done if: steps.jira-ticket.outputs.issue != '' uses: atlassian/gajira-transition@master with: issue: ${{ steps.jira-ticket.outputs.issue }} transition: "In Progress"
ย 

step ์ฑ„์›Œ ๋„ฃ๋Š” ๋ฐฉ๋ฒ•

Github marketplace์— ๋“ค์–ด๊ฐ€์„œ ์›ํ•˜๋Š” action ์ฐพ๊ธฐ
ย 
aws๋งŒ ๊ฒ€์ƒ‰ํ•ด๋ด๋„ ๊ฒฐ๊ณผ๊ฐ€ ๋งŽ์ด ๋‚˜์˜ด.
notion image
ย 
์˜ˆ๋ฅผ๋“ค์–ด lambda ํ•จ์ˆ˜ ๋ฐฐํฌํ•˜๋Š”๊ฑธ ๋งŒ๋“ ๋‹ค๋ฉด ์œ„์˜ ๋ชฉ๋ก ์ค‘ ์•„๋ž˜ action์„ ์ฐธ๊ณ .
๋ณดํ†ต ๋ชจ๋“  action marketplace์— ๋“ค์–ด๊ฐ€๋ฉด ์œ„์™€ ๊ฐ™์ด ์˜ˆ์ œ๋“ค์ด ์ž˜ ๋‚˜์˜ค๊ธฐ ๋•Œ๋ฌธ์— ๋ณด๊ณ  ๊ทธ๋Œ€๋กœ ๋”ฐ๋ผํ•˜๋ฉด ๋œ๋‹ค.
ย 
ย 
ย 
ย