workflow.yml
- name: Create .env file
run: |
jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' <<< "$SECRETS_CONTEXT" > .env
env:
SECRETS_CONTEXT: ${{ toJson(secrets) }}
작동순서
- env 필드에서 정의된 SECRETS_CONTEXT 환경 변수는 toJson 함수를 사용하여 secrets 설정에서 정의된 비밀 정보를 JSON 문자열로 인코딩합니다.
- jq 명령을 사용하여 SECRETS_CONTEXT 변수에서 비밀 정보를 추출하고 KEY=VALUE로 서식 지정된 키-값 쌍으로 변환합니다.
-r 옵션은 출력 결과에서 따옴표를 제거하고, 일반 텍스트로 출력하도록 지정하는 옵션입니다. - to_entries 함수는 JSON 객체를 키-값 쌍 배열로 변환하고, map 함수는 각 쌍에 지정된 문자열 서식을 적용하며, | .[]는 결과 배열을 하나의 포맷된 문자열 목록으로 평탄화합니다.
- 이제 .env 파일에 포맷된 키-값 쌍을 작성합니다. > 연산자는 표준 출력 대신 현재 작업 디렉토리에 .env 파일을 작성하도록 지정합니다.
- .env 파일에 저장된 비밀 정보는 워크플로우의 다른 단계에서 사용될 수 있습니다.
jq는 커맨드 라인에서 JSON 데이터를 다루기 위한 경량화된 프로그래밍 언어입니다. jq는 매우 간결한 문법을 사용하여 JSON 데이터를 선택하고 변환할 수 있습니다. 이를 통해 JSON 데이터를 검색하고 필요한 부분만 추출하거나 JSON 데이터를 다른 형식으로 변환할 수 있습니다. 또한 jq는 대규모 JSON 파일을 빠르게 처리할 수 있어서 대규모 데이터 세트에 유용합니다.
특정 Secret은 제외하고 싶다면
AWS_ACCESS_KEY_ID와 AWS_SECRET_ACCESS_KEY는 Github Actions에서만 사용되기 때문에 배포 환경에서는 빼고 싶었습니다. 그래서 찾은 방법입니다.
jq -r 'to_entries | map(select(.key != "AWS_ACCESS_KEY_ID" and .key != "AWS_SECRET_ACCESS_KEY" and .key != "github_token")| "\(.key)=\(.value|tostring)") | .[]' <<< "$SECRETS_CONTEXT" > .env
728x90