본문 바로가기

개발/Linux & DevOps

github acitons 타임스탬프 찍기, 배포 관리 방법, 우선순위

GitHub Actions의 워크플로우 로그에 타임스탬프를 추가하는 기능은 기본적으로 제공되지만, 설정에 따라 다르게 동작합니다. 사용자의 질문에 따라, GitHub Actions YAML에서 로그에 타임스탬프를 추가하거나 커스터마이징하는 방법과 관련 기능을 아래에 정리했습니다.


1. 기본 타임스탬프 기능

GitHub Actions는 워크플로우 실행 로그에 기본적으로 타임스탬프를 포함합니다. 로그를 확인할 때 각 단계(step)의 시작과 끝에 타임스탬프가 표시됩니다. 예를 들어:

  • 2025-04-15T17:56:15.123Z [Step Name] Starting
  • 2025-04-15T17:56:16.456Z [Step Name] Completed

확인 방법

  • GitHub 웹 UI에서 워크플로우 실행 로그를 볼 때, "Show timestamps" 옵션을 활성화하면 각 로그 라인에 타임스탬프가 표시됩니다.
  • 단축키: 로그 뷰에서 Shift + T를 누르면 타임스탬프를 토글할 수 있습니다.
  • 타임스탬프는 ISO 8601 형식(예: 2025-04-15T17:56:15.123Z)으로 표시됩니다.

제한사항

  • 기본 타임스탬프는 GitHub Actions UI에서만 보이며, 커스텀 로그 출력(예: echo 명령어)에는 자동으로 추가되지 않습니다.
  • 각 라인마다 타임스탬프를 추가하려면 추가 설정이 필요합니다.

2. 로그 라인마다 타임스탬프 추가하기

GitHub Actions YAML에서 각 로그 라인에 타임스탬프를 추가하려면, 스크립트 내에서 커맨드 실행 시 타임스탬프를 수동으로 삽입해야 합니다. 이를 위한 몇 가지 방법이 있습니다.

방법 1: bash 스크립트에서 PS4 환경 변수 사용

PS4 환경 변수를 설정해 bash 스크립트의 각 명령어 실행 시 타임스탬프를 추가할 수 있습니다. 이 방법은 특히 디버깅 모드(set -x)와 함께 사용됩니다.

name: Add Timestamps to Logs
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Show timestamps
        run: |
          PS4='+ $(date +"%Y-%m-%d %T.%3N")\t'
          set -x
          echo "This is a test"
          sleep 1
          echo "Another command"
        shell: bash
  • 설명:

    • PS4는 bash의 디버깅 출력 형식을 정의합니다. 위 예에서는 YYYY-MM-DD HH:MM:SS.mmm 형식의 타임스탬프를 추가합니다.
    • set -x는 각 명령어 실행 시 디버깅 출력을 활성화해, 명령어와 함께 타임스탬프를 로그에 기록합니다.
    • 결과 로그 예시:
      + 2025-04-15 17:56:15.123    echo "This is a test"
      This is a test
      + 2025-04-15 17:56:16.456    sleep 1
      + 2025-04-15 17:56:17.789    echo "Another command"
      Another command
  • 참고: 이 방법은 GitLab CI에서 유사한 설정을 참고한 것으로, GitHub Actions에서도 동일하게 동작합니다.

방법 2: 각 명령어에 수동으로 타임스탬프 추가

스크립트에서 각 명령어 실행 시 date 명령어를 사용해 타임스탬프를 출력할 수 있습니다.

name: Manual Timestamp
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Add manual timestamps
        run: |
          echo "$(date +'%Y-%m-%d %T') Running command 1"
          sleep 1
          echo "$(date +'%Y-%m-%d %T') Running command 2"
        shell: bash
  • 결과 로그 예시:

    2025-04-15 17:56:15 Running command 1
    2025-04-15 17:56:16 Running command 2
  • 장점: 간단하고 커스터마이징 용이.

  • 단점: 각 명령어에 수동으로 타임스탬프를 추가해야 하므로 스크립트가 복잡해질 수 있음.

방법 3: 커스텀 액션 사용

GitHub Marketplace에서 타임스탬프를 생성하는 액션을 사용할 수 있습니다. 예를 들어, nanzm/get-time-action은 지정된 시간대와 형식으로 타임스탬프를 제공합니다.

name: Get Timestamp
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Get Time
        id: time
        uses: nanzm/get-time-action@master
        with:
          timeZone: UTC
          format: 'YYYY-MM-DD-HH-mm-ss'
      - name: Use Timestamp
        run: echo "Current time is ${{ steps.time.outputs.time }}"
  • 결과 로그 예시:

    Current time is 2025-04-15-17-56-15
  • 장점: 타임스탬프 형식을 자유롭게 지정 가능, 재사용성 높음.

  • 단점: 서드파티 액션에 의존해야 하며, 인증되지 않은 액션은 보안 위험이 있을 수 있음.


3. 타임스탬프 관련 추가 팁

  • 로그 포맷팅:

    • 타임스탬프 형식을 변경하려면 date 명령어의 포맷 옵션을 사용하세요. 예: date +'%Y-%m-%d %H:%M:%S' 또는 date -u로 UTC 시간 사용.
    • MomentJS 포맷(YYYY-MM-DD-HH-mm-ss)을 선호한다면, get-time-action 같은 액션이 적합합니다.
  • 디버깅 용이성:

    • 타임스탬프는 워크플로우 디버깅(예: 병목 지점 파악, 실행 시간 분석)에 유용합니다. PS4 방식은 특히 상세한 디버깅에 적합합니다.
  • UI 개선 요청:

    • GitHub Actions UI에서 타임스탬프가 기본적으로 "hover"로만 표시되는 점에 대한 불편함이 커뮤니티에서 제기된 바 있습니다.
    • 정확한 타임스탬프를 빠르게 확인하려면, 로그 다운로드 후 sed로 타임스탬프를 추출하거나 커스텀 로그를 생성하는 방법이 대안입니다.

반응형