GitLab Self ManagedをCodePipelineのソースステージに設定する

# 1.はじめに
2024年7月にCodeCommitの新規利用廃止が発表されたことを受けて、今後のソースコード管理構成を考え直す機会がありました。今回はCodeCommitの代替として**GitLab Self Managed**を採用した場合のCodePipeline設定手順を載せます。
GitLab Self ManagedはEC2上でホストすることが可能であり、SaaS版のGitLabと比較すると、ソースコードを外部に持ち出す必要がないというセキュリティ面でのメリットがあります。

### 目次
1. [はじめに](#1はじめに)
1. [前提条件](#2前提条件)
1. [CodePipeline設定手順](#3codepipeline設定手順)
3-1. [ホストの作成](#3-1ホストの作成)
3-2. [接続の作成](#3-2接続の作成)
3-3. [CodePipelineの作成](#3-3codepipelineの設定)
1. [まとめ](#4まとめ)
1. [【番外編】GitLab個人用アクセストークンの取得方法](#5番外編gitlab個人用アクセストークンの取得方法)

# 2.前提条件
* 今回GitLab Self Managedは、EC2上にホストされている前提で話を進めていきます。
GitLabをこれからインストールする場合は以下の公式サイトを参考にしてください。

https://about.gitlab.com/ja-jp/install/#amazonlinux-2023

# 3.CodePipeline設定手順
まずは任意のユーザーでAWSマネジメントコンソールへログインしてください。
### 3-1.ホストの作成
▼デベロッパー用ツールのメニューバーから**接続**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/0cc41436-1125-0971-8491-4bb6dbcb28a4.png)

▼**ホストを作成**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/7d4e9c3e-3e2b-0fbe-0729-f23e8c447563.png)


▼必要な設定値を入力し、**ホストを作成**をクリックします。
* ホスト名：任意のホスト名
* プロバイダー：**GitLab Self Managed**
* URL：GitLab Self ManagedのURL
* VPC設定：非VPC

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/5b4df02c-f2a8-3328-910c-4eb5264f1bfd.png)

:::note warn
**注意**
ホストに登録できるURLは "https" のみになります。
"http" で登録した場合は【URL の形式が無効です。URL は「https://」で始める必要があります。】という警告が出るので注意しましょう。
:::

:::note 
**HTTPS接続の実現方法**
私はApplication Load Balancer (ALB) を作成することでHTTPS接続を実現しました。
* [ALBの作成手順はこちら](https://docs.aws.amazon.com/ja_jp/elasticloadbalancing/latest/application/create-application-load-balancer.html)

:::
▼ホストが作成されたら、**ホストをセットアップ**をクリックし、GitLab Self Managedとホストを同期させます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/59e2ef96-3798-1ecc-fdbf-ea6a49fed37e.png)


▼ここで個人用アクセストークンを求められます。アクセストークンはGitLab側で払い出したものを登録してください。
##### [GitLabのアクセストークン取得方法はこちら](#5番外編gitlab個人用アクセストークンの取得方法)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/2a448180-add1-47d6-89ef-74765fd774ca.png)

▼これでホストの設定は完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/26193e8e-04f8-3171-9304-b72e3f66a4cc.png)


### 3-2.接続の作成
続いて**接続**を作成していきます。
▼デベロッパー用ツールのメニューバーから接続を選択した後、接続タブを開きます。その後、**接続を作成**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/6d8f8c75-8c61-4f09-ed1b-259dcecf026a.png)


▼必要な項目を入力し、**GitLab Self Managedに接続**をクリックします。
* プロバイダー：GitLab Self Managed
* 接続名：任意の接続名
* URL：GitLabのURL
* ホストを選択：先程作成したホストを選択

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/3c1a40fc-3edd-bf80-2247-5a466070d633.png)

▼接続を作成したら、**保留中の接続を更新**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/4e39bf70-43ca-0dc2-4e27-90e389d0889f.png)

▼以下のようなウィンドウが立ち上がるので**Authorize～**をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/7c4fd52b-a9bf-c408-75f4-91a20ba67917.png)

▼ステータスが**利用可能**となっていれば設定完了です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/d2c9f683-ad81-12a6-664e-c24410101036.png)


### 3-3.CodePipelineの設定
個々からは、CodePipelineの設定を行っていきます。

▼デベロッパー用ツールのメニューバーから**パイプライン**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/aa92dedc-7fd6-9abc-7ff4-be66160b2a40.png)

