概要
表題の通り
でGitLabからCodeCommitにミラーリング設定を行った。
次にGitLabに大量のリポジトリが必要となることを想定し、自動で作れるようにしたい。やり直すことも考えて削除も行えるようにしたい。
しかし、AWSのサービスではないGitLabとCodeBuildを連携するのは認証部分でハードルが高いので、まずはCodeCommitとCodeBuildを連携させることにする
CodeCommitで作業用リポジトリを作成する
このリポジトリにリポジトリの作成、削除に必要なファイルを格納する。
リポジトリ(プロジェクト)作成
- http://35.75.155.254/gitlab を開く。ログインする
- NewGroupを作成 ※すでにあるグループを使う場合はskipします
- Create group(画面名)
- Group name
-
hello
(任意です)
-
- Visibility level
-
public
(業務ではprivateかもしれない)
-
- Group name
- Create group(画面名)
- NewGProjectを作成
- Create blank project(画面名)
- Project name
-
project_create
※ここにdelete用のコードも置きます
-
- Visibility level
-
public
(業務ではprivateかもしれない)
-
- Project name
- Create blank project(画面名)
ここでプロジェクトのProject IDを控えておく
Setting->Generalで確認可能
CodeCommitで使うコード
project_createプロジェクト(リポジトリ)に以下のコードを登録する
https://github.com/tmoritoki0227/gitlab_project_create
- 変更が必要な個所
-
create_project.sh
- NAMESPACE_ID # グループのID
-
delete_project_all.sh
- $project_id ※削除したくないGitLabのプロジェクト(リポジトリ)をif文で指定する必要あり
-
SSMを作成
gitlabとgitlabのtokenをパラメータ化する
- AWS Systems Managerの画面を開く→左メニューのパラメータストアをクリック→パラメータの作成をクリック
-
パラメータを作成 (画面名)
- 名前
- gitlab_access_token
- 利用枠
- 標準
- タイプ
- 文字列 ※業務では安全な文字列を選択だと思う
- データ型
- text
- 値
- (gitlabで取得したtokenを張り付ける)
- 名前
-
パラメータを作成 (画面名)
- 名前
- gitlab_url
- 利用枠
- 標準
- タイプ
- 文字列
- データ型
- text
- 値
- (ElasticIPを張り付ける)
- 名前
-
※これらはbuildspec.yamlに設定することで環境変数になる
IAMロールを作成
CodeBUildで利用するロールを作成する。
- IAMの画面を開く→左メニューのロールをクリック→ロールの作成をクリック
- 信頼されたエンティティを選択 (画面名)
- 信頼されたエンティティタイプ
- AWS のサービス
- ユースケース
- サービスまたはユースケース
- CodeBuild
- ユースケース
- CodeBuild
- サービスまたはユースケース
- 信頼されたエンティティタイプ
- 許可を追加(画面名)
- 許可ポリシー
- AWSCodeBuildDeveloperAccess
- AmazonSSMReadOnlyAccess
- AmazonS3FullAccess ※ログ出力用
- CloudWatchEventsFullAccess ※ログ出力用
- CloudWatchLogsFullAccess ※ログ出力用
- 許可ポリシー
- 名前、確認、および作成(画面名)
- ロール名
- gitlab_project_create ※deleteのときも使うロールです
- ロール名
- 信頼されたエンティティを選択 (画面名)
CodeBuildの作成
project_create
と project_delete
の2つのプロジェクトを作成する
- CodeBuildの画面を開く→
プロジェクトを作成
をクリック- プロジェクトを編集する(画面名)
- プロジェクトの設定
project_create
- ソース
- ソースプロバイダ
AWS CodeCommit
- リポジトリ
project_create
- リファレンスタイプ
ブランチ
- ブランチ
-
master
※mainではない
-
- ソースプロバイダ
- 環境
- プロビジョニングモデル
オンデマンド
- 環境イメージ
マネージド型イメージ
- コンピューティング
-
EC2
※今回シェルスクリプトを使うので、lambdaでは実行できないはず
-
- オペレーティングシステム
-
Ubuntu
※前回Ubuntuで動作したから
-
- ランタイム
Standard
- イメージ
-
aws/codebuild/standard:7.0
※最新を選ぶ
-
- イメージのバージョン
-
aws/codebuild/standard:7.0-2.4.05.15
※最新を選ぶ
-
- サービスロール
- 既存のサービスロール
- ロール名
- gitlab_project_create
- プロビジョニングモデル
- Buildspec
- ビルド仕様
buildspec ファイルを使用する
- Buildspec 名
buildspec_create.yml
- ビルド仕様
- バッチ設定
- (設定なし)
- アーティファクト ※設定不要。ビルドによって作成するもの成果物はない
- タイプ
- アーティファクトなし
- タイプ
- ログ ※デフォルトのままでOK。監視に使わないので違和感はあるがこれでログは見れる
- CloudWatch
- CloudWatch Logs - オプショナル
- チェックを入れる
- CloudWatch Logs - オプショナル
- S3 ※この設定を入れると画面にビルドログが表示されずS3に保存される形式になるので、軽量なジョブでは使いずらい
- S3 ログ - オプショナル
- チェックを入れない
- S3 ログ - オプショナル
- CloudWatch
- サービスロールのアクセス許可
- プロジェクトの設定
- プロジェクトを編集する(画面名)※書いてないところは
project_create
と同じなので省略- プロジェクトの設定
project_delete
- Buildspec
- ビルド仕様
buildspec ファイルを使用する
- Buildspec 名
buildspec_delete.yml
- ビルド仕様
- プロジェクトの設定
- プロジェクトを編集する(画面名)
gitメモ
git config --global credential.helper 'cache --timeout=3600' # 1時間