GitHub で ImageLabeller をデプロイする

当社のチームは Jira Software とさまざまな接続ツールを使用してアプリケーションを開発、デプロイ、管理する方法を説明するために、機械学習を使用してイメージにラベルを添付する AWS 上に構築されたシンプルなデモ アプリケーションである ImageLabeller を作成しました。

このページでは、GitHub で ImageLabeller をデプロイする方法について説明します。はじめに、ImageLabeller アーキテクチャ ページと AWS SageMaker のセットアップ ページをお読みの上、背景を確認することをお勧めします。

前提条件

GitHub 組織がまだ作成されていない場合は、この GitHub ガイドのステップに従って最初から組織を作成してください。

ImageLabeller のコードで公開されている GitHub リポジトリ

https://github.com/AtlassianOpenDevOpsGuides

Jira と GitHub を統合する

Jira から [ボード]、[アプリ]、[GitHub] の順にクリックします。

Jira のアプリ メニューで「GitHub」がハイライトされたスクリーンショット

[Get it now (今すぐ入手する)] をクリックします。

Jira の GitHub アプリの概要のスクリーンショット

[アプリ]、[アプリの管理] の順にクリックして [GitHub] を展開します。

Jira のアプリ管理ページのスクリーンショット

[始める] をクリックします。

Jira にユーザーがインストールしたアプリのスクリーンショット

[始める] をクリックします。

Jira の GitHub 設定プロセスのスクリーンショット

GitHub に Jira プラグインをインストールする

[Jira をインストール] をクリックして、Jira プラグインを GitHub にインストールします。このステップは、Jira プラグインが GitHub にまだインストールされていない場合に必要です。

GitHub の Jira プラグイン インストールのスクリーンショット

組織をクリックします。この例では PmmQuickStartGuides01 です。

Jira の Jira インストール プロセスのスクリーンショット

[インストール] をクリックします。

GitHub に Jira をインストールするスクリーンショットのパート 3

GitHub 組織を Jira に追加する

Jira に移動して [アプリ] 、[アプリを管理] の順にクリックし、[GitHub] を展開して [始める] をもう一度クリックします。

Jira のアプリ管理オプションのスクリーンショット

[組織を追加] をもう一度クリックします。今度は GitHub 組織が表示されます。[インストール] をクリックします。

プラグインのインストール後に Jira で組織を接続しているスクリーンショット

Jira は GitHub からのデータの同期を開始します。

GitHub の設定を行っている途中のスクリーンショット

同期が完了すると [同期ステータス] が [完了] に変わります。

GitHub の設定が完了したスクリーンショット

SSH アクセスをセットアップ

こちらの手順に従って、アカウントの GitHub SSH キーを設定します。その他の参考資料はここから参照できます。

パーソナル アクセス トークンをセットアップ

こちらのガイドに従って、パーソナル アクセス トークンを設定します。PAT は、統合テストのステップ中に SystemTest リポジトリのクローンを作成するために使用されます。PAT リポジトリワークフローのアクセス権を付与します。

AWS S3 インフラストラクチャ リポジトリを作成する

通常、標準開発者ループでは開発者は Jira からタスクを取り出して、それを進行中の作業に移動して開発作業を行います。Jira 課題 ID は、開発作業を Jira 課題に結びつけるキーです。これは、2 つのシステム間の中核となる統合コンポーネントです。

Jira に移動して、AWS S3 インフラストラクチャ リポジトリを GitHub に追加するための新しい課題を作成します。課題 ID を書き留めます。この例では「IM-9」です。

リポジトリ「s3_infra」を作成する Jira 課題のスクリーンショット

GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。

GitHub でリポジトリ「s3_infra」を作成するスクリーンショット

AWS アクセス キー リポジトリ変数を追加する

[設定]、[シークレット] の順にクリックします。[新しいリポジトリ シークレット] をクリックして、AWS アクセス キー ID と AWS シークレット アクセス キーを追加します。AWS アクセス キーに関連付けられた IAM ユーザーに、AdministratorAccess を付与します。個別の AWS アクセス ポリシーを選択することで、よりきめ細かなアクセス コントロールを使用できますが、詳細は自由に設定できます。

AWS アクセス キーを追加しているスクリーンショット

ターミナルで s3_infra リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。

1 2 3 4 5 git add --all git commit -m "IM-9 add s3_infra repository to github" git remote add origin git@github.com:PmmQuickStartGuides01/s3_infra.git git branch -m mainline git push -u origin mainline

