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 `('
원인 분석
이 오류는 다음과 같은 이유로 발생합니다:
- 셸(bash)은 특정 특수문자들을 명령어의 일부로 해석합니다.
- 커밋 메시지에 포함된 괄호
()
, 따옴표""
, 공백 등이 셸에 의해 특수문자로 해석됩니다. - 이로 인해
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
반응형
'DevOps > GitOps' 카테고리의 다른 글
[CI/CD] Gitlab ci, Jenkins 맛보기 (0) | 2024.12.08 |
---|