DevOps/GitOps

[GitHub Actions] 커밋 메시지 특수문자 처리하기

Jflip 2024. 11. 22. 11:02
728x90

문제 상황

GitHub Actions 워크플로우에서 이전 커밋 메시지를 포함하여 새로운 커밋을 만들 때, 특수문자로 인한 셸 구문 오류가 발생하는 경우가 있습니다.

- name: Git Commit and Push
  run: |
    git config --global user.email "user@email.com"
    git config --global user.name "User"
    git add .
    git commit -m "${{ github.event.head_commit.message }} - ${{ github.sha }}"
    git push

예를 들어, 이전 커밋 메시지가 다음과 같은 경우:

Revert "feat: Add new feature (TICKET-123)"

다음과 같은 오류가 발생합니다:

/home/runner/work/_temp/abc123def456.sh: line 13: syntax error near unexpected token `('

원인 분석

이 오류는 다음과 같은 이유로 발생합니다:

  1. 셸(bash)은 특정 특수문자들을 명령어의 일부로 해석합니다.
  2. 커밋 메시지에 포함된 괄호(), 따옴표"", 공백 등이 셸에 의해 특수문자로 해석됩니다.
  3. 이로 인해 git commit -m 명령이 실행될 때 구문 오류가 발생합니다.

해결 방안

이 문제를 해결하기 위한 세 가지 방법이 있습니다:

1. 작은따옴표로 감싸기 (Simple Solution)

git commit -m "'${{ github.event.head_commit.message }} - ${{ github.sha }}'"
  • 장점: 구현이 간단하고 직관적
  • 단점: 커밋 메시지에 작은따옴표가 포함된 경우 문제 발생 가능

2. 변수와 이스케이프 처리 사용 (Robust Solution)

COMMIT_MSG=$(echo "${{ github.event.head_commit.message }}" | sed 's/"/\\"/g')
git commit -m "${COMMIT_MSG} - ${{ github.sha }}"
  • 장점: 더 안정적이고 다양한 특수문자 처리 가능
  • 단점: 구현이 조금 더 복잡함

3. 환경 변수 사용 (Alternative Solution)

env:
  COMMIT_MESSAGE: ${{ github.event.head_commit.message }}
run: |
  git commit -m "${COMMIT_MESSAGE} - ${{ github.sha }}"
  • 장점: GitHub Actions의 환경 변수 시스템 활용
  • 단점: 워크플로우 파일의 구조 변경 필요

권장 사항

일반적인 상황에서는 첫 번째 방법인 작은따옴표로 감싸는 방식을 사용하는 것이 가장 간단하고 효과적입니다. 하지만 더 복잡한 커밋 메시지를 다루어야 하는 경우에는 두 번째 방법인 이스케이프 처리를 사용하는 것이 안전합니다.

예제 워크플로우 파일

name: Git Commit Example
on:
  push:
    branches: [ main ]

jobs:
  commit:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2

      - name: Git Commit and Push
        run: |
          git config --global user.email "user@email.com"
          git config --global user.name "User"
          git add .
          COMMIT_MSG=$(echo "${{ github.event.head_commit.message }}" | sed 's/"/\\"/g')
          git commit -m "${COMMIT_MSG} - ${{ github.sha }}"
          git push

마치며

GitHub Actions에서 커밋 메시지를 다룰 때는 특수문자 처리에 주의해야 합니다. 상황에 따라 적절한 해결 방안을 선택하면 안정적인 워크플로우를 구성할 수 있습니다.

728x90
반응형