質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
87.20%
GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

CI(継続的インテグレーション)

CI(継続的インテグレーション)は、アプリ開発においてビルドとテストを繰り返すことで品質改善と納期短縮を図る手法です。JenkinsやTravis CIなどの専用ツールを利用してプロセスを自動化・半自動化して効率的に実施します。

解決済

[Rails]Github Secretsに定義した環境変数"RAILS_SECRET_KEY"が、Github ActionsのCD用ymlで込まれない

hajsu00
hajsu00

総合スコア118

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

CI(継続的インテグレーション)

CI(継続的インテグレーション)は、アプリ開発においてビルドとテストを繰り返すことで品質改善と納期短縮を図る手法です。JenkinsやTravis CIなどの専用ツールを利用してプロセスを自動化・半自動化して効率的に実施します。

1回答

0評価

0クリップ

264閲覧

投稿2022/06/02 13:31

編集2022/06/03 20:10

Github ActionsでRailsアプリのCI/CDを構築しています。
Github Secretsに定義した環境変数(RAILS_MASTER_KEY)が読み込まれないという問題に遭遇しました。
ご助言をいただけると幸いです。

開発環境

  • ruby 3.0.1
  • Rails 6.1.4.4
  • docker 20.10.12
  • docker-compos 1.29.2

起きている問題

Github Secretsに環境変数"RAILS_SECRET_KEY"を定義したところ、.github/workflows/ci.ymlでは読み込みに成功し、.github/workflows/cd.ymlでは読み込みに失敗する。
その結果、Actionの中でcredentials.yml.encを参照できずに、デプロイに失敗する。

関連コード

Github Actions"cd.yml"のログ

Preparing to unpack .../yarn_1.22.19-1_all.deb ... Unpacking yarn (1.22.19-1) ... Setting up nodejs (16.15.0-deb-1nodesource1) ... Setting up yarn (1.22.19-1) ... Processing triggers for libc-bin (2.28-10) ... Removing intermediate container f4c6ae32085f ---> 31d1d6f23430 Step 15/23 : COPY ./src /var/www/myapp ---> 0f64a1f3786a Step 16/23 : COPY ./src/entrypoint.sh /usr/bin/ ---> 506a8cf41485 Step 17/23 : RUN chmod +x /usr/bin/entrypoint.sh ---> Running in fd40812a73fc Removing intermediate container fd40812a73fc ---> b5d512066a58 Step 18/23 : ENTRYPOINT ["entrypoint.sh"] ---> Running in 99d3882bbb9a Removing intermediate container 99d3882bbb9a ---> a1f89be36d9f Step 19/23 : RUN bundle exec rails assets:precompile ---> Running in 266a8564b5c9 rails aborted! NoMethodError: undefined method `[]' for nil:NilClass /var/www/myapp/config/initializers/aws.rb:5:in `<main>' /var/www/myapp/config/environment.rb:5:in `<main>' Tasks: TOP => environment (See full trace by running task with --trace) The command '/bin/sh -c bundle exec rails assets:precompile' returned a non-zero code: 1 Service 'app' failed to build : Build failed Error: Process completed with exit code 1.

config/initializers/aws.rb

以下の箇所でRailsのmasterkeyが読み込めていないため、NoMethodErrorが出ていると考えています。

ruby

require 'aws-sdk' Aws::Rails.add_action_mailer_delivery_method( :ses, credentials: Aws::Credentials.new(Rails.application.credentials.aws[:access_key_id], Rails.application.credentials.aws[:secret_access_key]), region: 'ap-northeast-1' )

.github/workflows/ci.yml

CIの場合、RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}が読み込まれてRails Credentialsを参照することができます。

yml

