Step 출력 활용
$COLLABOPS_OUTPUT으로 Step 간 데이터 전달 — 동적 이미지 태그, 브랜치별 분기
$COLLABOPS_OUTPUT을 사용하여 Step 간 데이터를 전달하는 실전 예제입니다. 브랜치에 따라 이미지 태그를 동적으로 생성합니다.
범용 Docker 레지스트리(GHCR, Docker Hub, Harbor 등) 인증은 collabops/docker-login 을 사용합니다. GCP Artifact Registry는 gcloud-docker-auth, AWS ECR은 aws-ecr-auth 를 사용하세요. 인증 없이 push 하면 레지스트리가 denied 를 반환합니다.
전체 코드
name: dynamic-image-tags
triggers:
push:
# main과 hotfix 브랜치에서 실행
branches: ["main", "hotfix/*"]
# 레지스트리 정보를 전역 변수로 정의
env:
REGISTRY: ghcr.io
IMAGE_BASE: ghcr.io/my-org/my-app
jobs:
build-and-push:
services:
- docker
steps:
# 1. 소스코드 체크아웃
- name: checkout
uses: "collabops/checkout@v2"
with:
repo-url: "https://<collabops-host>/<workspace>/<repository>.git"
# 2. 레지스트리 인증 — .docker/config.json 생성
- name: registry-login
uses: "collabops/docker-login@v1"
with:
registry: ${{ env.REGISTRY }}
username: ${{ secrets.REGISTRY_USERNAME }}
password: ${{ secrets.REGISTRY_PASSWORD }}
# 3. 브랜치에 따라 이미지 태그 동적 생성
- name: prepare-tags
id: tags # 다른 Step에서 참조할 식별자
image: debian:bookworm-slim
env:
COLLABOPS_REF: ${{ collabops.ref }}
COMMIT_SHA: ${{ collabops.sha }}
IMAGE_BASE: ${{ env.IMAGE_BASE }}
run: |
set -eu
# refs/heads/main → main
# refs/heads/hotfix/v1.2 → hotfix-v1.2
REF_TAG=$(echo "${COLLABOPS_REF}" | sed 's|refs/heads/||' | sed 's/\//-/g')
# 브랜치별 태그 전략
if echo "${COLLABOPS_REF}" | grep -q 'refs/heads/hotfix/'; then
# hotfix 브랜치: 브랜치명 태그 + SHA 태그
echo "tag1=${IMAGE_BASE}:${REF_TAG}" >> $COLLABOPS_OUTPUT
echo "tag2=${IMAGE_BASE}:${COMMIT_SHA}" >> $COLLABOPS_OUTPUT
else
# main 브랜치: SHA 태그 + latest 태그
echo "tag1=${IMAGE_BASE}:${COMMIT_SHA}" >> $COLLABOPS_OUTPUT
echo "tag2=${IMAGE_BASE}:latest" >> $COLLABOPS_OUTPUT
fi
# 4. 생성된 태그로 빌드 & 푸시 — 위 인증 정보를 자동으로 사용
- name: build-push
uses: "collabops/docker-build-push@v1"
with:
tags: |
${{ steps.tags.outputs.tag1 }}
${{ steps.tags.outputs.tag2 }}
# 5. 결과 확인
- name: verify-push
image: debian:bookworm-slim
run: |
echo "Push complete:"
echo " Tag1: ${{ steps.tags.outputs.tag1 }}"
echo " Tag2: ${{ steps.tags.outputs.tag2 }}"브랜치별 태그 결과
| 브랜치 | tag1 | tag2 |
|---|---|---|
main | my-app:<commit-sha> | my-app:latest |
hotfix/v1.2 | my-app:hotfix-v1.2 | my-app:<commit-sha> |
포인트
id: tags를 지정해야 $\{\{ steps.tags.outputs.* \}\}로 참조 가능합니다.
$COLLABOPS_OUTPUT에 key=value 형태로 여러 값을 저장할 수 있습니다.
셸 조건문으로 브랜치별 태그 전략을 분기합니다.
출력값은 같은 Job 내의 후속 Step에서만 참조 가능합니다.
푸시 전에 collabops/docker-login@v1 으로 인증 Step을 두지 않으면 denied 오류가 납니다 — GCP는 gcloud-docker-auth, AWS는 aws-ecr-auth 로 대체합니다.