복합 액션(Composite Action) 만들기
복합 액션(Composite Action) 만들기
이 튜토리얼에서는 복합 액션을 직접 만들어 보는 방법을 알려드릴게요. 워크플로우 job 단계들을 하나의 액션으로 묶는 복합 액션의 기본 구성 요소를 배울 수 있어요.
출처: 문서
본문
Introduction
이 가이드에서는 패키징된 복합 액션을 만들고 사용하는 데 필요한 기본 구성 요소를 배우게 돼요. 이 가이드는 액션을 패키징하는 데 필요한 구성 요소에 초점을 맞추기 때문에 액션 코드의 기능은 최소한으로 유지해요. 이 액션은 "Hello World"를 출력한 다음 "Goodbye"를 출력하고, 사용자 지정 이름을 제공하면 "Hello [who-to-greet]"를 출력한 다음 "Goodbye"를 출력해요. 또한 액션은 무작위 숫자를 random-number 출력 변수에 매핑하고, goodbye.sh라는 스크립트를 실행해요.
이 프로젝트를 완료하면 복합 액션을 직접 만들고 워크플로우에서 테스트하는 방법을 이해할 수 있게 돼요.
[!WARNING] 워크플로우와 액션을 만들 때는 항상 코드가 잠재적인 공격자의 신뢰할 수 없는 입력을 실행할 수 있는지 고려해야 해요. 특정 컨텍스트는 신뢰할 수 없는 입력으로 취급해야 해요. 공격자가 자신의 악성 콘텐츠를 삽입할 수 있기 때문이에요. 자세한 내용은 Secure use reference 문서를 참고하세요.
Composite actions and reusable workflows
복합 액션을 사용하면 일련의 워크플로우 job 단계를 하나의 액션으로 모아서 여러 워크플로우에서 단일 job 단계로 실행할 수 있어요. 재사용 가능한 워크플로우는 다른 워크플로우 내에서 전체 워크플로우를 실행할 수 있게 해 주어 중복을 피하는 또 다른 방법을 제공해요. 자세한 내용은 Reusing workflow configurations 문서를 참고하세요.
Prerequisites
[!NOTE] 이 예시는 별도의 저장소에서 복합 액션을 만드는 방법을 설명해요. 하지만 같은 저장소 내에서도 복합 액션을 만들 수 있어요. 자세한 내용은 Creating a composite action 문서를 참고하세요.
시작하기 전에 GitHub에 저장소를 만들 거예요.
-
GitHub에서 새 공개 저장소를 만드세요. 원하는 저장소 이름을 선택하거나 다음
hello-world-composite-action예시를 사용할 수 있어요. 프로젝트를 GitHub에 푸시한 후에 이 파일들을 추가할 수 있어요. 자세한 내용은 Creating a new repository 문서를 참고하세요. -
저장소를 컴퓨터에 복제하세요. 자세한 내용은 Cloning a repository 문서를 참고하세요.
-
터미널에서 새 저장소로 디렉터리를 변경하세요.
cd hello-world-composite-action -
hello-world-composite-action저장소에 예시 코드로goodbye.sh라는 새 파일을 만드세요.echo "echo Goodbye" > goodbye.sh -
터미널에서
goodbye.sh를 실행 가능하게 만드세요.chmod +x goodbye.shchmod +x goodbye.shgit add --chmod=+x -- goodbye.sh -
터미널에서
goodbye.sh파일을 커밋하세요.git add goodbye.sh git commit -m "Add goodbye script" git pushgit add goodbye.sh git commit -m "Add goodbye script" git pushgit commit -m "Add goodbye script" git push
Creating an action metadata file
-
hello-world-composite-action저장소에action.yml이라는 새 파일을 만들고 다음 예시 코드를 추가하세요. 이 문법에 대한 자세한 내용은 Metadata syntax reference 문서를 참고하세요.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스크립트를 실행해요.출력 관리에 대한 자세한 내용은 Metadata syntax reference 문서를 참고하세요.
github.action_path사용 방법에 대한 자세한 내용은 Contexts reference 문서를 참고하세요. -
터미널에서
action.yml파일을 커밋하세요.git add action.yml git commit -m "Add action" git push -
터미널에서 태그를 추가하세요. 이 예시에서는
v1이라는 태그를 사용해요. 자세한 내용은 Managing custom actions 문서를 참고하세요.git tag -a -m "Description of this release" v1 git push --follow-tags
Testing out your action in a workflow
다음 워크플로우 코드는 Creating a composite action에서 만든 완성된 hello world 액션을 사용해요.
워크플로우 코드를 다른 저장소의 .github/workflows/main.yml 파일에 복사하고, OWNER와 SHA를 각각 저장소 소유자와 사용하려는 커밋의 SHA로 바꾸세요. who-to-greet 입력도 자신의 이름으로 바꿀 수 있어요.
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v6
- 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 }}
저장소에서 Actions 탭을 클릭하고 가장 최근 워크플로우 실행을 선택하세요. 출력에는 "Hello Mona the Octocat", "Goodbye" 스크립트의 결과, 그리고 무작위 숫자가 포함되어야 해요.
Creating a composite action within the same repository
-
hello-world-composite-action이라는 새 하위 폴더를 만드세요. 저장소 내 어떤 하위 폴더에든 배치할 수 있어요. 하지만 구성을 더 쉽게 하기 위해.github/actions하위 폴더에 배치하는 것이 좋아요. -
hello-world-composite-action폴더에서goodbye.sh스크립트를 만들기 위해 동일한 단계를 수행하세요.echo "echo Goodbye" > goodbye.shchmod +x goodbye.shchmod +x goodbye.shgit add --chmod=+x -- goodbye.shgit add goodbye.sh git commit -m "Add goodbye script" git pushgit add goodbye.sh git commit -m "Add goodbye script" git pushgit commit -m "Add goodbye script" git push -
hello-world-composite-action폴더에서 Creating a composite action의 단계를 기반으로action.yml파일을 만드세요. -
액션을 사용할 때
uses키에 복합 액션의action.yml파일이 있는 폴더의 상대 경로를 사용하세요. 아래 예시는.github/actions/hello-world-composite-action폴더에 있다고 가정해요.
on: [push]
jobs:
hello_world_job:
runs-on: ubuntu-latest
name: A job to say hello
steps:
- uses: actions/checkout@v6
- 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 }}