▼**パイプラインの作成**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/6167caad-655f-bcb1-5c5a-872b006a1427.png)

▼**Build custom pipeline**を選択し、**次に**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/1ccb429c-5944-29d4-449a-6c65548dce58.png)

▼CodePipelineの作成に必要な設定値を入力し、**次へ**をクリックします。
* パイプライン名：任意のパイプライン名
* 実行モード：キュー（パイプラインV2が必須）
* サービスロール：新しいサービスロール

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/245178f7-f182-325f-c3a6-619f6dbca49e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/64d2bb44-7f40-637a-0d9a-3d27e3afb6c0.png)

▼ソースステージの設定を行い、**次に**をクリックします。
　今回はmainブランチへのプッシュをトリガーにします。
* ソースプロバイダー：**GitLab Self Managed**
* 接続：手順②で作成した**接続**を選択
* リポジトリ名：ソースステージとして登録したいリポジトリを選択
* デフォルトブランチ：任意のブランチを選択（今回はmainブランチを選択）

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/efcfef13-81a8-9da1-e864-6c6d07848167.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/cb38318c-d06c-612e-3e04-24ea2fd0c8c4.png)

▼今回はBuildステージを設定しないので、**ビルドステージをスキップ**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/c764eff6-f7c0-20bc-0762-40269fda68cf.png)

▼デプロイステージでは、デプロイ先をS3バケットにし、指定したバケット内にソースコードを展開します。デプロイ設定値を入力した後、**次に**をクリックします。
* デプロイプロバイダー：Amazon S3
* リージョン：デプロイ先のバケットが存在するリージョン
* 入力アーティファクト：SourceArtifact（デフォルト）
* バケット：デプロイ先のバケット名
* S3オブジェクトキー：バケット内に保存する時のファイル名を指定
※**デプロイする前にファイルを抽出する**にチェックを入れると、zipファイルが解凍された状態でデプロイされます。(詳しくはこちら）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/6cd96a92-28af-1a84-1d6c-28e1bf70a7f3.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/0758cb94-29f1-ef39-8f69-f24e0c2e9711.png)

▼最後に設定値を確認し、問題なければ**パイプラインを作成する**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/0fbf9f49-eccb-1e3a-9a99-be63bbf24d3f.png)
（中略）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/72d64165-1ea6-7bda-c899-be5a526957cb.png)

▼CodePipelineが作成に成功すると、ソースステージおよびデプロイステージで成功のステータスが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/2f863e22-5e19-5fd4-121d-5fb4aae341af.png)

▼デプロイ先のS3バケットを確認すると、zipファイルが作成されています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/a310567f-02a3-fe24-00ae-743cf1a80904.png)

設定手順は以上になります！

# 4.まとめ
今回GitLab Self ManagedをCodePipelineのソースステージに設定するまでの手順をまとめました。私の中では次の2点が設定するうえでの注意点になるのではないかと思います。
1. CodePipelineを作成する前に**ホスト**と**接続**を作成する必要がある。
    →GitLabの個人アクセストークンを間違えず登録する
1. ホストに登録できるURLは**HTTPS**のみが許可されている。
    →ALBを作成してGitLabサーバーの前に配置する

# 5.【番外編】GitLab個人用アクセストークンの取得方法

:::note info
##### ここからは個人用アクセストークンの取得方法について記載します。ホストのセットアップをする際に参考にしてください。
::: 
① GitLabにサインインしたら、ユーザーアイコンから**設定**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/159d438b-39ba-0be3-b735-26849628e56a.png)

②メニューバーから**Access Tokens**を選択します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/a454adf9-7168-1526-1cb9-fe14ba39d381.png)

③**新しいトークンを追加**をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/c76ca9d6-515f-d448-a551-19de50968ae4.png)

④任意のトークン名を入力し、**api**にチェックを入れた後、「パーソナルトークンを作成」をクリックします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/be6fd259-a60d-0a3d-bb3c-f5ae544ce1cc.png)

⑤作成したAccess Tokenをコピーします。
 ※Access Tokenは一度しか表示されないので、忘れずコピーしておきましょう。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3622083/0d39a465-e3b5-f7f5-a31e-0259119a0fa3.png)

⑥コピーしたAccess TokenをAWSの方で登録します。
　[AWS側の設定に戻る](#gitlabのアクセストークン取得方法はこちら)