Skip to main content

๋ณตํ•ฉ ์ž‘์—… ๋งŒ๋“ค๊ธฐ

์ด ์ž์Šต์„œ์—์„œ๋Š” ๋ณตํ•ฉ ์ž‘์—…์„ ๋นŒ๋“œํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ด…๋‹ˆ๋‹ค.

Platform navigation

์†Œ๊ฐœ

์ด ๊ฐ€์ด๋“œ์—์„œ๋Š” ํŒจํ‚ค์ง€๋œ ๋ณตํ•ฉ ์ž‘์—…์„ ๋งŒ๋“ค๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ธฐ๋ณธ ๊ตฌ์„ฑ ์š”์†Œ์— ๋Œ€ํ•ด ์•Œ์•„๋ด…๋‹ˆ๋‹ค. ์ž‘์—…์„ ํŒจํ‚ค์ง€ํ•˜๋Š” ๋ฐ ํ•„์š”ํ•œ ๊ตฌ์„ฑ ์š”์†Œ์— ๊ฐ€์ด๋“œ์˜ ์ดˆ์ ์„ ๋งž์ถ”๊ธฐ ์œ„ํ•ด ์ž‘์—… ์ฝ”๋“œ์˜ ๊ธฐ๋Šฅ์€ ์ตœ์†Œํ™”๋ฉ๋‹ˆ๋‹ค. ์ž‘์—…์€ โ€œHello Worldโ€๋ฅผ ์ถœ๋ ฅํ•œ ๋‹ค์Œ โ€œGoodbyeโ€๋ฅผ ์ถœ๋ ฅํ•˜๊ฑฐ๋‚˜ ์‚ฌ์šฉ์ž ์ง€์ • ์ด๋ฆ„์„ ์ œ๊ณตํ•˜๋Š” ๊ฒฝ์šฐ โ€œHello [์ธ์‚ฌํ•  ์‚ฌ๋žŒ]โ€์„ ์ถœ๋ ฅํ•œ ๋‹ค์Œ โ€œGoodbyeโ€๋ฅผ ์ถœ๋ ฅํ•ฉ๋‹ˆ๋‹ค. ์ด ์ž‘์—…์€ ๋˜ํ•œ ๋‚œ์ˆ˜๋ฅผ random-number ์ถœ๋ ฅ ๋ณ€์ˆ˜์— ๋งคํ•‘ํ•˜๊ณ  goodbye.sh๋ผ๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

์ด ํ”„๋กœ์ ํŠธ๋ฅผ ์™„๋ฃŒํ•œ ํ›„์—๋Š” ๊ณ ์œ ํ•œ ๋ณตํ•ฉ ์ž‘์—…์„ ๋นŒ๋“œํ•˜๊ณ  ์›Œํฌํ”Œ๋กœ์—์„œ ํ…Œ์ŠคํŠธํ•˜๋Š” ๋ฐฉ๋ฒ•์„ ์ดํ•ดํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๊ฒฝ๊ณ 

์›Œํฌํ”Œ๋กœ์™€ ์ž‘์—…์„ ๋งŒ๋“ค ๋•Œ๋Š” ์ฝ”๋“œ๊ฐ€ ๊ณต๊ฒฉ์ž์˜ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ž…๋ ฅ์„ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š”์ง€ ํ•ญ์ƒ ๊ณ ๋ คํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ํŠน์ • ์ปจํ…์ŠคํŠธ๋Š” ๊ณต๊ฒฉ์ž๊ฐ€ ์ž์‹ ์˜ ์•…์„ฑ ์ฝ˜ํ…์ธ ๋ฅผ ์‚ฝ์ž…ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์‹ ๋ขฐํ•  ์ˆ˜ ์—†๋Š” ์ž…๋ ฅ์œผ๋กœ ์ทจ๊ธ‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณด์•ˆ ์‚ฌ์šฉ ์ฐธ์กฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

๋ณตํ•ฉ ์ž‘์—… ๋ฐ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ

