카테고리 없음

Github Actions에서 Env 파일 생성하기

kyoulho 2023. 3. 29. 09:25

workflow.yml

- name: Create .env file
  run: |
  	jq -r 'to_entries|map("\(.key)=\(.value|tostring)")|.[]' <<< "$SECRETS_CONTEXT" > .env
  env:
    SECRETS_CONTEXT: ${{ toJson(secrets) }}

 

작동순서

  1. env 필드에서 정의된 SECRETS_CONTEXT 환경 변수는 toJson 함수를 사용하여 secrets 설정에서 정의된 비밀 정보를 JSON 문자열로 인코딩합니다.
  2. jq 명령을 사용하여 SECRETS_CONTEXT 변수에서 비밀 정보를 추출하고 KEY=VALUE로 서식 지정된 키-값 쌍으로 변환합니다.
    -r 옵션은 출력 결과에서 따옴표를 제거하고, 일반 텍스트로 출력하도록 지정하는 옵션입니다.
  3. to_entries 함수는 JSON 객체를 키-값 쌍 배열로 변환하고, map 함수는 각 쌍에 지정된 문자열 서식을 적용하며, | .[]는 결과 배열을 하나의 포맷된 문자열 목록으로 평탄화합니다.
  4. 이제 .env 파일에 포맷된 키-값 쌍을 작성합니다. > 연산자는 표준 출력 대신 현재 작업 디렉토리에 .env 파일을 작성하도록 지정합니다.
  5. .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