AWS にデプロイするための GitHub アクション

ターミナルの s3_infra リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成し、.github/workflows ディレクトリの順に作成します。

1 2 git checkout -b IM-9 mkdir -p .github/workflows && cd .github/workflows

新しい .github/workflows ディレクトリで次の yaml を使用して、deploy-test-staging.yml を作成します。これによって、メインライン以外のブランチに対するプッシュ中に実行されるテスト環境とステージング環境のデプロイ ワークフローが定義されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 name: deploy-s3-infra-test-staging on: push: branches: - '*' - '!mainline' jobs: deploy-us-west-1: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsS3Infra template: template.yml no-fail-on-empty-changeset: "1" deploy-us-east-2: runs-on: ubuntu-latest needs: deploy-us-west-1 steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-east-2" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsS3Infra template: template.yml no-fail-on-empty-changeset: "1"

次に、次の yaml で deploy-prod.yml を作成します。これによって、プル リクエストが変更をメインラインにマージする際に実行される本番環境のデプロイ ワークフローが定義されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 name: deploy-s3-infra-prod on: pull_request: branches: - mainline jobs: deploy-us-west-2: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-2" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsS3Infra template: template.yml no-fail-on-empty-changeset: "1" deploy-ca-central-1: runs-on: ubuntu-latest needs: deploy-us-west-2 steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "ca-central-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsS3Infra template: template.yml no-fail-on-empty-changeset: "1" deploy-us-east-1: runs-on: ubuntu-latest needs: deploy-ca-central-1 steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-east-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsS3Infra template: template.yml no-fail-on-empty-changeset: "1"

GitHub アクションの理解

トリガー

これらのファイルの先頭でワークフローをトリガーするイベントを宣言します。deploy-test-staging.yml では、メインラインを除くすべてのブランチにイベントがプッシュされます。

1 2 3 4 5 6 name: deploy-s3-infra-test-staging on: push: branches: - '*' - '!mainline'

deploy-prod.yaml では、イベントは mainline ブランチへのプル リクエストです。

1 2 3 4 5 name: deploy-s3-infra-prod on: pull_request: branches: - mainline

多くのイベントでワークフローをトリガーできます。詳細については、こちらのドキュメントをご参照ください。

ジョブ

ワークフローには、イベントをトリガーした際に実行される多くのジョブがあります。各ジョブには、ジョブの実行時に実行される一連のステップがあります。この例では、リポジトリ コードをチェックアウトする、AWS 認証情報を設定する、AWS CloudFormation を使用して AWS にデプロイする各ステップがあります。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 jobs: deploy-us-west-1: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsS3Infra template: template.yml no-fail-on-empty-changeset: "1"

ジョブの詳細についてはこちらを、ステップの詳細についてはこちらをご覧ください。

ニーズで順序を強制する

ニーズを使用して、ジョブの順序を指定できます。初期設定では、GitHub はすべてのステップを並列に実行します。ニーズを使用して、あるステップを別のステップに依存させます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 deploy-us-east-1: runs-on: ubuntu-latest needs: deploy-ca-central-1 steps: - name: Checkout code uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-east-1" - name: Deploy to AWS CloudFormation uses: aws-actions/aws-cloudformation-github-deploy@v1 with: name: OpenDevOpsS3Infra template: template.yml no-fail-on-empty-changeset: "1"

フィーチャー ブランチにプッシュ

コマンド ラインから次のコマンドを実行して、コードを s3_infra リポジトリの IM-9 ブランチにプッシュします。

1 2 3 git add --all git commit -m "IM-9 add GitHub actions to s3_infra" git push -u origin IM-9

[アクション] をクリックして、実行中のワークフローを表示します。

GitHub で実行中のワークフローのスクリーンショット

プル リクエストの作成

[プル リクエスト]、[プル リクエストを作成] の順にクリックします。

GitHub の変更のスクリーンショット

ソース ブランチとしてフィーチャー ブランチを選択して [プル リクエストを作成] をクリックします。

GitHub のプル リクエストを開いているスクリーンショット

コードの変更を確認して [プル リクエストをマージ] をクリックし、変更を受け入れます。

GitHub のコード変更のスクリーンショット

[アクション] をクリックして、本番環境のデプロイが開始されたことを確認します。ブランチがメインラインであるため、GitHub は deploy-prod.yml のジョブを実行します。

GitHub の本番デプロイのスクリーンショット

SubmitImage AWS Lambda 用のリポジトリを作成する