๋ณตํ•ฉ ์ž‘์—…์„ ์‚ฌ์šฉํ•˜๋ฉด ์ผ๋ จ์˜ ์›Œํฌํ”Œ๋กœ ์ž‘์—… ๋‹จ๊ณ„๋ฅผ ๋‹จ์ผ ์ž‘์—…์œผ๋กœ ์ˆ˜์ง‘ํ•œ ๋‹ค์Œ, ์—ฌ๋Ÿฌ ์›Œํฌํ”Œ๋กœ์—์„œ ๋‹จ์ผ ์ž‘์—… ๋‹จ๊ณ„๋กœ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ๋Š” ๋‹ค๋ฅธ ์›Œํฌํ”Œ๋กœ ๋‚ด์—์„œ ์ „์ฒด ์›Œํฌํ”Œ๋กœ๋ฅผ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ํ•˜์—ฌ ์ค‘๋ณต์„ ๋ฐฉ์ง€ํ•˜๋Š” ๋˜ ๋‹ค๋ฅธ ๋ฐฉ๋ฒ•์„ ์ œ๊ณตํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์›Œํฌํ”Œ๋กœ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

ํ•„์ˆ˜ ์กฐ๊ฑด

์ฐธ๊ณ  ํ•ญ๋ชฉ

์ด ์˜ˆ์ œ์—์„œ๋Š” ๋ณ„๋„์˜ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ๋ณตํ•ฉ ์ž‘์—…์„ ๋งŒ๋“œ๋Š” ๋ฐฉ๋ฒ•์„ ์„ค๋ช…ํ•ฉ๋‹ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‚˜ ๋™์ผํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ๋ณตํ•ฉ ์ž‘์—…์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ณตํ•ฉ ์ž‘์—… ๋งŒ๋“ค๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

์‹œ์ž‘ํ•˜๊ธฐ ์ „์— GitHub์—์„œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค.

  1. GitHub์— ์ƒˆ ํผ๋ธ”๋ฆญ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์ด๋ฆ„์„ ์„ ํƒํ•˜๊ฑฐ๋‚˜ ๋‹ค์Œ hello-world-composite-action ์˜ˆ์ œ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ๊ฐ€ GitHub์— ํ‘ธ์‹œ๋œ ํ›„ ํ•ด๋‹น ํŒŒ์ผ์„ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ƒˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋งŒ๋“ค๊ธฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ์ปดํ“จํ„ฐ์— ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋ฅผ ๋ณต์ œํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋ณต์ œ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  3. ํ„ฐ๋ฏธ๋„์—์„œ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ์ƒˆ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ๋กœ ๋ณ€๊ฒฝํ•ฉ๋‹ˆ๋‹ค.

    Shell
    cd hello-world-composite-action
    
  4. hello-world-composite-action ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ ์˜ˆ์ œ ์ฝ”๋“œ๋กœ goodbye.sh๋ผ๋Š” ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“œ์„ธ์š”.

    Shell
    echo "echo Goodbye" > goodbye.sh
    
  5. ํ„ฐ๋ฏธ๋„์—์„œ goodbye.sh ์‹คํ–‰ ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.

    Shell
    chmod +x goodbye.sh
    
Shell
chmod +x goodbye.sh
Shell
git add --chmod=+x -- goodbye.sh
  1. ํ„ฐ๋ฏธ๋„์—์„œ goodbye.sh ํŒŒ์ผ์„ ์ฒดํฌ ์ธํ•ฉ๋‹ˆ๋‹ค.

    Shell
    git add goodbye.sh
    git commit -m "Add goodbye script"
    git push
    
Shell
git add goodbye.sh
git commit -m "Add goodbye script"
git push
Shell
git commit -m "Add goodbye script"
git push

