소개
이 가이드에서는 패키지된 복합 작업을 만들고 사용하는 데 필요한 기본 구성 요소에 대해 알아봅니다. 작업을 패키지하는 데 필요한 구성 요소에 가이드의 초점을 맞추기 위해 작업 코드의 기능은 최소화됩니다. 작업은 “Hello World”를 출력한 다음 “Goodbye”를 출력하거나 사용자 지정 이름을 제공하는 경우 “Hello [인사할 사람]”을 출력한 다음 “Goodbye”를 출력합니다. 이 작업은 또한 난수를 random-number
출력 변수에 매핑하고 goodbye.sh
라는 스크립트를 실행합니다.
이 프로젝트를 완료한 후에는 고유한 복합 작업을 빌드하고 워크플로에서 테스트하는 방법을 이해해야 합니다.
Warning
워크플로 및 작업을 만들 때 코드가 가능한 공격자로부터 신뢰할 수 없는 입력을 실행할 수 있는지 항상 고려해야 합니다. 공격자가 자신의 악성 콘텐츠를 삽입할 수 있으므로 특정 컨텍스트는 신뢰할 수 없는 입력으로 처리되어야 합니다. 자세한 내용은 "GitHub Actions에 대한 보안 강화" 항목을 참조하세요.
복합 작업 및 재사용 가능한 워크플로
복합 작업을 사용하면 일련의 워크플로 작업 단계를 단일 작업으로 수집한 다음, 여러 워크플로에서 단일 작업 단계로 실행할 수 있습니다. 재사용 가능한 워크플로는 다른 워크플로 내에서 전체 워크플로를 실행할 수 있도록 하여 중복을 방지하는 또 다른 방법을 제공합니다. 자세한 내용은 "중복 방지"을(를) 참조하세요.
필수 조건
시작하기 전에 GitHub에서 리포지토리를 생성합니다.
-
GitHub에 새 퍼블릭 리포지토리를 만듭니다. 리포지토리 이름을 선택하거나 다음
hello-world-composite-action
예제를 사용할 수 있습니다. 프로젝트가 GitHub에 푸시된 후 이러한 파일을 추가할 수 있습니다. 자세한 내용은 "새 리포지토리 만들기"을(를) 참조하세요. -
컴퓨터에 리포지토리를 복제합니다. 자세한 내용은 "리포지토리 복제"을 참조하세요.
-
터미널에서 디렉터리를 새 리포지토리로 변경합니다.
Shell cd hello-world-composite-action
cd hello-world-composite-action
-
hello-world-composite-action
리포지토리에서 다음 예제 코드로goodbye.sh
라는 새 파일을 만드세요.Shell echo "echo Goodbye" > goodbye.sh
echo "echo Goodbye" > goodbye.sh
-
터미널에서
goodbye.sh
실행 파일을 만듭니다.Shell chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
chmod +x goodbye.sh
git add --chmod=+x -- goodbye.sh
git add --chmod=+x -- goodbye.sh
-
터미널에서
goodbye.sh
파일을 체크 인합니다.Shell git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh git commit -m "Add goodbye script" git push
git add goodbye.sh
git commit -m "Add goodbye script"
git push
git commit -m "Add goodbye script" git push
git commit -m "Add goodbye script"
git push
작업 메타데이터 파일 만들기
-
hello-world-composite-action
리포지토리에서action.yml
라는 새 파일을 만들고 다음 예제 코드를 추가합니다. 이 구문에 대한 자세한 내용은 "GitHub Actions에 대한 메타데이터 구문"를 참조하세요.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
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 Actions에 대한 메타데이터 구문"을(를) 참조하세요.
github.action_path
사용 방법에 대한 자세한 내용은 “워크플로 실행에 대한 컨텍스트 정보에 액세스”를 참조하세요. -
터미널에서
action.yml
파일을 체크 인합니다.Shell git add action.yml git commit -m "Add action" git push
git add action.yml git commit -m "Add action" git push
-
터미널에서 태그를 추가합니다. 이 예제에서는
v1
이라는 태그를 사용합니다. 자세한 내용은 "사용자 지정 작업 정보"을(를) 참조하세요.Shell git tag -a -m "Description of this release" v1 git push --follow-tags
git tag -a -m "Description of this release" v1 git push --follow-tags
워크플로에서 작업 테스트
다음 워크플로 코드는 “복합 작업 만들기”에서 수행한 완료된 hello world 작업을 사용합니다.
워크플로 코드를 다른 리포지토리의 .github/workflows/main.yml
파일에 복사하여 actions
및 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@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 }}
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” 스크립트의 결과와 난수가 포함되어야 합니다.
GitHub에 대한 복합 작업 예시
GitHub에서 복합 작업의 많은 예를 찾을 수 있습니다.