Skip to Content
문서GitHub Actions조합 레시피

조합 레시피

GitHub Actions에서 자주 쓰이는 패턴 모음이에요.
모든 예제는 secrets.DEPLITE_API_TOKEN이 발급되어 있다고 가정해요.

1. 빌드 산출물 → Deplite로 배포

가장 흔한 형태예요.
빌드한 APK를 Deplite 스토리지에 올리고, 그 파일 ID를 트리거 파라미터로 넘겨요.

name: Build and Deploy on: push: branches: [main] jobs: deploy: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - uses: actions/setup-node@v4 with: { node-version: 20 } - run: npm ci && npm run build:apk - uses: Deplite/files-action@v1 id: upload with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} mode: upload path: ./build/app.apk cleanup-rule: ttl ttl-seconds: 3600 - uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} trigger-id: ${{ vars.DEPLITE_TRIGGER_ID }} params: | { "apkFileId": "${{ steps.upload.outputs.file-id }}", "ref": "${{ github.sha }}" } wait: sync

워크플로우 측에서는 ${{ params.apkFileId }}로 파일 ID를 받아 Deplite Files API로 받아 쓰면 돼요.

2. PR에 배포 결과 코멘트

wait: sync 출력으로 받은 status·output을 그대로 PR 코멘트에 남기는 패턴이에요.

jobs: deploy-preview: if: github.event_name == 'pull_request' runs-on: ubuntu-latest permissions: pull-requests: write steps: - id: deploy uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} trigger-id: ${{ vars.PREVIEW_TRIGGER_ID }} params: '{"prNumber":"${{ github.event.pull_request.number }}"}' wait: sync - uses: actions/github-script@v7 with: script: | const status = `${{ steps.deploy.outputs.status }}` const output = `${{ steps.deploy.outputs.output }}` const parsed = JSON.parse(output || '{}') github.rest.issues.createComment({ owner: context.repo.owner, repo: context.repo.repo, issue_number: context.issue.number, body: `🚀 Deploy **${status}**\nPreview: ${parsed.url ?? '(no url)'}`, })

3. 매트릭스로 여러 환경 동시 배포

같은 빌드 산출물을 staging·canary·prod 등 여러 환경에 동시 배포할 때 어울려요.

jobs: multi-deploy: runs-on: ubuntu-latest strategy: matrix: env: [staging, canary, prod] steps: - uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} trigger-id: ${{ vars[format('TRIGGER_{0}', matrix.env)] }} params: '{"ref":"${{ github.sha }}"}' idempotency-key: ${{ github.run_id }}-${{ matrix.env }} wait: sync

각 환경별 트리거 ID를 GitHub Actions Variables에 TRIGGER_STAGING·TRIGGER_CANARY·TRIGGER_PROD로 저장해두세요.

4. Reusable Workflow

조직 내 여러 레포가 같은 배포 패턴을 쓴다면 reusable workflow로 묶는 게 깔끔해요.

# .github/workflows/deplite-deploy.yml (호출되는 쪽) on: workflow_call: inputs: trigger_id: { required: true, type: string } ref: { required: false, type: string, default: main } wait: { required: false, type: string, default: async } secrets: deplite_token: { required: true } jobs: trigger: runs-on: ubuntu-latest steps: - uses: Deplite/trigger-action@v1 with: api-token: ${{ secrets.deplite_token }} trigger-id: ${{ inputs.trigger_id }} params: '{"ref":"${{ inputs.ref }}"}' wait: ${{ inputs.wait }}
# 호출하는 쪽 jobs: call-deploy: uses: acme/devops/.github/workflows/deplite-deploy.yml@main with: trigger_id: ${{ vars.STAGING_TRIGGER_ID }} ref: ${{ github.sha }} wait: sync secrets: deplite_token: ${{ secrets.DEPLITE_API_TOKEN }}

5. 릴리즈 아티팩트 영구 보관

CI에서 생성한 정식 릴리즈 빌드는 cleanup-rule: persistent로 올려두고, 나중에 롤백·재배포에 쓸 수 있게 해요.

on: release: types: [published] jobs: upload-artifact: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - run: ./scripts/build-release.sh - uses: Deplite/files-action@v1 id: upload with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} mode: upload path: ./dist/release.tar.gz filename: release-${{ github.event.release.tag_name }}.tar.gz cleanup-rule: persistent - name: Notify run: | echo "Stored release ${{ github.event.release.tag_name }} as ${{ steps.upload.outputs.file-id }}"

file-id를 release notes나 issue에 같이 남겨두면 롤백할 때 바로 참조할 수 있어요.

6. 다운로드 후 재가공

워크플로우가 만든 산출물(Deplite Files)을 GitHub Actions에서 다시 받아 가공·재배포하는 패턴이에요.

- uses: Deplite/files-action@v1 with: api-token: ${{ secrets.DEPLITE_API_TOKEN }} mode: download file-id: ${{ vars.LATEST_BUILD_FILE_ID }} dest: ./input.tar.gz - run: | tar xzf ./input.tar.gz ./scripts/repackage.sh

관련 문서

최종 수정 일자: