CodePipelineがGHEをサポートすることになった

# はじめに
* こんにちは ! KDDI アジャイル開発センターの小板橋です。
* この記事は、[KDDI Engineer Advent Calendar 2020](https://qiita.com/advent-calendar/2020/kddi_engineer)の17日目の記事となります。
* 2020/9/30に[AWS CodePipeline が GitHub Enterprise Server のサポートを開始する](https://aws.amazon.com/jp/about-aws/whats-new/2020/09/aws-codepipeline-supports-github-enterprise-server/)という発表がありましたが、このサポートによりCI/CDの仕組みについて見直そうとする方も多いのではないでしょうか。
* 本記事では、上記のような人、そもそもCodePipelineについて何だろうとなっている人のために、CodePipelineについてまとめたものとなっています。

# CodePipelineについて
## CodePipelineとは
* 開発、テスト、デプロイまでのプロセスを自動化するサービスです。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/a080c944-2632-1761-b4c7-9817968514b3.png" width="500px">

## 概念
* パイプラインは、ソフトウェアの変更がリリースプロセスをどのように通過するかを記述するワークフロー構造です。
* 各パイプラインは一連のStageで構成されています。

<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/563635/d670cddb-5342-4e5b-f2e1-f5d8214f768e.png" width="200px">

### Stage
* ステージは、ソースコードが構築され、テストが実行されるビルドステージである場合もあれば、コードをランタイム環境にデプロイするデプロイステージの場合もあります。
* 各ステージは、連続または並列のアクションで構成されています。

### Action
* アクションは、アプリケーションコードに対して実行される一連の操作であり、アクションがパイプライン内で指定されたポイントで実行されるように設定されます。
* 例えばこれには、インスタンスにアプリケーションをデプロイするためのアクションなどが含まれます。

### 使用できるAction
* CodePipelineのActionの種類は source、 build、 test、 deploy、 approval、および invoke(呼び出し)があります。

<table>
<tr>
  <th>Actionの種類</th>
  <th>有効なアクションプロバイダー</th>
</tr>
<tr>
  <td rowspan="4">source</td>
  <td>Amazon S3</td>
</tr>
<tr>
  <td>Amazon ECR</td>
<tr>
  <td>CodeCommit</td>
</tr>
<tr>
  <td>CodeStarSourceConnection (ビットバケット、 GitHub、 GHE)</td>
</tr>
<tr>
  <td rowspan="4">build</td>
  <td>CodeBuild</td>
</tr>
<tr>
  <td>カスタム CloudBees</td>
<tr>
  <td>カスタム Jenkins</td>
</tr>
<tr>
  <td>カスタム TeamCity</td>
</tr>
<tr>
  <td rowspan="8">Test</td>
  <td>CodeBuild</td>
</tr>
<tr>
  <td>AWS Device Farm</td>
<tr>
  <td>カスタム BlazeMeter</td>
</tr>
<tr>
  <td>ThirdParty GhostInspector</td>
</tr>
<tr>
  <td>カスタム Jenkins</td>
</tr>
<tr>
  <td>ThirdParty マイクロフォーカス StormRunner 負荷</td>
</tr>
<tr>
  <td>ThirdParty ヌーボラ</td>
</tr>
<tr>
  <td>ThirdParty ランスコープ</td>
</tr>
<tr>
  <td rowspan="11">Deploy</td>
  <td>Amazon S3</td>
</tr>
<tr>
  <td>AWS CloudFormation</td>
<tr>
  <td>CodeDeploy</td>
</tr>
<tr>
  <td>Amazon ECS</td>
</tr>
<tr>
  <td>Amazon ECS (Blue/Green) (これは CodeDeployToECS アクションです)</td>
</tr>
<tr>
  <td>Elastic Beanstalk</td>
</tr>
<tr>
  <td>AWS AppConfig</td>
</tr>
<tr>
  <td>AWS OpsWorks</td>
</tr>
<tr>
  <td>AWS Service Catalog</td>
</tr>
<tr>
  <td>Amazon Alexa</td>
</tr>
<tr>
  <td>カスタム XebiaLabs</td>
</tr>
<tr>
  <td>approval(承認)</td>
  <td>手動</td>
</tr>
<tr>
  <td rowspan="2">invoke(呼び出し)</td>
  <td>AWS Lambda</td>
</tr>
<tr>
  <td>AWS Step Functions</td>
</table>


**CodePipeline の一部のアクションタイプは、限定された AWS リージョンでの使用になるそうです。**

## CodePipelineでのパイプラインおよびステージ構造の要件
* 以下の要件を満たしていればCodePipelineを使用できます。

1.パイプラインに少なくとも 2 つのステージを含める必要がある。

2.パイプラインの最初のステージには、少なくとも 1 つのソースアクションが含まれている必要がある。

3.ソースアクションは、パイプラインの最初のステージにのみ含める。

4.各パイプラインのいずれかのステージには、必ずソースアクション以外のアクションを含めること。

5.パイプライン内の全てのステージ名は必ず一意であること。


# 参考
* [CodePipeline公式ドキュメント](https://docs.aws.amazon.com/ja_jp/codepipeline/latest/userguide/welcome.html)
* [AWS CodePipeline が GitHub Enterprise Server のサポートを開始](https://aws.amazon.com/jp/about-aws/whats-new/2020/09/aws-codepipeline-supports-github-enterprise-server/)