Jira に移動して、SubmitImage AWS Lambda リポジトリを GitHub に追加するための新しい課題を作成します。Jira 課題 ID を書き留めます。この例では「IM-8」です。

GitHub でリポジトリ「submitimage」を作成する Jira 課題を追加するスクリーンショット

GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。

GitHub でリポジトリ「submitimage」を作成するスクリーンショット

[設定]、[シークレット] の順にクリックします。パーソナル アクセス トークンを ACCESS_KEY、AWS アクセス キー ID を AWS_ACCESS_KEY_ID、AWS シークレット アクセス キーを AWS_SECRET_ACCESS_KEY、AWS アカウント ID を AWS_ACCOUNT_ID として追加します。

GitHub でパーソナル アクセス キーを追加するスクリーンショット

ターミナルで SubmitImage リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。

1 2 3 4 5 git add --all git commit -m "IM-8 add SubmitImage to github" git remote add origin git@github.com:PmmQuickStartGuides01/submitImage.git git branch -m mainline git push -u origin mainline


AWS にデプロイするための GitHub アクション

ターミナルの SubmitImage リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成し、.github/workflowsディレクトリの順に作成します。

1 2 git checkout -b IM-8 mkdir -p .github/workflows && cd .github/workflows

新しい .github/workflows ディレクトリで次の yaml を使用して、deploy-test-staging.yml を作成します。これによって、メインライン以外のブランチに対するプッシュ中に実行されるテスト環境とステージング環境のデプロイ ワークフローが定義されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 name: deploy-submit-image-test-staging on: push: branches: - '*' - '!mainline' env: aws_account_id: ${{secrets.AWS_ACCOUNT_ID}} jobs: run-unit-tests: runs-on: ubuntu-latest steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Checkout code uses: actions/checkout@v2 - name: Test run: | cd ${{ github.workspace }}/submitImage ls go test ./opendevopslambda... deploy-us-west-1: runs-on: ubuntu-latest needs: run-unit-tests outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-1" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsSubmitImage" \ --s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-west-1: runs-on: ubuntu-latest needs: deploy-us-west-1 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-west-1" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-west-1 deploy-us-east-2: runs-on: ubuntu-latest needs: integration-test-us-west-1 outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-east-2" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsSubmitImage" \ --s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-east-2: runs-on: ubuntu-latest needs: deploy-us-east-2 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-east-2" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-east-2

次に、次の yaml で deploy-prod.yml を作成します。これによって、プル リクエストが変更をメインラインにマージする際に実行される本番環境のデプロイ ワークフローが定義されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 name: deploy-submit-image-prod on: pull_request: branches: - mainline env: aws_account_id: ${{secrets.AWS_ACCOUNT_ID}} jobs: deploy-us-west-2: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-2" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsSubmitImage" \ --s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-west-2: runs-on: ubuntu-latest needs: deploy-us-west-2 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-west-2" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-west-2 deploy-us-east-1: runs-on: ubuntu-latest needs: integration-test-us-west-2 outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-east-1" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsSubmitImage" \ --s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-east-1: runs-on: ubuntu-latest needs: deploy-us-east-1 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-east-1" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-east-1 deploy-ca-central-1: runs-on: ubuntu-latest needs: integration-test-us-east-1 outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "ca-central-1" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsSubmitImage" \ --s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-ca-central-1: runs-on: ubuntu-latest needs: deploy-ca-central-1 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "ca-central-1" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=ca-central-1

GitHub アクションの理解

このジョブでは、AWS SAM を使用して SubmitImage AWS Lambda を us-west-2 にデプロイします。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 deploy-us-west-2: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-2" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsSubmitImage" \ --s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM

このジョブでは、SystemTests リポジトリのクローンを作成して、us-west-2 で統合テストを実行します。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 integration-test-us-west-2: runs-on: ubuntu-latest needs: deploy-us-west-2 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-west-2" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-west-2

このステップでは、パーソナル アクセス トークンを使用して SystemTests リポジトリのクローンを作成します。

1 2 3 4 5 - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }}

フィーチャー ブランチにプッシュ

コマンド ラインから次のコマンドを実行して、SubmitImage リポジトリの IM-8 ブランチに変更をプッシュします。Jira 課題 ID とブランチ名をコミット メッセージに含めて、プロジェクトで何が起こっているかを Jira GitHub 統合で追跡できるようにします。

1 2 3 git add --all git commit -m "IM-8 add github actions to SubmitImage" git push -u origin IM-8

