조합 레시피
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관련 문서
최종 수정 일자: