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 개선 요청:
'개발 > Linux & DevOps' 카테고리의 다른 글
Actuator 의 DB 헬스체크 (1) | 2024.12.18 |
---|---|
젠킨스 build.xml 에 대한 고찰 (0) | 2024.11.26 |
nginx, logrotate 운영 환경 세팅 (kill USR1, 파일디스크립터) (4) | 2024.07.22 |
Java Green Thread, Native Thread, Kernel Thread, User Thread + Jenkins Executor 최적화 (0) | 2024.07.11 |
aws 초청강의 - msa가 필요한 이유 (0) | 2023.03.24 |