[アクション] をクリックして、実行中のワークフローを表示します。

GitHub で実行中のワークフローのスクリーンショット

ユニット テスト ジョブが合格して、Test us-west-1 へのデプロイが開始されたことを確認します。

GitHub で開始した実行中のワークフローのスクリーンショット

前に定義したシステム テストは、integration-test-us-west-1 ジョブと integration-test-us-east-2 ジョブの一部として実行されます。

実行中のワークフローのスクリーンショット

プル リクエストを作成する

プル リクエストを作成するには [プル リクエスト]、[新規プル リクエスト] の順にクリックします。

GitHub のプル リクエストのスクリーンショット

フィーチャー ブランチからマージを選択します。

GitHub のブランチ オプションのスクリーンショット

[プルリクエストの作成] をクリックします。

GitHub のプル リクエストを作成するスクリーンショット

プル リクエストをマージして、フィーチャー ブランチを削除します。[アクション] をクリックして、本番環境のデプロイを監視します。

GitHub のデプロイの監視のスクリーンショット

InvokeLabeller AWS Lambda のリポジトリを作成する

Jira に移動して、InvokeLabeller AWS Lambda リポジトリを GitHub に追加するための Jira 課題を作成します。Jira 課題 ID を書き留めます。この例では「IM-11」です。

リポジトリ「invokelabeller」を作成する Jira 課題のスクリーンショット

GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。

GitHub でリポジトリ「invokelabeller」を作成するスクリーンショット

[設定]、[シークレット] の順にクリックします。パーソナル アクセス トークンを ACCESS_KEY、AWS アクセス キー ID を AWS_ACCESS_KEY_ID、AWS シークレット アクセス キーを AWS_SECRET_ACCESS_KEY、AWS アカウント ID を AWS_ACCOUNT_ID として追加します。

GitHub でパーソナル アクセス キーを追加するスクリーンショット

ターミナルで InvokeLabeller リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。

1 2 3 4 5 git add --all git commit -m "IM-11 add InvokeLabeller to github" git remote add origin git@github.com:PmmQuickStartGuides01/InvokeLabeller.git git branch -m mainline git push -u origin mainline

AWS にデプロイするための GitHub アクション

ターミナルの InvokeLabeller リポジトリに移動して、Jira 課題 ID にちなんだ名前のブランチを作成し、.github/workflowsディレクトリの順に作成します。

1 2 git checkout -b IM-11 mkdir -p .github/workflows && cd .github/workflows

新しい .github/workflows ディレクトリで次の yaml を使用して、deploy-test-staging.yml を作成します。これによって、メインライン以外のブランチに対するプッシュ中に実行されるテスト環境とステージング環境のデプロイ ワークフローが定義されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 name: deploy-submit-image-test-staging on: push: branches: - '*' - '!mainline' env: aws_account_id: ${{secrets.AWS_ACCOUNT_ID}} jobs: run-unit-tests: runs-on: ubuntu-latest steps: - name: Checkout code uses: actions/checkout@v2 - uses: actions/setup-python@v2 with: python-version: '3.x' - name: Test run: | pip3 install pytest pip3 install moto pip3 install -r tst/requirements.txt --user python3 -m pytest -v tst/unit --junitxml=test-reports/report.xml deploy-us-west-1: runs-on: ubuntu-latest needs: run-unit-tests outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-1" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsImageLabeller" \ --s3-bucket "open-devops-code-us-west-1-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-west-1: runs-on: ubuntu-latest needs: deploy-us-west-1 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-west-1" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-west-1 deploy-us-east-2: runs-on: ubuntu-latest needs: integration-test-us-west-1 outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-east-2" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsImageLabeller" \ --s3-bucket "open-devops-code-us-east-2-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-east-2: runs-on: ubuntu-latest needs: deploy-us-east-2 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-east-2" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-east-2

