【CircleCI】【Rails】【Docker】ArgumentError: key must be 16 bytes

assets:precompile에서 ArgumentError: key must be 16 bytes 발생



Dockerfile.rails
ARG RAILS_MASTER_KEY
ENV RAILS_MASTER_KEY ${RAILS_MASTER_KEY}

**略

RUN bundle exec rails assets:precompile # 問題の箇所

아래 오류 사진



대처 내용



로컬 환경에서 docker build 해봐도 같은 에러는 발생하지 않았으므로, 값의 전달에 문제가 있다고 가설.

.circleci/config.yml
version: 2.1 
orbs:
  aws-ecr: circleci/[email protected]
workflows:
  lint_and_test_and_ecr_push:
    jobs:
      - aws-ecr/build-and-push-image:
          account-url: AWS_ECR_ACCOUNT_URL_ENV_VAR_NAME_RAILS
          aws-access-key-id: ACCESS_KEY_ID_ENV_VAR_NAME
          aws-secret-access-key: SECRET_ACCESS_KEY_ENV_VAR_NAME
          dockerfile: Dockerfile
          no-output-timeout: 20m
          extra-build-args: "--build-arg RAILS_MASTER_KEY=${RAILS_MASTER_KEY}" # これが抜けていた…
          path: .
          region: AWS_REGION_ENV_VAR_NAME
          repo: repo-name
          filters:
            branches:
              ignore:
                - master

원래 --build-arg 에 대해 지견이 없었던 것이 패인. 잘 공부합시다.
DockerfileARG 를 지정해 docker build 시에 지정할 수 있는 인수를 선언해도, 내용을 가져오지 않으면 의미가 없다.

이미지


  • CircleCI 환경 변수에 값을 설정
  • .circleci/config.yml에서 Dockerfile로 확장 할 변수 RAILS_MASTER_KEY를 지정하고 변수에 CircleCI로 설정된 환경 변수 RAILS_MASTER_KEY를 할당합니다.
  • Dockerfile의 ARG (RAILS_MASTER_KEY)가 CircleCI에 설정된 환경 변수의 값을 가진 변수로 작동합니다.
  • Dockerfile에서 ENV (RAILS_MASTER_KEY)에 ARG로 작동하는 변수 RAILS_MASTER_KEY를 대입하여 컨테이너 내에서 환경 변수 (RAILS_MASTER_KEY)로 작동합니다.

    참고



    Dockerfile ARG 입문
    시 rc ぇ시 / 아 ws-에 cr @ 6.10.0
    Dockerfile의 "ENV"와 "ARG"와 "환경 변수"에 대해
    Rails 5.2 + Docker, RAILS_MASTER_KEY를 이미지 작성시에 동적으로 넣는 방법
  • 좋은 웹페이지 즐겨찾기