์ž‘์—… ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ

  1. hello-world-composite-action ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ action.yml๋ผ๋Š” ์ƒˆ ํŒŒ์ผ์„ ๋งŒ๋“ค๊ณ  ๋‹ค์Œ ์˜ˆ์ œ ์ฝ”๋“œ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ๊ตฌ๋ฌธ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ตฌ๋ฌธ ์ฐธ์กฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    YAML
    name: 'Hello World'
    description: 'Greet someone'
    inputs:
      who-to-greet:  # id of input
        description: 'Who to greet'
        required: true
        default: 'World'
    outputs:
      random-number:
        description: "Random number"
        value: ${{ steps.random-number-generator.outputs.random-number }}
    runs:
      using: "composite"
      steps:
        - name: Set Greeting
          run: echo "Hello $INPUT_WHO_TO_GREET."
          shell: bash
          env:
            INPUT_WHO_TO_GREET: ${{ inputs.who-to-greet }}
    
        - name: Random Number Generator
          id: random-number-generator
          run: echo "random-number=$(echo $RANDOM)" >> $GITHUB_OUTPUT
          shell: bash
    
        - name: Set GitHub Path
          run: echo "$GITHUB_ACTION_PATH" >> $GITHUB_PATH
          shell: bash
          env:
            GITHUB_ACTION_PATH: ${{ github.action_path }}
    
        - name: Run goodbye.sh
          run: goodbye.sh
          shell: bash
    
    

    ์ด ํŒŒ์ผ์€ who-to-greet ์ž…๋ ฅ์„ ์ •์˜ํ•˜๊ณ , ์ž„์˜ ์ƒ์„ฑ๋œ ์ˆซ์ž๋ฅผ random-number ์ถœ๋ ฅ ๋ณ€์ˆ˜์— ๋งคํ•‘ํ•˜๋ฉฐ, ์‹คํ–‰๊ธฐ ์‹œ์Šคํ…œ ๊ฒฝ๋กœ์— ๋™์ž‘์˜ ๊ฒฝ๋กœ๋ฅผ ์ถ”๊ฐ€(์‹คํ–‰ ์ค‘ goodbye.sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์ฐพ๊ธฐ ์œ„ํ•ด)ํ•˜๊ณ , goodbye.sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    ์ถœ๋ ฅ ๊ด€๋ฆฌ์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์ •๋ณด๋Š” ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ ๊ตฌ๋ฌธ ์ฐธ์กฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    github.action_path ์‚ฌ์šฉ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์ปจํ…์ŠคํŠธ ์ฐธ์กฐ์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

  2. ํ„ฐ๋ฏธ๋„์—์„œ action.yml ํŒŒ์ผ์„ ์ฒดํฌ ์ธํ•ฉ๋‹ˆ๋‹ค.

    Shell
    git add action.yml
    git commit -m "Add action"
    git push
    
  3. ํ„ฐ๋ฏธ๋„์—์„œ ํƒœ๊ทธ๋ฅผ ์ถ”๊ฐ€ํ•ฉ๋‹ˆ๋‹ค. ์ด ์˜ˆ์ œ์—์„œ๋Š” v1์ด๋ผ๋Š” ํƒœ๊ทธ๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ์ž์„ธํ•œ ๋‚ด์šฉ์€ ์‚ฌ์šฉ์ž ์ง€์ • ์ž‘์—… ์ •๋ณด์„(๋ฅผ) ์ฐธ์กฐํ•˜์„ธ์š”.

    Shell
    git tag -a -m "Description of this release" v1
    git push --follow-tags
    

์›Œํฌํ”Œ๋กœ์—์„œ ์ž‘์—… ํ…Œ์ŠคํŠธ

๋‹ค์Œ ์›Œํฌํ”Œ๋กœ ์ฝ”๋“œ๋Š” ๋ณตํ•ฉ ์ž‘์—… ๋งŒ๋“ค๊ธฐ์—์„œ ์ˆ˜ํ–‰ํ•œ ์™„๋ฃŒ๋œ hello world ์ž‘์—…์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

์›Œํฌํ”Œ๋กœ ์ฝ”๋“œ๋ฅผ ๋‹ค๋ฅธ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ์˜ .github/workflows/main.yml ํŒŒ์ผ์— ๋ณต์‚ฌํ•˜์—ฌ OWNER ๋ฐ SHA๋ฅผ ๊ฐ๊ฐ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ์†Œ์œ ์ž์™€ ์‚ฌ์šฉํ•  ์ปค๋ฐ‹์˜ SHA๋กœ ๋ฐ”๊ฟ‰๋‹ˆ๋‹ค. who-to-greet ์ž…๋ ฅ์„ ์ž์‹ ์˜ ์ด๋ฆ„์œผ๋กœ ๋ฐ”๊ฟ€ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v4
      - id: foo
        uses: OWNER/hello-world-composite-action@SHA
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}

