このブログでは,CircleCI圆球を使用して,プロダクショングレードの泊坞イメージを构筑し,亚马逊弹性容器注册表(ECR)にプッシュして保管する方法について说明します。このブログに登场するツールとテクノロジに精通していれば,より深くこの记事の内容を理解できますが,必须ではありません。一般的な用语とテクノロジについて以下に简単に说明します。

  • 码头工人:コンテナ仮想化を用いてアプリケーションをビルドするためのソフトウェアプラットフォーム。
  • コンテナ:一貫性,効率,生産性を高め,バージョン管理を容易にするために,アプリケーションのコード,コンフィグ,および依存関係を構成要素としてパッケージングする仮想化の手法。
  • コンテナイメージ:アプリケーションを実行するために必要なすべて(コード,ツール,リソース)を备えた自己完结型のソフトウェア。
  • コンテナイメージリポジトリ:名前が付けられた关连するコンテナイメージのコレクション。通常は,同じアプリケーションまたはサービスの异なるバージョンを提供し,タグによって识别されます。
  • 码头工人イメージレジストリ:コンテナイメージを格纳し,サードパーティまたは多克尔集线器,AWS(ECR),GCP(GCR),码头などのパブリック/プライベートレジストリとしてホストされるサービス。开発から本番环境へのワークフローを简素化します。
  • コンテナオーケストレーション:コンテナオーケストレーションは,特に大规模で动的な环境でコンテナのライフサイクルを管理することです。

では,亚马逊ECRについて说明しましょう.Amazon ECRとは何か,亚马逊ECRを最大限に活用するためにCircleCIをどのように活用できるのかを见てみましょう。

Amazon弹性容器注册中心(ECR)

亚马逊ECRは,フルマネージドのプライベート泊坞コンテナレジストリであり,开発者は,亚马逊ECRを使用すると,多克尔コンテナイメージを简単に保存,管理,デプロイできます.Amazon ECRは,亚马逊弹性集装箱服务(亚马逊ECSe)およびAmazon Elastic Kubernetes服务(亚马逊的)とシームレスに統合されます。亚马逊ECRは、他のクラウドベンダーでも使用できます。

亚马逊ECRのようなプライベート泊坞レジストリを使用するメリットは何でしょうか?

  • 多くの场合,开発,テスト,および本番稼働のレジストリを分离することが望ましいです。
  • 亚马逊ECRはフルマネージドであるため,独自のコンテナリポジトリを自社で運用したり,基盤となるインフラストラクチャを苦心してスケーリングしたりする必要はありません。
  • セキュリティ対策も万全です。スキャン机能とロールベースのアクセスコントロールがあるプライベートコンテナレジストリは,セキュリティとガバナンス(IAM)を向上し,管理が效率化されます。コンテナイメージをHTTPSで転送し,保管しているイメージを自动的に暗号化します。
  • コンテナを実行しているシステムの近くでレジストリを実行でき,デプロイのレイテンシが短縮され,ネットワーク中断の危険性が軽減されます。

開発者は,アプリケーション開発のプロセスで作成されたイメージを,レジストリを使用して保存する必要があります。継続的インテグレーションパイプラインによって,コンテナイメージのビルドとこれらのアーティファクトの亚马逊ECRへのプッシュ作业を连続して行うことができるようになります.CircleCIでビルドをトリガーするコミットをプッシュし,新しいイメージを亚马逊ECRにプッシュするパイプラインを想像してください。その后,レジストリは,网络挂接を起动し,デプロイをトリガーできます。すべて人间が手动で操作する必要はありません。レジストリにより,このような完全に自动化されたパイプラインを非常に简単に作成できます。レジストリに配置されたコンテナイメージは,开発のさまざまな段阶で使用できます。ここでは,CircleCI宝珠を使用し,いくつかの簡単な手順を実行し,シンプルなnode . jsアプリケーションをコンテナにして,イメージをビルドして,亚马逊ECRにプッシュします。

亚马逊ECRのセットアップ

AWSマネジメントコンソールから,我を選択します。このサービスを使用すると,AWSリソースへのアクセスを管理できます。

ロール/ユーザーを作成します。この例では,自分にCI-CD-ECRという名前を付けましたが,任意の名前を使用できます。

次に,AWS_ACCESS_KEYAWS_SECRET_KEYを使用してプログラミングによって,亚马逊ECRサービスにアクセスする必要があります。新しく作成したユーザーをクリックし,您的安全凭据ページに移動します。ここで,新しいアクセスキーを作成できます。このキーは安全に保管してください。これは,CircleCIから亚马逊ECRサービスにアクセスするときに使用されます。キーは次のような形式になります。

AWS_ACCESS_KEY_ID = AKIAIOSFODNN7EXAMPLE AWS_SECRET_ACCESS_KEY = wJalrXUtnFEMI / K7MDENG / bPxRfiCYEXAMPLEKEY

次に,政策セクションでポリシーを作成し,先ほど作成したCI-CD-ECRロールをこのポリシーに添付します。このポリシーによって,亚马逊ECRへのフルアクセスが提供されます。このCircleCI Orbは,新しく作成したCI-CD-ECRロールを使用して,亚马逊ECRサービスに完全なアクセスでき,イメージリポジトリが存在しない场合は作成できます。

