リポジトリクローンを使わずに、CodeBuild上で他リポジトリブランチを取得する方法

いつも記事を読んでいただきありがとうございます！
モブエンジニア（[@mob-engineer](https://qiita.com/mob_engineer))です！

本日は業務内で見つけた**リポジトリクローンを使わずに、CodeBuild上で他リポジトリソースを取得する方法**についてまとめたいと思います。

:::note info
○本記事で記載すること
- CodeBuild、CodePipelineを用いた基本操作
- CodeBuildを用いた複数リポジトリの取得方法
- CodeBuildで用いるビルド環境変数

○本記事で記載しないこと
- CodeCommit,CodeBuild,CodeDeploy,Codepipelineの詳細説明
- 応用的なIaC環境構築方法 
:::

# 目次
1. 今回のゴール
1. CodeBuild設定
1. CodePipeline設定
1. 構築環境を動かしてみる
1. まとめ

## 今回のゴール
今回のゴールとして**Buildspecでgit cloneを行わずに他リポジトリのブランチを取得する**です！
git cloneで他リポジトリのブランチを取得する方法でもいいのですが、**PAT認証設定**や**GitHub Appsの設定**を行う必要があるため、**できるだけ楽な方法**を取りたいと思ったのが今回のきっかけです。

## CodeBuild設定
まずは、CodeBuild設定を行っていきましょう。

::: note info
GitHub環境については以下の通りです。
○プライマリリポジトリ：hogehoge
○セカンダリリポジトリ：hugahuga

![スクリーンショット 2024-10-28 215017.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c09b6d77-d7c2-9a15-94e2-5657803620bd.png)

○hogehogeリポジトリの中身

![スクリーンショット 2024-10-28 215122.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/a038f252-eb73-3154-baae-97a4af0ed67f.png)

○hugahugaリポジトリの中身

![スクリーンショット 2024-10-28 215202.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/612df0e0-3dbe-42b8-ee2a-6222bead856b.png)

:::

- 上部検索ボックスに**CodeBuild**と入力し、結果をクリック

![スクリーンショット 2024-10-28 214430.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/6aec2346-4cac-5732-26fa-7477c5cc0877.png)

- CodeBuild画面へ遷移するため、**プロジェクトを作成する**ボタンをクリック

![スクリーンショット 2024-10-28 214530.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/1aaf02b8-4ac1-8a0a-8a57-98694e774573.png)

- ビルドプロジェクト作成画面が表示されるため、プロジェクト名を入力する（今回は検証用のため**Test**と入力しておく）

![スクリーンショット 2024-10-28 214750.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/9c85e9c4-4340-2cc5-cf89-77ee158ba9c1.png)

- **ソース1 - プライマリ**下部の**ソースプロバイダ**のプルダウンをクリックし**GitHub**をクリック

![スクリーンショット 2024-10-28 215240.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/53c690a1-c354-3d14-1b90-59dabcf79bcd.png)

- **デフォルトソース認証情報を管理**ボタンをクリック

![スクリーンショット 2024-10-28 215455.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/2247baf9-47b2-3170-72c2-236f5bf48812.png)

- 青文字リンク**CodeConnections 経由で新しい GitHub**をクリック

![スクリーンショット 2024-10-28 220049.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8f4345e9-de70-fb42-ee24-a3b49f713728.png)

- GitHub アプリ接続を作成する下部の**接続名**を入力し**接続**ボタンをクリック（検証のためTestと入力）

![スクリーンショット 2024-10-28 220213.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/4e4a726e-278d-9da0-87b7-596268d1ea21.png)

- GitHubの画面が表示されるため、**Authorize AWS Connector for GitHub**ボタンをクリック

![スクリーンショット 2024-10-28 220348.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/2399344e-01de-2581-dfbb-fe437e0480d9.png)

- AWS画面に遷移するため**新しいアプリをインストールする**ボタンをクリック

![スクリーンショット 2024-10-28 220645 - コピー.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/50d0f49d-e896-07f6-6733-901a7158c08e.png)

- GitHub画面へ遷移するため**install & Authorize**ボタンをクリック

![スクリーンショット 2024-10-28 221129.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/a349c86b-ae70-aaae-2a94-6ec31e7eb255.png)

- デフォルトソース認証情報を管理画面に戻るため、**接続**下部のプルダウンをクリックし、先ほど作成した接続名をクリック。そのあと、**保存**ボタンをクリック
- 
![スクリーンショット 2024-10-28 221447.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/fc89b121-9ff3-0d5a-d1c7-472eb38f44fa.png)

- **AWS が管理する GitHub アプリを使用して正常に接続されました**の表示を確認後、リポジトリより**hogehoge**をクリック

![スクリーンショット 2024-10-28 221808.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/c7e55254-0615-1927-83b3-3d494686419a.png)

- とりあえず、hogehogeリポジトリの設定が完了しました。hugahugaリポジトリも設定するために**ソースの追加**ボタンを押しましょう


- ソース2下部の**ソース識別子**にhugahugaを入力※このあとのBuildspec設定で利用します
![スクリーンショット 2024-10-28 222053.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/4748f01c-d2d1-61f5-31e0-3fc44cbf0938.png)

- hogehogeリポジトリの設定と同じhugahugaリポジトリを設定しましょう

- Buildspecの表示までスクロールし**buildspec ファイルを使用する**左側のラジオボタンをクリックし、buildspec名の入力ボックスに**buildspec.yml**と入力する

![スクリーンショット 2024-10-28 222337.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/2095cf15-de83-5755-3b78-2179cae343b0.png)

- 最下部の**ビルドプロジェクトを作成する**ボタンをクリックする

![スクリーンショット 2024-10-28 222746.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8030c800-efd7-1ba9-3085-edcad2748a2f.png)

- ビルドプロジェクトにTestが追加されていることを確認し、左側ペインのCodePipelineをクリック

![スクリーンショット 2024-10-28 222917.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8166b94f-9220-a5ce-4e86-661772b2e985.png)

## CodePipeline設定

- 上部の**パイプラインを作成する**ボタンをクリック

![スクリーンショット 2024-10-28 223041.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/6dbcd501-d0ba-ee5b-f356-b58b08100bef.png)

- CodePipeline設定画面が表示されるため、**Build custom pipeline**左側のラジオボタンをクリックし、**次へ**ボタンをクリック

![スクリーンショット 2024-10-28 223119.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/8b7bc7c6-2520-46bb-89d9-c23fe1b3faec.png)

- パイプライン名を入力する（検証用のためTest）。それ以外はデフォルト設定でいいので、最下部の**次へ**ボタンをクリック

![スクリーンショット 2024-10-28 223229.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/cab0f4d1-53c5-d2ab-4bdc-b7ae39a4abba.png)

- ソースプロバイダー下部のプルダウンをクリックし、**GitHub（バージョン2）**をクリック

![スクリーンショット 2024-10-28 223417.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/66b6a753-9752-21d3-7d03-20ffd7a7d4f6.png)

- **接続**、**リポジトリ名**および**デフォルトブランチ**を適宜設定。設定後、**次へ**ボタンをクリック

![スクリーンショット 2024-10-28 223606.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/7b51be3f-c34a-45fa-3bd4-20feb02b8f29.png)

- CodeBuild設定が求められるため、前の手順で作成したビルドプロジェクトを設定し、**次へ**ボタンをクリック

![スクリーンショット 2024-10-28 223837.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/d5cb4131-c05a-4349-dadd-6dd3a1fb27bd.png)

- CodeDeploy設定画面が表示されるが、今回の要件では設定不要のため、**導入段階をスキップ**ボタンをクリック

![スクリーンショット 2024-10-28 224131.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/51b947fc-46de-f64e-95b1-f5602ff8cbe1.png)

- 内容を確認し問題なければ、最下部の**パイプラインを作成する**ボタンをクリック

![スクリーンショット 2024-10-28 224233.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/78c67133-cd8f-2e60-66c9-17d0a6b578dc.png)

:::note info
上記設定でいったんCodeBuildとCodePipelineの設定が完了しましたが、hogehogeリポジトリにbuildspec.ymlを作成しないとパイプラインが失敗してしまいます。

![スクリーンショット 2024-10-28 224829.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/24f75e7d-e793-ebaa-1426-ac751dc78dee.png)

buildspec.ymlとして以下を作成します

```yaml
version: 0.2

phases:
  install:
    commands:
      - echo "Starting build process..."
  pre_build:
    commands:
      - echo "Copying secondary source files..."
      - cp -r $CODEBUILD_SRC_DIR_hugahuga/* .
      - echo "Files copied successfully."

  build:
    commands:
      - echo "Listing files in the current directory:"
      - ls -la

post_build:
    commands:
      - echo "Build process complete."
```
:::

## 構築環境を動かしてみる
一旦環境構築が完了したので、hogehogeリポジトリでCommitを行い、CodePipelineが動いているか確認しよう。

![スクリーンショット 2024-10-28 225451.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/dba3e129-bfd6-8fba-f885-e73c9f22747c.png)

とりあえず、Pipelineは成功しているようですね。ログを見て、hogehogeリポジトリとhugahugaリポジトリの中身が双方はいっているか確認しよう。

![スクリーンショット 2024-10-28 225539.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3846878/60a3bd46-e5a6-23af-38c1-0526ff524cbf.png)

入っている！！！
とりあえず、今回のゴールは達成できたな！！

## まとめ
今回は**リポジトリクローンを使わずに、CodeBuild上で他リポジトリブランチを取得する方法**を簡単にまとめてみました。git cloneを使わずにCodeBuildの設定だけで複数リポジトリを取り込むことができるのは、運用視点で**オイシイ**印象を持ちました。

そのうえで、そこまでページ数が多くない手順でしたが思いのほか作成時間がかかったので、**要点をまとめながら作成すること**が今後の課題かなぁと思いました！（AWSは奥深い～～）

## 参考サイト
[AWS Buildspecユーザガイド](https://docs.aws.amazon.com/codebuild/)
[【初心者】CodeCommit, CodeDeploy, CodePipeline を使ってみる](https://qiita.com/mksamba/items/63c87ca7e910eef1e843)

:::note info
最後まで記事を読んでいただきありがとうございます<m(__)m>
本技術ブログは**読者**あってだと個人的に感じております。

読んでみて、「参考になった」と思った方は**いいね**と**ストック**をお願いいたします<m(__)m>
引き続き、AWS含め、様々な技術に関するナレッジを共有したいと思います！
:::