次に、次の yaml で deploy-prod.yml を作成します。これによって、プル リクエストが変更をメインラインにマージする際に実行される本番環境のデプロイ ワークフローが定義されます。

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 name: deploy-submit-image-prod on: pull_request: branches: - mainline env: aws_account_id: ${{secrets.AWS_ACCOUNT_ID}} jobs: deploy-us-west-2: runs-on: ubuntu-latest outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-west-2" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsImageLabeller" \ --s3-bucket "open-devops-code-us-west-2-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-west-2: runs-on: ubuntu-latest needs: deploy-us-west-2 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-west-2" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-west-2 deploy-us-east-1: runs-on: ubuntu-latest needs: integration-test-us-west-2 outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "us-east-1" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsImageLabeller" \ --s3-bucket "open-devops-code-us-east-1-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-us-east-1: runs-on: ubuntu-latest needs: deploy-us-east-1 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "us-east-1" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=us-east-1 deploy-ca-central-1: runs-on: ubuntu-latest needs: integration-test-us-east-1 outputs: env-name: ${{ steps.env-name.outputs.environment }} steps: - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - uses: actions/checkout@v2 - name: Configure AWS credentials id: creds 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: "ca-central-1" - name: SAM Validate run: | sam --version sam validate - name: SAM Build run: | sam build - name: SAM Deploy continue-on-error: true run: | sam deploy --template-file .aws-sam/build/template.yaml \ --stack-name "OpenDevOpsImageLabeller" \ --s3-bucket "open-devops-code-ca-central-1-${aws_account_id}" \ --capabilities CAPABILITY_IAM CAPABILITY_NAMED_IAM integration-test-ca-central-1: runs-on: ubuntu-latest needs: deploy-ca-central-1 steps: - name: Pull systemTests repo uses: actions/checkout@master with: repository: PmmQuickStartGuides01/systemTests token: ${{ secrets.ACCESS_KEY }} - name: Configure AWS credentials id: creds 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: "ca-central-1" - name: Install Go uses: actions/setup-go@v2 with: go-version: 1.16.x - name: Run integration tests run: go test -v ./... -aws_region=ca-central-1

フィーチャー ブランチにプッシュ

コマンド ラインから次のコマンドを実行して、InvokeLabeller リポジトリの IM-11 ブランチに変更をプッシュします。Jira 課題 ID とブランチ名をコミット メッセージに含めて、プロジェクトで何が起こっているかを Jira GitHub 統合で追跡できるようにします。

1 2 3 git add --all git commit -m "IM-11 add github actions to InvokeLabeller" git push -u origin IM-11

[アクション] をクリックして、実行中のワークフローを表示します。前に定義したシステム テストは、integration-test-us-west-1 ジョブと integration-test-us-east-2 ジョブの一部として実行されます。

ラベラーを起動するための実行中のワークフローのスクリーンショット

プル リクエストを作成する

プル リクエストを作成するには [プル リクエスト]、[新規プル リクエスト] の順にクリックします。フィーチャー ブランチからマージを選択します。

GitHub の変更を比較しているスクリーンショット

[プル リクエストを作成] をクリックします。すべてのチェックが合格するのを待ってから、プル リクエストをマージしてフィーチャー ブランチを削除します。

GitHub のプル リクエストを作成するスクリーンショット

[アクション] をクリックして、本番環境のデプロイを監視します。

GitHub のデプロイのスクリーンショット

SystemTests のリポジトリを作成する

Jira に移動して、SystemTests リポジトリを GitHub に追加するための Jira 課題を作成します。Jira 課題 ID を書き留めます。この例では「IM-7」です。

リポジトリ「systemtests」を作成する Jira 課題を追加しているスクリーンショット

GitHub に移動して [新規] をクリックします。[所有者] に適切な組織を選択します。[リポジトリを作成] をクリックして続行します。

GitHub でリポジトリ「systemtests」を作成するスクリーンショット

ターミナルで SystemTests リポジトリに移動して、次のコマンドを実行してコードを GitHub にプッシュします。

1 2 3 4 5 git add --all git commit -m "IM-7 add SystemTests repository to GitHub" git remote add origin git@github.com:PmmQuickStartGuides01/systemTests.git git branch -M mainline git push -u origin mainline

SystemTests リポジトリには GitHub アクションは不要です。他のパイプラインを実行するためのテストを提供するため、独自のパイプラインはありません。ImageLabeller アプリケーションのすべてのコンポーネントをデプロイした後は、CI/CD ワークフロー ファイルの統合テスト ステップのコメント解除、コミット、プッシュが実行できます。アップデートされた CI/CD ワークフロー ファイルがプッシュされると、システム テストは初めてそれらを実行します。テストは、アプリケーションのすべてのコンポーネントが正常に動作している場合にのみ合格します。

おめでとうございます、これで完了です! ImageLabeller がデプロイできました。次のステップでは、Opsgenie で ImageLabeller の監視をセットアップします。

 

最終更新日 2021年09月24日)
次でキャッシュ 1:36 AM on Oct 19, 2021 |

その他のヘルプ