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/aws-ecr@6.10.0
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
について知見がなかったのが敗因。よく勉強しましょう。
Dockerfile
でARG
を指定して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入門
circleci/aws-ecr@6.10.0
Dockerfileの"ENV"と"ARG"と"環境変数"について
Rails 5.2 + Docker, RAILS_MASTER_KEYをイメージ作成時に動的に入れる方法