Alibaba CloudでCI/CD pipelineを構築するbest practice(1)_全体

# CI/CDとは
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/6fee4f91-e0ce-95cf-288f-9af01ee3d974.png)
「CI/CD」とは、ソフトウェア開発におけるビルドやテスト・デリバリー・デプロイメントを自動化し、継続的に行うアプローチを指す名称です。
- CI：
    - 「Continuous Integration（継続的インテグレーション）」の略語
    - テストや静的コード解析などの作業を自動化し、継続的に実行する手法
- CD：
    - CD（Continuous Delivery）の略後
    - CIを拡張した手法ともいわれます。何故ならステージング環境や本番環境へのデプロイは、CIで自動化した作業の次に引き続き行われるようになっているからです。


## リリースプロセスに求められる 4 つのフェーズ：
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/a156dd26-9d63-c926-4400-5504d9e013e5.png)
かんたんに言うと、
- Source→Build→TestまではCI
- Source→Build→Test→DeployまではCD


# AWSでのCI/CD
AWSではCodeシリーズを利用して、CI/CDを構築するのは一般的です。
- CodeCommit：ソースコードを管理するGitリポジトリサービス
- CodeBuild：ソースコードのビルド/テスティングサービス
- CodeDeploy：ビルドされたモジュールのデプロイサービス
- CodePipeline：継続的デリバリー/継続的インテグレーションをサポートするサービス
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/2d1766c9-120c-724e-eda7-0ae3db5a331a.png)

詳細内容は以下の記事をご参考ください。

https://qiita.com/leomaro7/items/41cbe8aa7c32298ec665

# alibaba cloudでのCI/CD
- alibaba cloudの純正のDevOps Pipeline：
    - まだ正式にリリースされていなくて、日本語の資料もまだすくないため、テスト的に試してみてみいいのですが、本番利用ではやはり現時点では避けたほうが無難でしょう。

https://www.alibabacloud.com/product/apsara-deveops/flow

- third partyのCI/CDツール：大きく分けて「Self-Managed型型」と「クラウド型」があり、それぞれ以下のツールが有名です。
    - Self-Managed型：利用者自身のオンプレミスまたはクラウド環境((例：AWSのEC2)にインストールして利用します。
        サーバーは自分たちで運用、管理する必要がありますが、基盤周り含めて自由度が高いのがメリット
        - Jenkins：それ単体ではできることが限られますが、豊富なプラグインがあり、独自のカスタマイズが可能
        - GitLab Self-Managed instance CI/CD
        - Github EnterpriseのGithub Actions
    - クラウド型(SaaS型)：
        - CircleCI
        - Github Actions
        - AWS CodeBuild
        - Travis CI
:::note info
GithubとGitlbはそもそもそれぞれSelf-Managed型とクラウド型の２つの種類があるため、CI/CDのツールも２つの種類を持っています。
:::

Jenkinsはそれ単体ではできることが限られますが、豊富なプラグインがあり、独自のカスタマイズが可能というメリットがあります。
しかし扱うプロダクトが巨大化してくると, Jenkinsのパイプライン/サーバーの保守管理が特定のメンバー(いわゆる「Jenkins職人」)しかできなくなるという属人性も問題視されるようになってきました。
CircleCIやGithub Actionsなどのクラウド型のCI/CDツールはその性質上「Infrastructure as Code」を(ほぼ)強制するので, Jenkinsよりも属人化するリスクが低いと言われています。
この二三年ではjenkinsよりCircleCIやGithub Actionsを始めとするクラウド型のCI/CDツールはシャアはかなり拡大しているようです。
Alibaba Cloudと連携するには、どのthird partyのCI/CDツールを使っても問題ありません。
この記事ではJenkisとCircleCIに的を絞って解説していきます。

## Jenkins
それ単体ではできることが限られますが、豊富なプラグインがあり、独自のカスタマイズが可能です。
以下の流れで実行します。
1. code repoにpushすると、WebhookによりJenkisへ通知が送られる
1. Jenkins上で自動ストを行う
1. Jenkis上でdocker imageをbuild（作成する）
1. build済みのdokker imageをAlibaba Container Registryにpushされる
1. Helm deployでAlibaba Container Registryからdocker imageをpullして、K8Sにデプロイする。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/28664/1363a479-3bab-4fa1-5c01-985b45593866.png)

## CircleCI
実はCircleCIには「CircleCI Cloud」と「CircleCI Server」の2種類が提供されています。「CircleCI Cloud」がSaaS型のクラウドサービスです。
### CircleCIでできること
- テスト・ビルド・デプロイの自動化
「CI/CDツールでできること」で触れた3つの自動化です。これがCircleCIのメインの機能となります。
- VCS（バージョン管理システム）連携
    - CircleCIはGitHub・BitbucketなどのGitホスティングサービスを利用します。
    - テスト・ビルド・デプロイ対象となるソースコードに対する変更が行われると、GitHubがCircleCIに通知を送るのです。
    - 通知を受けたCircleCIは変更後のソースコードを取得し、あらかじめ設定された自動化スクリプトを実行します。
- 各種通知ツールとの連携
    - Slackなどのチャット通知、メール通知、ブラウザのプッシュ通知などが利用できます。
    - これで時間がかかるテストの終了を確認しに行く必要はなくなり、他の開発作業に集中して取り組めるようになります。
    - またチャットツールでテスト結果やデプロイ状況をプロジェクトメンバーと共有し、常に最新の情報を周知するようにしておくと非常に便利です。

### 料金
CircleCIの無料枠は1カ月あたり6000分のビルド時間

https://circleci.com/ja/pricing/

### AWS CodeBuildからCircleCIへの移行方法
https://circleci.com/docs/ja/migrating-from-aws/

### alibaba cloud上でCircleCIを利用してCI/CDのpipelineを構築する詳細手順

https://qiita.com/dennis_wang/private/8b6ce8436c0fd9c2260a