記事
チュートリアル
インタラクティブ ガイド
Gitlab で ImageLabeller をデプロイする
![Warren Marusiak の顔写真](https://wac-cdn.atlassian.com/dam/jcr:7509aefb-43e8-401d-90fe-0850cbe6bb13/wmarusiak_headshot%20(1).png?cdnVersion=1880)
Warren Marusiak
シニア テクニカル エバンジェリスト
当社のチームは Jira Software とさまざまな接続ツールを使用してアプリケーションを開発、デプロイ、管理する方法を説明するために、機械学習を使用してイメージにラベルを添付する AWS 上に構築されたシンプルなデモ アプリケーションである ImageLabeller を作成しました。
このページでは、GitLab で ImageLabeller をデプロイする方法について説明します。はじめに、ImageLabeller アーキテクチャ ページと AWS SageMaker のセットアップ ページをお読みの上、背景を確認することをお勧めします。
前提条件
Gitlab グループがまだ作成されていない場合は、この Gitlab ガイドのステップに従って最初からグループを作成してください。
ImageLabeller のコードで公開されている GitHub リポジトリ
Jira Gitlab 統合のデモ ビデオ
Jira と Gitlab を統合する
Jira から [ボード]、[アプリ]、[Gitlab] の順にクリックします。
![GitLab に移動するための Jira Software のドロップダウン メニューのスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:233af7c0-b3a2-46fd-ad94-facbc7611a9f/screenshot_jsw_appsdropdownmenugitlab.png?cdnVersion=1880)
[Get it now (今すぐ入手する)] をクリックします。
![Jira Software の GitLab アプリ モーダル](https://wac-cdn.atlassian.com/dam/jcr:e1c978e6-347f-44e1-bfc1-a36237028ea1/screenshot_jsw_gitlabapp.png?cdnVersion=1880)
[アプリ]、[アプリを管理] の順にクリックします。
![Jira Software の GitLab アプリ モーダルとドロップダウン メニュー](https://wac-cdn.atlassian.com/dam/jcr:5ac45ad7-f8cc-4ee9-ab8e-cbfb6c967709/screenshot_jsw_appsdropdownmenumanage.png?cdnVersion=1880)
Jira 向け Gitlab を展開します。
![Jira Software の [アプリの管理] 画面で GitLab を拡張する](https://wac-cdn.atlassian.com/dam/jcr:3cf62621-d30a-4736-be56-ceaf0096a422/screenshot_jsw_manageappsgitlab.png?cdnVersion=1880)
[名前スペースを追加] をクリックします。
![GitLab Jira Software の構成に名前空間を追加する画面](https://wac-cdn.atlassian.com/dam/jcr:69aad4ef-ff26-422d-8953-23e4d21b79d1/screenshot_jsw_gitlabconfiguration.png?cdnVersion=1880)
既存の名前スペースを選択して [リンク] をクリックします。このガイドは、すでに既存の Gitlab アカウントと Gitlab グループを持っていることを前提としています。
![Jira Software の GitLab 名前スペースをリンクする](https://wac-cdn.atlassian.com/dam/jcr:24dff71f-6c9e-45a7-8da9-1dce709e8e11/screenshot_jsw_manageappslinknamespace.png?cdnVersion=1880)
Gitlab に SSH キーを追加する
画面の右上にあるプロファイル アイコン、[設定] の順にクリックします。
![GitLab のドロップダウン メニューを使用して設定に移動する](https://wac-cdn.atlassian.com/dam/jcr:dbccc133-4c4c-422c-8009-f7d0f6c30053/screenshot_jsw_sshkeygitlab.png?cdnVersion=1880)
[SSH Keys] をクリックして、指示に従って新しい SSH キーを生成するか既存の SSH キーを使用します。
AWS S3 インフラストラクチャ リポジトリを作成する
通常、標準開発者ループでは開発者は Jira からタスクを取り出して、それを進行中の作業に移動して開発作業を行います。Jira 課題 ID は、開発作業を Jira 課題に結びつけるキーです。これは、2 つのシステム間の中核となる統合コンポーネントです。
Jira に移動して、AWS S3 インフラストラクチャ リポジトリを Gitlab に追加するための新しい課題を作成します。課題 ID を書き留めます。この例では「IM-5」です。
![Jira Software でのボードの新しい課題の作成](https://wac-cdn.atlassian.com/dam/jcr:6e6bf187-8e99-4a02-814d-9eaa13d22ce6/screenshot_jsw_createissues3infragitlab.png?cdnVersion=1880)
Gitlab に移動して [新規プロジェクト] をクリックします。
![GitLab で「新規プロジェクト」の作成に移動](https://wac-cdn.atlassian.com/dam/jcr:2d21e5c9-67ce-48df-b183-6d8dda26ea2b/screenshot_gitlab_newproject.png?cdnVersion=1880)
[空白のプロジェクトを作成] をクリックします。
![GitLab での新規プロジェクトの作成](https://wac-cdn.atlassian.com/dam/jcr:a6eccbb5-024c-43cd-bcc3-a26896d473f8/screenshot_gitlab_createnewproject.png?cdnVersion=1880)
[プロジェクト名] を追加して [プロジェクト URL] から適切なグループを選択します。[プロジェクトを作成] をクリックして続行します。
![新規プロジェクトの作成: GitLab の詳細画面](https://wac-cdn.atlassian.com/dam/jcr:9d941c88-2136-4235-b063-61a63dea9296/screenshot_gitlab_createnewprojectdetails.png?cdnVersion=1880)
ターミナルで s3_infra リポジトリに移動して、次のコマンドを実行して AWS CloudFormation template.yml ファイルを Gitlab にプッシュします。
git add --all
git commit -m "IM-5 add s3_infra repository to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/s3_infra.git
git branch -m mainline
git push -u origin mainline
AWS アクセス キーを追加する
[設定]、[CI/CD] の順にクリックします。下にスクロールして [変数] を展開します。[変数を追加] をクリックします。
![GitLab の CI/CD 設定ページ](https://wac-cdn.atlassian.com/dam/jcr:1e0cd540-9715-4fd9-ae2f-3aa8d478f882/screenshot_gitlab_awskeys.png?cdnVersion=1880)
2 つの変数を作成します。1 つは AWS アクセス キー ID、もう 1 つは AWS シークレット アクセス キー用です。
![「変数を追加」モーダルで、GitLab に AWS キーを追加する](https://wac-cdn.atlassian.com/dam/jcr:d71599c4-5ee0-4d45-bf49-225c0a5dbb39/screenshot_gitlab_addvariables.png?cdnVersion=1880)
変数を保護して、保護されたブランチで実行されているパイプラインとタグでのみ使用されるようにします。AWS アクセス キーに関連付けられた IAM ユーザーに、AdministratorAccess を付与します。個々の AWS アクセス ポリシーを選択することで、よりきめ細かなアクセス コントロールを使用できます。
![GitLab の CI/CD 設定ページの「変数」セクションにリストされている AWS キー](https://wac-cdn.atlassian.com/dam/jcr:91899e7a-10f8-4ece-9c15-6545236b3ffa/screenshot_gitlab_moreaccesscontrols.png?cdnVersion=1880)
保護された変数にアクセスするための保護されたブランチを設定する
[設定]、[リポジトリ] の順にクリックします。下にスクロールして [保護されたブランチ] を展開します。
Jira 課題 ID のプレフィックスと * を入力します。
Jira 課題 ID は、この例では IM-5 と IM-6 と同様で、プレフィックスは IM- です。
IM-* と入力して [保護] をクリックします。
![GitLab での保護されたブランチの設定](https://wac-cdn.atlassian.com/dam/jcr:81267f5a-f6a1-42a1-8997-9b662b33e44c/screenshot_gitlab_congfigureprotectedbranches.png?cdnVersion=1880)
メインラインと、IM-* が保護されたブランチとして表示されます。
デプロイ環境を設定する
[デプロイ]、[環境] の順にクリックします。[新しい環境] をクリックして、新しい環境を追加します。この例では、US-WEST-1、US-EAST-2 にテスト環境、US-WEST-2、US-EAST-1、CA-CENTRAL-1 に本番環境があります。
![GitLab でのデプロイ環境の設定](https://wac-cdn.atlassian.com/dam/jcr:abdad29f-4810-45c3-97b9-4a4e7cc33686/screenshot_gitlab_deploymentenvironments.png?cdnVersion=1880)
AWS にデプロイするための .gitlab-ci.yml
ターミナルの s3_infra リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成します。
git checkout -b IM-5
次の yaml で .gitlab-ci.yml ファイルを作成します。これによって、テスト、ステージング、本番環境のデプロイ ワークフローが定義されます。
stages:
- merge-request
- test-us-west-1
- test-us-east-2
- production-us-west-2
- production-us-east-1
- production-ca-central-1
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merges during merge requests"
- echo true
deploy-test-us-west-1:
stage: test-us-west-1
environment: test-us-west-1
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-test-us-east-2:
stage: test-us-east-2
environment: test-us-east-2
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-east-2 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-production-us-west-2:
stage: production-us-west-2
environment: production-us-west-2
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-2 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-production-us-east-1:
stage: production-us-east-1
environment: production-us-east-1
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-east-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
deploy-production-ca-central-1:
stage: production-ca-central-1
environment: production-ca-central-1
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region ca-central-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
.gitlab-ci.yml ファイルを理解する
ステージ
ステージ ブロックを追加して、Gitlab パイプラインの実行順序を定義します。ステージは、ステージブロックで定義されている順序で実行されます。ステージに関連付けられたジョブは、並行して実行されます。
stages:
- merge-request
- test-us-west-1
- test-us-east-2
- production-us-west-2
- production-us-east-1
- production-ca-central-1
ジョブ
ジョブはステージと環境に関連付けられます。ルールは特定のジョブを実行するかどうかを制御します。この例のルールは、パイプライン ブランチがデフォルト ブランチではないかどうか、パイプラインがマージ リクエストの一部として自動で実行されていないかどうかをチェックします。
ジョブごとに異なるイメージを指定できます。ジョブ スクリプトに必要なツールを使用して、イメージを設定できます。script セクションでは、ジョブの実行時に実行される一連のステップを定義します。
deploy-test-us-west-1:
stage: test-us-west-1
environment: test-us-west-1
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
image: registry.gitlab.com/gitlab-org/cloud-deploy/aws-base:latest
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- aws cloudformation deploy --region us-west-1 --template-file template.yml --stack-name OpenDevOpsS3Infra
リクエスト パイプラインをマージする
マージ リクエストが承認されると、パイプラインは Gitlab によって自動で実行されます。ルールを追加することで、このパイプラインのジョブを作成できます。この例では、ジョブは常に成功します。
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merges during merge requests"
- echo true
フィーチャー ブランチにプッシュ
コマンド ラインから次のコマンドを実行して、s3_infra リポジトリの IM-5 ブランチに変更をプッシュします。Jira 課題 ID とブランチ名をコミット メッセージに含めて、プロジェクトで何が起こっているかを Jira Gitlab 統合で追跡できるようにします。
git add --all
git commit -m "IM-5 add .gitlab-ci.yml to s3_infra"
git push -u origin IM-5
[CI/CD]、[Pipelines] の順にクリックして、パイプラインの実行を確認します。
![GitLab の CI/CD パイプラインの画面](https://wac-cdn.atlassian.com/dam/jcr:82e3a1fc-6a33-4dc7-88e5-5a1d7650ce26/screenshot_gitlab_runningworkflows.png?cdnVersion=1880)
実行中のパイプラインのパイプライン ID をクリックします。
![GitLab で実行中のパイプラインのパイプライン ID](https://wac-cdn.atlassian.com/dam/jcr:444f2984-262a-4386-8009-d7a248fb5d8e/screenshot_gitlab_pipelineID1.png?cdnVersion=1880)
ジョブをクリックして、詳細を表示します。
![GitLab で実行中のパイプラインのジョブ詳細を示す画面](https://wac-cdn.atlassian.com/dam/jcr:2c69708d-2d3b-443b-887a-57b20b6c2119/screenshot_gitlab_job.png?cdnVersion=1880)
マージ リクエストを作成する
マージ リクエストを作成するには [マージ リクエスト]、[マージ リクエストを作成] の順にクリックします。
![GitLab のマージ リクエスト画面](https://wac-cdn.atlassian.com/dam/jcr:a6ea4df4-88e6-4d41-bd61-99f17f241520/screenshot_gitlab_mergerequest.png?cdnVersion=1880)
フィーチャー ブランチをソース ブランチとして選択して [ブランチを比較して続行] をクリックします。
![GitLab でのソース ブランチとターゲット ブランチの比較](https://wac-cdn.atlassian.com/dam/jcr:f3567b59-ee5e-42b3-87b3-f47b494383c5/screenshot_gitlab_newmergerequest.png?cdnVersion=1880)
担当者とレビュアーを選択します。
![GitLab でのマージ リクエストのレビュアーの選択](https://wac-cdn.atlassian.com/dam/jcr:668196dc-188e-4e9b-a24b-0f751a2b296e/screenshot_gitlab_choosereviewer.png?cdnVersion=1880)
[マージ リクエストを作成] をクリックします。
![GitLab での「マージ リクエストを作成」ボタンの選択](https://wac-cdn.atlassian.com/dam/jcr:0f7c8d33-0df5-4843-b32f-297a9bc955c9/screenshot_gitlab_createmergerequest.png?cdnVersion=1880)
コードの変更を確認して [承認] をクリックします。
![GitLab で変更を確認できるマージ リクエスト詳細画面](https://wac-cdn.atlassian.com/dam/jcr:7afdc633-e428-4bb5-ac06-4b1daa5cdf98/screenshot_gitlab_reviewmerge.png?cdnVersion=1880)
[CI/CI]、[Pipelines] の順にクリックして、マージ リクエスト パイプラインの実行を確認します。
![GitLab の「Pipelines」画面に移動して、実行されたマージ リクエストを確認](https://wac-cdn.atlassian.com/dam/jcr:b75761e8-0f3e-48b4-8826-0e92ee7bebe3/screenshot_gitlab_pipelines.png?cdnVersion=1880)
パイプライン ID をクリックします。merge-request-pipeline-job だけが実行されていることにご注意ください。
![GitLab で merge-request-pipeline-job のみが実行されたことを示す「パイプライン」詳細ページ](https://wac-cdn.atlassian.com/dam/jcr:0d4ba1f1-4192-435e-9eed-033f13fe94a2/screenshot_gitlab_pipelineran.png?cdnVersion=1880)
[マージ リクエスト] をクリックしてマージ リクエストに戻り、アクティブなマージ リクエスト、[マージ] の順にクリックします。これによって、別のパイプラインが開始されます。
![GitLab でのアクティブなマージ リクエストのマージ](https://wac-cdn.atlassian.com/dam/jcr:2e2aa09f-fd1f-4af5-bb7f-4ff24db04934/screenshot_gitlab_mergerequests.png?cdnVersion=1880)
[CI/CD]、[Pipelines] の順にクリックします。パイプライン ID をクリックします。
![「ブランチ "IM -5" を "mainline" にマージする」と表示されている GitLab のパイプライン詳細ページ](https://wac-cdn.atlassian.com/dam/jcr:0ae790e4-8cd3-48ea-86e2-d2f71b26a6a9/screenshot_gitlab_pipelineID2.png?cdnVersion=1880)
SystemTests のリポジトリを作成する
Jira に移動して、Gitlab に SystemTests リポジトリを追加するための Jira 課題を作成します。Jira 課題 ID を書き留めます。この例では「IM-7」です。
![Jira Software で課題を作成して、「SubmitImage AWS Lambda の GitLab リポジトリを追加」](https://wac-cdn.atlassian.com/dam/jcr:8b8cd7a2-3a69-4d5d-87a9-5ed5b42767fc/screenshot_jsw_createissueaddgitlabreposystemtest.png?cdnVersion=1880)
[プロジェクト名] を追加して [プロジェクト URL] から適切なグループを選択します。[プロジェクトを作成] をクリックして続行します。
![GitLab での新規プロジェクトの作成時にプロジェクトの詳細を入力](https://wac-cdn.atlassian.com/dam/jcr:d0ce901f-13d5-4f3d-b2a3-67fe9867c92e/screenshot_gitlab_createnewprojectsubmitiamge.png?cdnVersion=1880)
ターミナルで SystemTests リポジトリに移動して、次のコマンドを実行してコードを Gitlab にプッシュします。
git add --all
git commit -m "IM-7 add SystemTests repository to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/systemtests.git
git branch -m mainline
git push -u origin mainline
SystemTests リポジトリに .gitlab-ci.yml ファイルは必要ありません。他のパイプラインを実行するためのテストを提供するため、独自のパイプラインはありません。SystemTests のリモート URL を書き留めておきましょう。SubmitImage、GetImageLabel、InvokeLabeller CI/CD パイプラインは、テスト ステップ中に SystemTests リポジトリのクローンを作成します。後続のリポジトリの gitlab-ci.yml を正しい URL で更新する必要があります。
デプロイ トークンを追加する
他のパイプラインの実行中にこのリポジトリを複製するには、デプロイ トークンを追加する必要があります。[設定]、[リポジトリ] の順にクリックします。下にスクロールして [デプロイ トークン] を展開します。
![GitLab の [デプロイ トークン] に「cloneMe」というサンプル名を入力](https://wac-cdn.atlassian.com/dam/jcr:9d40815a-f855-4f4f-ac01-81619b6740a5/screenshot_gitlab_deploytoken.png?cdnVersion=1880)
名前を入力して [read_repository] を選択し、[デプロイ トークンを作成] をクリックします。
![GitLab の「デプロイ トークン」設定ページで「read_repository」チェックボックスを選択](https://wac-cdn.atlassian.com/dam/jcr:968e49e7-2165-4903-8da9-220d3cb2ef08/screenshot_gitlab_createdeploytokenmodal.png?cdnVersion=1880)
デプロイ トークンのユーザー名は自動生成されます。デプロイ トークンのパスワードは作成時に 1 回だけ提供されます。シークレット管理ツールに追加して、後で参照できるようにしてください。このガイドの後半では、デプロイ トークンのユーザー名は gitlab_deploy_token として、デプロイ トークンのパスワードは gitlab_deploy_password として参照されます。
![デプロイ トークンのユーザー名とパスワードが表示されている、GitLab のデプロイ トークン画面](https://wac-cdn.atlassian.com/dam/jcr:ee87828c-8430-46d6-a576-b581aff8d6a8/screenshot_GitLabDeployTokenCreation.png?cdnVersion=1880)
SubmitImage AWS Lambda 用のリポジトリを作成する
Jira に移動して、SubmitImage AWS Lambda リポジトリを Gitlab に追加するための新しい課題を作成します。課題 ID を書き留めます。この例では「IM-8」です。
![Jira Software の Imagelabeller ボード: "IM-8 で SubmitImage AWS Lambda の GitLab リポジトリを追加する" という課題を強調表示](https://wac-cdn.atlassian.com/dam/jcr:63278d8a-9f7f-47af-9b14-c9e2fa24b874/screenshot_jsw_issueaddissuecreatereposubmitimage.png?cdnVersion=1880)
Gitlab に移動して [新規プロジェクト]、[空白のプロジェクトを作成] の順にクリックします。[プロジェクト名] を追加して [プロジェクト URL] から適切なグループを選択します。[プロジェクトを作成] をクリックして続行します。
![Gitlab で新規プロジェクトの「submitimage」を作成したスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:d0ce901f-13d5-4f3d-b2a3-67fe9867c92e/screenshot_gitlab_createnewprojectsubmitiamge.png?cdnVersion=1880)
ターミナルで SubmitImage リポジトリに移動して、次のコマンドを実行してコードを Gitlab にプッシュします。
git add --all
git commit -m "IM-8 add SubmitImage to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/submitimage.git
git branch -m mainline
git push -u origin mainline
AWS アクセス キーを追加、保護されたブランチを設定、デプロイ環境をセットアップする必要があります。
次に、SystemTests リポジトリからデプロイ キーを追加して、SubmitImage Gitlab パイプラインをダウンロードして SystemTests を実行できるようにします。
最後に、AWS アカウント ID を CI/CD 変数として追加します。
![Gitlab の変数画面のスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:e7d826c0-bc7f-4bf8-9849-ac456fe5a3af/screenshot_gitlab_variables.png?cdnVersion=1880)
AWS にデプロイするための .gitlab-ci.yml
ターミナルの SubmitImage リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成します。
git checkout -b IM-8
次の yaml で .gitlab-ci.yml ファイルを作成します。これによって、テスト環境、ステージング環境、本番環境のデプロイ ワークフローが定義されます。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
stages:
- merge-request
- run-unit-tests
#US-WEST-1
- deploy-us-west-1
- test-us-west-1
#US-EAST-2
- deploy-us-east-2
- test-us-east-2
#US-WEST-2
- deploy-us-west-2
- test-us-west-2
#US-EAST-1
- deploy-us-east-1
- test-us-east-1
#CA-CENTRAL-1
- deploy-ca-central-1
- test-ca-central-1
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merge"
- echo true
run-unit-tests:
stage: run-unit-tests
image: golang:buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
script:
- cd submitImage
- go test ./opendevopslambda/...
#US-WEST-1
deploy-us-west-1:
stage: deploy-us-west-1
environment: test-us-west-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
#test-us-west-1:
# stage: test-us-west-1
# environment: test-us-west-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-1
#US-EAST-2
deploy-us-east-2:
stage: deploy-us-east-2
environment: test-us-east-2
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --region us-east-2
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-2 --no-fail-on-empty-changeset
#test-us-east-2:
# stage: test-us-east-2
# environment: test-us-east-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-2
#US-WEST-2
deploy-us-west-2:
stage: deploy-us-west-2
environment: production-us-west-2
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --region us-west-2
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-2 --no-fail-on-empty-changeset
#test-us-west-2:
# stage: test-us-west-2
# environment: production-us-west-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-2
#US-EAST-1
deploy-us-east-1:
stage: deploy-us-east-1
environment: production-us-east-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --region us-east-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-1 --no-fail-on-empty-changeset
#test-us-east-1:
# stage: test-us-east-1
# environment: production-us-east-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-1
#CA-CENTRAL-1
deploy-central-1:
stage: deploy-ca-central-1
environment: production-ca-central-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --region ca-central-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region ca-central-1 --no-fail-on-empty-changeset
#test-central-1:
# stage: test-ca-central-1
# environment: production-ca-central-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=ca-central-1
統合テストの実行は、現時点でコメント アウトされています。システム テストは、アプリ全体がデプロイされた場合にのみ合格します。リポジトリの統合テスト ステップのコメントを解除して、ImageLabeller のすべてのコンポーネントがデプロイされたら、もう一度プッシュしてデプロイ パイプラインを実行します。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
.gitlab-ci.yml ファイルを理解する
このステップでは、SubmitImage リポジトリの一部であるユニット テストを実行します。
unit-test-us-west-1:
stage: unit-test-us-west-1
environment: test-us-west-1
image: golang:buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
script:
- cd submitImage
- go test ./opendevopslambda/...
このステップでは、AWS SAM を使用して SubmitImage AWS Lambda をデプロイします。before_script セクションにご注目ください。script セクションの前にこのステップを実行して、依存関係のインストールや各種ツールのセットアップに使用できます。
deploy-us-west-1:
stage: deploy-us-west-1
environment: test-us-west-1
image: python:latest
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
- wget https://golang.org/dl/go1.16.6.linux-amd64.tar.gz
- rm -rf /usr/local/go && tar -C /usr/local -xzf go1.16.6.linux-amd64.tar.gz
- export PATH=$PATH:/usr/local/go/bin
- go version
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file submit-image-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
- sam deploy --template-file submit-image-packaged.yaml --stack-name OpenDevOpsSubmitImage --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
このステップでは、SystemTests リポジトリで統合テストをダウンロードし、実行します。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
test-us-west-1:
stage: test-us-west-1
environment: test-us-west-1
image: golang:buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
- cd systemtests
- go test -v ./... -aws_region=us-west-1
前に作成したデプロイ トークンは、git clone 行で参照されます。
- git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
フィーチャー ブランチにプッシュ
コマンド ラインから次のコマンドを実行して、SubmitImage リポジトリの IM-8 ブランチに変更をプッシュします。Jira 課題 ID とブランチ名をコミット メッセージに含めて、プロジェクトで何が起こっているかを Jira Gitlab 統合で追跡できるようにします。
git add --all
git commit -m "IM-8 add .gitlab-ci.yml to SubmitImage"
git push -u origin IM-8
[CI/CD]、[Pipelines] の順にクリックして、パイプラインの実行を確認します。
![Gitlab で実行されるパイプラインのスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:9bef95c2-61b6-4b89-8aaa-3683083605dc/screenshot_gitlab_pipelinerun.png?cdnVersion=1880)
マージ リクエストを作成する
GitLab がテスト環境にデプロイした後、本番環境にデプロイするためのマージ リクエストを作成します。IM-8 ブランチを選択します。
![Gitlab のマージ リクエストのスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:e6915a7c-00f3-4ee4-b1af-df7d936033a5/screenshot_gitlab_mergerequestssubmitimage.png?cdnVersion=1880)
[CI/CD]、[Pipelines] の順にクリックして、実行中のマージ リクエスト パイプラインを確認します。
![Gitlab のマージ リクエストを実行するスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:edec3e6b-830e-4fe8-af86-f67178bd83ba/screenshot_gitlab_runningmergerequest.png?cdnVersion=1880)
マージ リクエスト パイプラインの完了後、変更をメインラインにマージします。[CI/CD]、[Pipelines] の順にクリックして、実行中の本番パイプラインを確認します。
![Gitlab で本番パイプラインを実行するスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:29153944-0768-448a-8cdb-6c9e8f2989b1/screenshot_gitlab_runningproductionpipeline.png?cdnVersion=1880)
InvokeLabeller AWS Lambda のリポジトリを作成する
Jira に移動して、InvokeLabeller AWS Lambda リポジトリを Gitlab に追加するための新しい課題を作成します。課題 ID を書き留めます。この例では「IM-10」です。
![Gitlab でリポジトリ「invokelabeller」を作成する Jira 課題のスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:2917371c-fe94-4059-add8-2ca8d5739908/screenshot_jsw_createissuerepoinvokelabellergitlab.png?cdnVersion=1880)
Gitlab に移動して [新規プロジェクト]、[空白のプロジェクトを作成] の順にクリックします。[プロジェクト名] を追加して [プロジェクト URL] から適切なグループを選択します。[プロジェクトを作成] をクリックして続行します。
![Gitlab で新しいプロジェクト「invokelabeller」を作成するスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:f8c18f79-7ac0-4c55-81f2-b877981bdeba/screenshot_gitlab_createprojectinvokelabeller.png?cdnVersion=1880)
ターミナルで InvokeLabeller リポジトリに移動して、次のコマンドを実行してコードを Gitlab にプッシュします。
git add --all
git commit -m "IM-10 add InvokeLabeller to gitlab"
git remote add origin git@gitlab.com:pmmquickstartguides/invokelabeller.git
git branch -m mainline
git push -u origin mainline
AWS アクセス キーを追加、保護されたブランチを設定、デプロイ環境をセットアップする必要があります。
次に、SystemTests リポジトリからデプロイ キーを追加して、InvokeLabeller Gitlab パイプラインをダウンロードして SystemTests を実行できるようにします。
最後に、AWS アカウント ID を CI/CD 変数として追加します。
![Gitlab の変数ページのスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:e958bb2f-019a-417e-88b6-a9fa33c082be/screenshot_gitlab_variables2.png?cdnVersion=1880)
AWS にデプロイするための .gitlab-ci.yml
ターミナルの InvokeLabeller リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成します。
git checkout -b IM-10
次の yaml で .gitlab-ci.yml ファイルを作成します。これによって、テスト環境、ステージング環境、本番環境のデプロイ ワークフローが定義されます。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
stages:
- merge-request
- run-unit-tests
#US-WEST-1
- deploy-us-west-1
- test-us-west-1
#US-EAST-2
- deploy-us-east-2
- test-us-east-2
#US-WEST-2
- deploy-us-west-2
- test-us-west-2
#US-EAST-1
- deploy-us-east-1
- test-us-east-1
#CA-CENTRAL-1
- deploy-ca-central-1
- test-ca-central-1
merge-request-pipeline-job:
stage: merge-request
rules:
- if: $CI_PIPELINE_SOURCE == "merge_request_event"
script:
- echo "This pipeline always succeeds and enables merge"
- echo true
run-unit-tests:
stage: run-unit-tests
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install pytest
- pip3 install moto
- pip3 install -r tst/requirements.txt --user
script:
- python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml
#US-WEST-1
deploy-us-west-1:
stage: deploy-us-west-1
environment: test-us-west-1
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --region us-west-1
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-west-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-1 --no-fail-on-empty-changeset
#test-us-west-1:
# stage: test-us-west-1
# environment: test-us-west-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-1
#US-EAST-2
deploy-us-east-2:
stage: deploy-us-east-2
environment: test-us-east-2
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --region us-east-2
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-east-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-2 --no-fail-on-empty-changeset
#test-us-east-2:
# stage: test-us-east-2
# environment: test-us-east-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH != $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-2
#US-WEST-2
deploy-us-west-2:
stage: deploy-us-west-2
environment: production-us-west-2
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --region us-west-2
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-west-2-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-west-2 --no-fail-on-empty-changeset
#test-us-west-2:
# stage: test-us-west-2
# environment: production-us-west-2
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-west-2
#US-EAST-1
deploy-us-east-1:
stage: deploy-us-east-1
environment: production-us-east-1
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --region us-east-1
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-us-east-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region us-east-1 --no-fail-on-empty-changeset
#test-us-east-1:
# stage: test-us-east-1
# environment: production-us-east-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=us-east-1
#CA-CENTRAL-1
deploy-central-1:
stage: deploy-ca-central-1
environment: production-ca-central-1
image: python:3.8-buster
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
before_script:
- pip3 install awscli --upgrade
- pip3 install aws-sam-cli --upgrade
script:
- export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
- export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
- sam build
- sam package --output-template-file invoke-labeller-packaged.yaml --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --region ca-central-1
- sam deploy --template-file invoke-labeller-packaged.yaml --stack-name OpenDevOpsInvokeLabeller --s3-bucket open-devops-code-ca-central-1-$AWS_ACCOUNT_ID --capabilities CAPABILITY_IAM --region ca-central-1 --no-fail-on-empty-changeset
#test-central-1:
# stage: test-ca-central-1
# environment: production-ca-central-1
# image: golang:buster
# rules:
# - if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH && $CI_PIPELINE_SOURCE != "merge_request_event"
# script:
# - export AWS_ACCESS_KEY_ID=$AWS_ACCESS_KEY_ID
# - export AWS_SECRET_ACCESS_KEY=$AWS_SECRET_ACCESS_KEY
# - git clone https://${gitlab_deploy_token}:${gitlab_deploy_password}@gitlab.com/pmmquickstartguides/systemtests.git
# - cd systemtests
# - go test -v ./... -aws_region=ca-central-1
統合テストの実行は、現時点でコメント アウトされています。システム テストは、アプリ全体がデプロイされた場合にのみ合格します。リポジトリの統合テスト ステップのコメントを解除して、ImageLabeller のすべてのコンポーネントがデプロイされたら、もう一度プッシュしてデプロイ パイプラインを実行します。SystemTests を SystemTests リポジトリにするには、git クローン行を更新する必要があります。
AWS SageMaker エンドポイントで src/app.py をアップデートする
InvokeLabeller の src/app.py ファイルを開いて、query_endpoint を探します。endpoint_name とクライアントの region_name を、AWS SageMaker ノートブックと一致するように変更します。
def query_endpoint(img):
endpoint_name = 'jumpstart-dft-image-labeller-endpoint'
client = boto3.client(service_name='runtime.sagemaker', region_name='us-west-1')
response = client.invoke_endpoint(EndpointName=endpoint_name, ContentType='application/x-image', Body=img)
model_predictions = json.loads(response['Body'].read())['predictions'][0]
return model_predictions
フィーチャー ブランチにプッシュ
コマンド ラインから次のコマンドを実行して、InvokeLabeller リポジトリの IM-10 ブランチに変更をプッシュします。Jira 課題 ID とブランチ名をコミット メッセージに含めて、プロジェクトで何が起こっているかを Jira Gitlab 統合で追跡できるようにします。
git add --all
git commit -m "IM-10 add .gitlab-ci.yml to InvokeLabeller"
git push -u origin IM-10
[CI/CD]、[Pipelines] の順にクリックして、パイプラインの実行を確認します。
![Gitlab で実行しているパイプラインのスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:06f6da58-4877-422c-a2cc-22873f81ae59/screenshot_gitlab_pipelinerunninginvokelabeller.png?cdnVersion=1880)
マージ リクエストを作成する
GitLab がテスト環境にデプロイした後、本番環境にデプロイするためのマージ リクエストを作成します。IM-10 ブランチを選択します。
![Gitlab のマージ リクエストを作成しているスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:46a6d6b8-6086-4ce3-81e6-4f2e84ea90db/screenshot_gitlab_createmergerequestinvokelabeller.png?cdnVersion=1880)
マージ リクエスト パイプラインの完了後、変更をメインラインにマージします。[CI/CD]、[Pipelines] の順にクリックして、実行中の本番パイプラインを確認します。
![Gitlab で本番パイプラインを実行するスクリーンショット](https://wac-cdn.atlassian.com/dam/jcr:221f4820-b1f9-455b-bf5c-b64dba9b64f5/screenshot_gitlab_runningproductionpipelineinvokelabeller.png?cdnVersion=1880)
おめでとうございます、これで完了です! ImageLabeller をデプロイできました。次のステップでは、Opsgenie で ImageLabeller の監視をセットアップします。
この記事を共有する
次のトピック
おすすめコンテンツ
次のリソースをブックマークして、DevOps チームのタイプに関する詳細や、アトラシアンの DevOps についての継続的な更新をご覧ください。
![DevOps のイラスト](https://wac-cdn.atlassian.com/dam/jcr:bd9d8b2c-ca36-444f-8595-719cb1990e64/Devops-community.png?cdnVersion=1880)
DevOps コミュニティ
![DevOps のイラスト](https://wac-cdn.atlassian.com/dam/jcr:297108ea-d232-4368-af51-b53af230c4fe/Simulation-workshop.png?cdnVersion=1880)
DevOps ラーニング パス
![マップのイラスト](https://wac-cdn.atlassian.com/dam/jcr:25f6330a-4191-408f-a4e5-2e24bfba67b4/Maturity-model.png?cdnVersion=1880)