๋ฆฌํฌ์ง€ํ† ๋ฆฌ์—์„œ ์ž‘์—… ํƒญ์„ ํด๋ฆญํ•˜๊ณ  ์ตœ์‹  ์›Œํฌํ”Œ๋กœ ์‹คํ–‰์„ ์„ ํƒํ•ฉ๋‹ˆ๋‹ค. ์ถœ๋ ฅ์—๋Š” โ€œHello Mona the Octocatโ€, โ€œGoodbyeโ€ ์Šคํฌ๋ฆฝํŠธ์˜ ๊ฒฐ๊ณผ์™€ ๋‚œ์ˆ˜๊ฐ€ ํฌํ•จ๋˜์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

๋™์ผํ•œ ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์—์„œ ๋ณตํ•ฉ ์ž‘์—… ๋งŒ๋“ค๊ธฐ

  1. hello-world-composite-action๋ผ๋Š” ์ƒˆ ํ•˜์œ„ ํด๋”๋ฅผ ๋งŒ๋“ญ๋‹ˆ๋‹ค. ์ด ํด๋”๋Š” ๋ฆฌํฌ์ง€ํ† ๋ฆฌ ๋‚ด์˜ ๋ชจ๋“  ํ•˜์œ„ ํด๋”์— ๋ฐฐ์น˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ ์กฐ์ง์„ ๋” ์‰ฝ๊ฒŒ ์ •๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” .github/actions ํ•˜์œ„ ํด๋”์— ๋ฐฐ์น˜ํ•˜๋Š” ๊ฒƒ์ด ๋” ์ข‹์Šต๋‹ˆ๋‹ค.

  2. hello-world-composite-action ํด๋”์—์„œ goodbye.sh ์Šคํฌ๋ฆฝํŠธ๋ฅผ ๋งŒ๋“ค๊ธฐ ์œ„ํ•ด ๋™์ผํ•œ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.

    Shell
    echo "echo Goodbye" > goodbye.sh
    
    Shell
    chmod +x goodbye.sh
    
Shell
chmod +x goodbye.sh
Shell
git add --chmod=+x -- goodbye.sh
Shell
git add goodbye.sh
git commit -m "Add goodbye script"
git push
Shell
git add goodbye.sh
git commit -m "Add goodbye script"
git push
Shell
git commit -m "Add goodbye script"
git push
  1. hello-world-composite-action ํด๋”์— ๋ณตํ•ฉ ์ž‘์—… ๋งŒ๋“ค๊ธฐ์˜ ๋‹จ๊ณ„์— ๋”ฐ๋ผ action.yml ํŒŒ์ผ์„ ๋งŒ๋“ญ๋‹ˆ๋‹ค.
  2. ์ด ์ž‘์—…์„ ์ง„ํ–‰ํ•  ๋•Œ๋Š” uses ํ‚ค์— ๋ณตํ•ฉ ์ž‘์—…์˜ action.yml ํŒŒ์ผ์ด ์œ„์น˜ํ•œ ํด๋”์˜ ์ƒ๋Œ€ ๊ฒฝ๋กœ๋ฅผ ์ง€์ •ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ์˜ˆ์ œ์—์„œ๋Š” .github/actions/hello-world-composite-action ํด๋”์— ์ž‘์—…์ด ์žˆ๋‹ค๊ณ  ๊ฐ€์ •ํ•ฉ๋‹ˆ๋‹ค.
YAML
on: [push]

jobs:
  hello_world_job:
    runs-on: ubuntu-latest
    name: A job to say hello
    steps:
      - uses: actions/checkout@v4
      - id: foo
        uses: ./.github/actions/hello-world-composite-action
        with:
          who-to-greet: 'Mona the Octocat'
      - run: echo random-number "$RANDOM_NUMBER"
        shell: bash
        env:
          RANDOM_NUMBER: ${{ steps.foo.outputs.random-number }}

GitHub์— ๋Œ€ํ•œ ๋ณตํ•ฉ ์ž‘์—… ์˜ˆ์‹œ

GitHub์—์„œ ๋ณตํ•ฉ ์ž‘์—…์˜ ๋งŽ์€ ์˜ˆ๋ฅผ ์ฐพ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.