{“版本”:“2012-10-17”,“声明”:[{“效应”:“允许”、“行动”:[“ecr: *”、“cloudtrail: LookupEvents”),“资源”:“*”}]}

ユーザーのアクセスキーとシークレットキーを生成し,安全な場所に保存します。これらのキーは,CircleCIパイプラインのサンプルを設定するときに必要になります。

aws-ecr orbを使用してCircleCIパイプラインをセットアップする

このデモのコードは,こちらのGitHub上から入手できます.CircleCIのコンフィグファイルは.circleci /フォルダにあります。ご覧のとおり,orbを使用すると,わずか18行のコンフィグで,イメージをビルドして,亚马逊ECRにプッシュできます!orbを使用するには,CircleCIバージョン2.1を使用する必要があります。2.1バージョンからorbはサポートされています。aws-ecr orbには,次の操作を実行するコマンドがあらかじめパッケージ化されています。

  • イメージをビルドする
  • イメージにタグを付ける(HEAD == CIRCLE_SHA1のGitコミットハッシュを使用)
  • 亚马逊ECRにログインする
  • 亚马逊ECRリポジトリが存在しない場合は作成する
  • イメージを亚马逊ECRにプッシュする

このパイプラインの完全なコンフィグは次のとおりです。

版本:2.1宝珠:AWS-ECR:circleci/aws-ecr@6.7.0工作流程:build_and_push_image:工作: -  AWS-ECR /构建 - 推图像:帐户网址:AWS_ECR_ACCOUNT_URL AWS访问密钥ID:AWS_ACCESS_KEY_ID AWS秘密访问键:AWS_SECRET_ACCESS_KEY创建回购:真dockerfile:Dockerfile路径。区域:AWS_REGION回购:circleci-ECR-ORB-演示标签: “$ CIRCLE_SHA1”

CircleCIでプロジェクトをセットアップする

コンフィグで确认でき,设定する必要があるいくつかの环境変数を以下に示します。

  • AWS_ECR_ACCOUNT_URL——AWSアカウントにマッピングされる亚马逊ECRアカウントURL(例,{awsAccountNum} .dkr.ecr.us -西方- 2. - amazonaws.com)を保存する環境変数
  • AWS_ACCESS_KEY_ID——先ほど作成したCI-CD-ECRIAMロールのAWSアクセスキーID。
  • AWS_SECRET_ACCESS_KEY——先ほど作成したci-cd-ecr我ロールのAWSシークレットキー。これは,この値を保持するように設定する環境変数の名前(AWS_SECRET_ACCESS_KEY)に設定します。
  • AWS_REGION——ECRリソースを配置するAWSリージョン。

注:$ CIRCLE_SHA1はすべてのCircleCIプロジェクトで使用可能なデフォルト変数であるため,设定する必要はありません。これは,现在のビルドの最后のコミットのSHA1ハッシュです。Gitコミットハッシュを使用すると,コンテナに何があるかをトレースできます。コンテナをその码头工人イメージにトレースし,次にDockerfileとイメージに含まれるコードに対してトレースできれば理想的です。自動のビルド環境では,これにより码头工人イメージをビルドしたコミットに戻ります。

上記のコンフィグ例では,$ CIRCLE_SHA1を使用して标签:を设定しています。また,CircleCIのビルド番号($ CIRCLE_BUILD_NUM)をビルドのタグとして使用できます。

上记のdockerfile:コマンドは,Dockerfileへのパスを指定します。デモのリポジトリでは次のDockerfileを使用します。

#CircleCIと亚马逊ECRの両方が适切に构成されていれば,イメージのビルドとリポジトリへのプッシュを开始できますFROM节点:高山#元数据添加到图像LABEL应用= “简单节点的应用程序” #指令到环境变量项设置为值对ENV NPM_CONFIG_LOGLEVEL警告#设置任何后续的添加工作目录,COPY,CMD,入口点,随后它在Dockerfile WORKDIR / usr / src目录/应用#复制文件或文件夹#或运行的指令从源头到图像的文件系统路径DEST。COPY的package.json / usr / src目录/应用/ COPY。的/ usr / SRC /应用程序/#执行对当前图像作为一个新的层的顶部上的任何命令和提交的结果。RUN NPM安装 - 生产#定义网络端口,这个容器将在运行时监听。EXPOSE 3000#配置容器中作为一个可执行文件运行。入口点[“故宫”,“开始”]

CircleCIと亚马逊ECRの両方が适切に构成されていれば,イメージのビルドとリポジトリへのプッシュを开始できます。

结论

たった18行のコンフィグで,多克尔イメージをビルドして亚马逊ECRにプッシュできました.CircleCI圆球は,ビルド済みのコマンド,ジョブ,および执行人をCircleCIのコンフィグファイルにインポートして作业时间を节约します。また,クラウドサービスや他のツールと简単に统合できます。


多米尼克Motuka氏はAndela社のDevOpsエンジニアであり,コンフィグ管理,CI / CD, DevOpsプロセスを活用した,AWSおよびGCPの本番環境へのデプロイのサポート,自動化,最適化について4年以上の実務経験があります。