name: CI on: push: pull_request: jobs: rspec: runs-on: ubuntu-latest defaults: run: working-directory: ./src services: mysql: image: mysql:8.0.28 ports: - 3306:3306 env: MYSQL_ALLOW_EMPTY_PASSWORD: yes BIND-ADDRESS: 0.0.0.0 options: --health-cmd "mysqladmin ping" --health-interval 10s --health-timeout 5s --health-retries 5 env: RAILS_ENV: test MYSQL_DATABASE_HOST: 127.0.0.1 RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} steps: - uses: actions/checkout@v2.3.4 - name: set up ruby uses: ruby/setup-ruby@v1.68.0 with: ruby-version: 3.0.1 bundler-cache: true - name: cache node modules uses: actions/cache@v2.1.4 with: path: node_modules key: ${{ runner.os }}-node-${{ hashFiles('**/yarn.lock') }} restore-keys: ${{ runner.os }}-node- - name: bundle install run: | gem install bundler bundle install --jobs 4 --retry 3 --path vendor/bundle - name: yarn install run: yarn install --check-files - name: migrate db run: | bundle exec rails db:create bundle exec rails db:test:prepare - name: build tailwind CSS run: bundle exec rails tailwindcss:build - name: run rspec run: bundle exec rspec

.github/workflows/cd.yml

docker-compose -f docker-compose.production.yml buildの部分で、RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }}が読み込まれません。

yml

name: CD on: push: jobs: ecs_deploy: runs-on: ubuntu-latest # if: ${{ github.event.workflow_run.conclusion == 'success' }} env: RAILS_MASTER_KEY: ${{ secrets.RAILS_MASTER_KEY }} steps: - uses: actions/checkout@v2 - name: aws authentication uses: aws-actions/configure-aws-credentials@v1 with: aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }} aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }} aws-region: ${{ secrets.AWS_DEFAULT_REGION }} - name : ecr login id: login-ecr uses: aws-actions/amazon-ecr-login@v1 - name: build and push id: build-image env: ECR_REGISTRY: ${{ steps.login-ecr.outputs.registry }} run: | docker-compose -f docker-compose.production.yml build docker image tag myapp_app $ECR_REGISTRY/app:latest docker image tag myapp_nginx $ECR_REGISTRY/nginx:latest docker push $ECR_REGISTRY/app:latest docker push $ECR_REGISTRY/nginx:latest - name: sleep run: sleep 10 - name: update service run: | aws ecs update-service --cluster myapp --service myapp --force-new-deployment

docker-compose.yml

yml

version: '3' services: nginx: build: context: . dockerfile: ./nginx/Dockerfile ports: - 80:80 app: build: context: . dockerfile: ./src/Dockerfile

docker-compose.production.yml

yml

version: '3' services: nginx: extends: file: docker-compose.yml service: nginx container_name: myapp_nginx app: extends: file: docker-compose.yml service: app container_name: myapp_app

解決へのヒントをいただけると幸いです。
よろしくお願いいたします。

良い質問の評価を上げる

以下のような質問は評価を上げましょう

  • 質問内容が明確
  • 自分も答えを知りたい
  • 質問者以外のユーザにも役立つ

評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

気になる質問をクリップする

クリップした質問は、後からいつでもマイページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

  • プログラミングに関係のない質問
  • やってほしいことだけを記載した丸投げの質問
  • 問題・課題が含まれていない質問
  • 意図的に内容が抹消された質問
  • 過去に投稿した質問と同じ内容の質問
  • 広告と受け取られるような投稿

評価を下げると、トップページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

まだ回答がついていません

会員登録して回答してみよう

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
87.20%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問

同じタグがついた質問を見る

GitHub

GitHubは、Gitバージョン管理システムを利用したソフトウェア開発向けの共有ウェブサービスです。GitHub商用プランおよびオープンソースプロジェクト向けの無料アカウントを提供しています。

Ruby on Rails

Ruby on Railsは、オープンソースのWebアプリケーションフレームワークです。「同じことを繰り返さない」というRailsの基本理念のもと、他のフレームワークより少ないコードで簡単に開発できるよう設計されています。

Circle CI

Circle CIは、クラウド上に簡単にCI環境を構築できるWebサービスです。GitHubと連携させ、CIしたいリポジトリーを選択しビルド・テストを行います。チャット等を利用して結果を確認することが可能です。

CI(継続的インテグレーション)

CI(継続的インテグレーション)は、アプリ開発においてビルドとテストを繰り返すことで品質改善と納期短縮を図る手法です。JenkinsやTravis CIなどの専用ツールを利用してプロセスを自動化・半自動化して効率的に実施します。