awscli
を使用してカスタムデプロイスクリプトを実行し、ステージングサーバーにデプロイをプッシュする travis-ci を取得しようとしています。
私の.travis.yml
ファイルには次のようになっています:
before_deploy:
- 'curl "https://s3.amazonaws.com/aws-cli/awscli-bundle.Zip" -o "awscli-bundle.Zip"'
- 'unzip awscli-bundle.Zip'
- './awscli-bundle/install -b ~/bin/aws'
- 'export PATH=~/bin:$PATH'
- 'aws configure'
そして、私は次の環境変数を設定しました:
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
AWS_DEFAULT_REGION
travis-ci
Webインターフェースで正しい値を使用します。
ただし、aws configure
が実行されると、ユーザー入力を停止して待機します。定義した環境変数を使用するように指示するにはどうすればよいですか?
いくつかの方法でこれらを設定できます。
まず、~/.aws/config
(または~/.aws/credentials
)にファイルを作成します。
例えば:
[default]
aws_access_key_id=foo
aws_secret_access_key=bar
region=us-west-2
次に、設定ごとに環境変数を追加できます。
たとえば、次の環境変数を作成します。
AWS_DEFAULT_REGION
AWS_ACCESS_KEY_ID
AWS_SECRET_ACCESS_KEY
3番目に、リージョンをコマンドライン引数として渡すことができます。例えば:
aws eb deploy --region us-west-2
これらの場合、CLIが構成されているため、aws configure
を実行する必要はありません。
このページ には、さらにAWSのドキュメントがあります。
Darbioのソリューションは正常に機能しますが、最終的にAWS資格情報をリポジトリにプッシュする可能性があることを考慮していません。
これは悪いことです特にdockerがECRリポジトリの1つからプライベートイメージをプルしようとしている場合。それはおそらく、AWSプロダクション認証情報を.travis.yml
ファイルに保存する必要があり、それが理想とはほど遠いことを意味します。
幸い、Travisを使用すると、環境変数、通知設定を暗号化し、APIキーをデプロイできます。
gem install travis
まずtravis login
を実行してください。githubの認証情報を要求されます。ログインしたら、プロジェクトのルートフォルダー(.travis.yml
ファイルがある場所)にアクセスし、アクセスキーIDとシークレットアクセスキーを暗号化します。
travis encrypt AWS_ACCESS_KEY_ID="HERE_PUT_YOUR_ACCESS_KEY_ID" --add
travis encrypt AWS_SECRET_ACCESS_KEY="HERE_PUT_YOUR_SECRET_ACCESS_KEY" --add
--add
オプションのおかげで、構成ファイルに2つの新しい(暗号化された)環境変数が含まれることになります。 .travis.yml
ファイルを開くと、次のように表示されます。
env:
global:
- secure: encrypted_stuff
- secure: encrypted_stuff
これで、~/.aws/credentials
ファイルを作成するシェルスクリプトをトラビスに実行させることができます。
ecr_credentials.sh
#!/usr/bin/env bash
mkdir -p ~/.aws
cat > ~/.aws/credentials << EOL
[default]
aws_access_key_id = ${AWS_ACCESS_KEY_ID}
aws_secret_access_key = ${AWS_SECRET_ACCESS_KEY}
EOL
次に、ecr_credentials.sh
ファイルから.travis.yml
スクリプトを実行するだけです。
before_install:
- ./ecr_credentials.sh
できた! :-D