CollabOps

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 }}"

브랜치별 태그 결과

브랜치tag1tag2
mainmy-app:&lt;commit-sha&gt;my-app:latest
hotfix/v1.2my-app:hotfix-v1.2my-app:&lt;commit-sha&gt;

포인트

id: tags를 지정해야 $\{\{ steps.tags.outputs.* \}\}로 참조 가능합니다.

$COLLABOPS_OUTPUTkey=value 형태로 여러 값을 저장할 수 있습니다.

셸 조건문으로 브랜치별 태그 전략을 분기합니다.

출력값은 같은 Job 내의 후속 Step에서만 참조 가능합니다.

푸시 전에 collabops/docker-login@v1 으로 인증 Step을 두지 않으면 denied 오류가 납니다 — GCP는 gcloud-docker-auth, AWS는 aws-ecr-auth 로 대체합니다.

목차