AWS CodePipeline が GitLabをサポートしたので使ってみた【Laravel】

AWSのCI/CDツールとしておなじみのCodeシリーズアップデート情報です。

CI/CDツールのCodePipelineがソースリポジトリとしてgitlabのサポートを開始

今回はCodePipelineを作りながらGitLabとのCI/CD実現してみます。

概要

CodePipelineとは

いわゆるCodeシリーズの一つ。
CI継続的デリバリーを担うサービスです。

CodeCommit, CodeBuild, CodeDeploy と連携してCI/CD環境を構築することができます。

AWSのCI/CD解説
BlackBelt AWS CodeStar_AWS CodePipeline

GitLabとは

GitHubと名称が似ていますが、サービス的にも同じようなものです。web上にリポジトリを作成してリソース管理できます。
Gitリポジトリ管理の分野においてGitHubに次ぐNo.2くらい有名なのではないでしょうか。

GitLab

CI/CD構築手順

GitLab側の作業 : GitLabでのリポジトリ作成

GitLabにリポジトリを作成する

まずは管理対象とするプロジェクトを作成します。
今回は「test-app」というプロジェクトを作成しました。

GitLabにてプロジェクトを作成

プロジェクトの作成が完了しました。

GitLabプロジェクト作成完了

GitLabにリソースをデプロイする

作成した空の「test-app」プロジェクトにリソースをデプロイします。
Gitツールなどを利用してデプロイします。方法は割愛。

今回はLaravelプロジェクトを作成しました。
おなじみのTOP画面が表示されるところまで準備ができたらデプロイを行います。

LaravelのTOP画面

AWS側の作業 : CodePipelineの作成

リソースのデプロイ先サーバを準備する

CodePipelineからデプロイできる先は限られるので、今回はElasticBeanstalkを利用します。

AWS ElasticBeanstalkの準備

この段階でアプリケーションコードに圧縮したLaravelプロジェクトのファイルをアップロードしておくと
動作確認が早くて便利です。

AWS CodePipelineからGitLabへの接続を作成する

ソースステージの追加画面で、ソースプロバイダから「GitLab」が選択できるようになったことが
今回のアップデートです。

GitLabを選択すると「GitLabに接続する」ボタンが押下できるようになります。
すでに設定済みであれば「接続」のプルダウンから選択できます。

CodePipelineソースステージの作成

「GitLabに接続する」ボタンを押下するとこちらの画面が表示されます。

接続名はAWS内での管理名称なのでわかりやすい名前を付けておきましょう。

GitLabへの接続画面

オレンジの「GitLabに接続する」ボタンを押下すると、GitLab側のログイン画面が表示されます。

ログインが完了するとAWS CodePipelineの画面に戻ってきます。

GitLabへのログイン画面

ログインが完了するとリポジトリやブランチ名をプルダウンから選択できるようになります。
先ほど作成した「test-app」リポジトリを選択します。

GitLabへの接続完了

デプロイ先を指定する

ソースの取得元が設定できたら、次はデプロイ先を指定します。
ここには先ほど作成した ElasticBeanstalk を設定します。

CodePipelineデプロイステージの設定

レビューまでスキップして設定を完了すると、すぐにCodePipelineが動き出します。

問題なく成功すれば、このように緑色のメッセージで「成功」と表示されます。

CodePipelineの作成完了

「ソース」「デプロイ」それぞれの横にも成功しましたという記述があります。エラーがあるとこちらに赤字で表示されます。
これで CodePipeline の設定が完了しました。

追加 CodeBuild でサーバの初期設定を行う

Laravelの環境を整備するには、サーバ上でいくつかコマンドを実行する必要がありますね。

コマンドはCodeBuildを使って実行するように設定を追加します。

CodeBuildの追加

ソースをS3に置くのが面倒だったので、そのままBuildspecを設定しました。

version: 0.2

phases:
  build:
    commands:
      - echo installing composer..
      - composer install
      - echo creating .env file..
      - cp .env.example .env
      - echo generating app key
      - php artisan key:generate

これでCI/CDの準備は完了です。

実際には上記のBuildspec ではうまくいきませんでした。原因は.envファイルが作成されなかったこと。
やむなくEC2サーバで直接.envファイルを作成しました。

gitlabにコミットしてみる

実際にGitLabにプッシュしたソースが反映されるかを確認します。

おなじみのLaravel Top画面にブログ名を差し込んでみました。

    <body class="antialiased">
    <h1>syun tech blog</h1>
        <div class="relative sm:flex sm:justify-center sm:items-center min-h-screen bg-dots-darker bg-center bg-gray-100 dark:bg-dots-lighter dark:bg-gray-900 selection:bg-red-500 selection:text-white">
            @if (Route::has('login'))
                <div class="sm:fixed sm:top-0 sm:right-0 p-6 text-right z-10">

ElasticBeanstalk のドメインにアクセスしてみます。

GirLabでのCI/CDテスト

実験結果

GirLabでのCI/CDテスト確認完了

分かりづらくて申し訳ないのですが、ちゃんと更新されています。

つまづきポイント

ElasticBeanstalk : No Default VPC

今回の本題とは違うところで一番躓いた
デフォルトVPCを削除した状態だと「-」を選択した際にEB環境構築エラーになるので注意

GitLab接続時 : 不明なエラーが発生しました

原因不明。しばらくすると表示されて接続先として選択できるようになる。
お茶でも飲んで少し待ちましょう。

GitLab接続 不明なエラー

CodeBuild : php version (7.4.33) does not satisfy that requirement

AmazonLinux2を選択していたらエラーがcomposer install でエラーが連発した。
php version (7.4.33) does not satisfy that requirement
え、、PHPのバージョン7.4なんですか。これも原因を突き止めるのに地味に時間がかかった。
解決策はubuntuを使うこと。

総括

AWS PipelineにてGitLab連携ができるようになったので、いい機会ということでAWS PipelineでのCI/CD構築含めて整理してみました。
試験の知識だけでは実際の業務に活かしきれないこともしばしばありますので、実際にハンズオンして理解を深めることが大事ですね。
ちなみにCodeStarではソースリポジトリにGitLabは選択できませんでした。今後の機能拡張に期待です。

コメントを残す