Gitlabにpush後GitLab RunnerでWebアプリを自動デプロイする

gitlab runner and gitlab on docker プログラミング
プログラミング

今回は、WebアプリのソースコードをGitLabにpushしたら、GitLab RunnerがWebアプリをコンテナ上にデプロイするというCICDの流れを動かしてみます。

前提

  • GitLabサーバーが構築済み
  • GitLab RunnerがGitLabに登録済み

GitLab RunnerをGitLabに登録する方法は以下を参照してください。

構成

以下のような構成になります。

GitLabへWebアプリのソースコードをpushすると、GitLab Runnerが起動して、Webアプリをデプロイするという流れになっています。

実現したい流れは、以下の通りです。

  1. WebアプリのソースコードをGitLabにpush
  2. パイプラインが動いて、GitLab Runnerを起動
  3. GitLab RunnerからホストのDockerへコマンドを実行
  4. WebアプリがDockerホスト上にデプロイされる

各OS・アプリケーションのバージョン情報

  • Ubuntu Server: 18.04
  • Docker version 19.03.8, build afacb8b7f0
  • GitLabサーバー: 11.11.8
  • GitLab Runner: 12.10.0

GitLab Runnerを使ってコンテナをビルドする

以下の作業は、GitLabサーバーに接続できる開発環境などで実施します。

Gitプロジェクトを作成します。

$ mkdir hello-cicd && cd hello-cicd
$ git init

Apacheのコンテナが起動するdocker-compose.ymlを作成します。

$ vi docker-compose.yml
web-server:
  image: httpd
  container_name: "web-server"
  ports:
    - "8003:80"

.gitlab-ci.ymlを作成します。

$ vi .gitlab-ci.yml
before_script:
  - docker info
  - apk update
  - apk upgrade
  - apk add py-pip
  - apk add python3-dev libffi-dev openssl-dev gcc libc-dev make
  - pip install docker-compose
build:
  tags:
    - docker
  script:
    - docker-compose down
    - docker-compose up -d

RunnerがApacheのコンテナを立ち上げるようにしています。

buildのtagsに、GitLab Runner登録時のタグを指定すると、狙ったrunnerにdeployさせることができます。

GitLabサーバーにpushします。

$ git add .
$ git commit -m "test runner"
$ git push origin master

pushすると、パイプラインが実行され、ジョブが走り始めるはずです。
次の章で確認してみましょう。

パイプラインの確認

パイプライン一覧を表示します。

GitLabサーバー > プロジェクト > CI/CD > パイプライン 
パイプラインを確認

パイプラインを選択すると、ジョブの状況が確認できます。

パイプライン詳細画面ではジョブの状況が確認できます。

ジョブを選択すると、ジョブの詳細画面が開きます。

ジョブ詳細画面では、コンテナのコンソールなどが確認できます。

コンテナのコンソールログも確認できます。

デプロイ確認

最後に、きちんとApacheサーバーが立ち上がっているか、ブラウザでアクセスして確認してみましょう。

今回の例で作成したdocker-compose.ymlでは、以下のURLでアクセスできます。

http://[ホストのアドレス]:8003 

以下のような画面が表示されれば、デプロイ成功です。

デプロイしたWeb Serverのコンテナにブラウザでアクセス出来たら、デプロイ成功です。

まとめ

今回は、Webアプリケーション作成時のCI/CDの流れを想定して、GitLabへプログラムをpushした後、GitLab RunnerでWebアプリケーションを自動でデプロイする方法について説明しました。

次回は、AngularJSなど本格的なWebアプリケーションフレームワークを使って、より実践的なCI/CDを試してみたいと思います。

参考

tagをつけて狙ったrunnerにデプロイする

Activated specific runner is not working
Can run untagged jobs: no and you have a tag ansible for this runner. Your jobs don’t have any tags specified, you sh...

コメント

タイトルとURLをコピーしました