2021/02/02インフラCI/CDを学ぶ-GitLab・GitLab Runner連携編
こんにちは、ライトウェルAnsibleチームの増田です。
前回の投稿から間があいてしまいました。。
今回のブログではインフラCI/CDの検証内容とGitLabとGitLab Runnerとの連携についてまとめていこうと思います。
検証の最終的なGOAL⚽
・Apacheをインストールして起動するPlaybookをCI/CDしてみること
検証に必要なもの
- GitLab
… コードの管理を行う、リモートリポジトリ - GitLab Runner
… リポジトリ更新等のトリガーを検知し、GitLab CI/CDと連携してジョブを実行、実行結果をGitLabに返す - molecule
… AnsibleのRoleのテストを行う - Docker
… moleculeで定義したテスト内容をDocker上のコンテナに対して実行する - Ansible Tower
… Playbookの管理や実行を行う、CDの工程で登場予定
検証環境概要

| OS | バージョン | 備考 | |
| GitLab | CentOS7.8 | 13.2.6-ee | |
| GitLab Runner | CentOS7.8 | 13.3.1 | |
| molecule | – | 3.2.0 | GitLab Runnerサーバと同居 |
| Docker Engine | – | 19.03.12 | GitLab Runnerサーバと同居 |
| Ansible | CentOS7.8 | 2.10.3 | |
| Ansible Tower | – | 3.8.0 | Ansibleサーバと同居 |
| 本番環境(想定) | CentOS7.7 | – |
<今回の検証内容イメージ>

- GitLabにプロジェクトを作成する
-
作成したプロジェクトとGitLab Runnerを連携させる
-
ansible-playbookを作成し、プロジェクトにプッシュしてみる
-
作成したansible-playbookに対してGitLab Runner上でansibleの静的解析ツール(ansible-lint)が実行されていることを確認する
GitLabとGitLab Runnerを連携してみる ※GitLab/GitLab Runnerの構築は割愛
1.GitLabにプロジェクトを作成する
- GitLabにログイン>Projects>New projectをクリックする。

- Project nameを入力し、Visibility Levelを選択する。ここではPrivateを選択。
Create projectをクリックする。

- プロジェクトの作成に成功したメッセージが表示される。

- Projects>Your Projectsより作成したProjectsを選択する。
「Command line instructions」を参考に、空のリポジトリをローカルにクローンする。
ここでは、「Create a new repository」を参考にした。

- ProjectsよりRunnerを登録するプロジェクトを選択。
左ペインよりSetting>CI/CD>Runnersより、GitLab Runnerの登録に必要な情報を確認する。

- GitLab Runnerサーバにログインし、登録作業を行う。
[root@localhost ~]# gitlab-runner register Runtime platform arch=amd64 os=linux pid=10921 revision=943fc252 version=13.7.0 Running in system-mode. Enter the GitLab instance URL (for example, https://gitlab.com/): http://172.16.186.208:50000/ #①で確認したGitLabのURLを入力 Enter the registration token: jXxWpXbS4aPHUKMXLvbG #①で確認したtokenを入力 Enter a description for the runner: [localhost.localdomain]: cicd test #ランナーの説明を入力 Enter tags for the runner (comma-separated): #ランナーのタグを入力(Enterでも可) Registering runner... succeeded runner=jXxWpXbS Enter an executor: parallels, virtualbox, docker+machine, shell, ssh, docker-ssh+machine, kubernetes, custom, docker, docker-ssh: shell #ジョブの実行方式を入力(ここではshellを選択) Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!
- Projects>Runnerを登録したプロジェクトを選択>Setting>CI/CD>RunnersでGitLabRunnerが登録されていることを確認する。

3.ansible-playbookを作成し、プロジェクトにプッシュしてみる
- ローカルリポジトリでapache_install.ymlを作成する。
---
- name: deploy httpd server
hosts: all
become: yes
tasks:
- name: install httpd
yum:
name: httpd
state: present
- name: start & enabled httpd
service:
name: httpd
state: started
enabled: yes
- ローカルリポジトリで.gitlab-ci.ymlを作成する。
※testステージでansible-lint(ansible静的解析ツール)を実行するため、
22行目に「ansible-lint apache_install.yml」を記載。
#stagesにはジョブのステージを定義する(何も定義しない場合はデフォルトでtestとなる)
#stagesに記載した順序でjobが実行される
#下記の場合はbuild → testの順でjobが実行される
stages:
- build
- test
#buildステージで実行する内容を定義する
build-job:
stage: build
script: #scriptオプションではRunner実行したいシェルスクリプトを記載する
- echo "Hello, $GITLAB_USER_LOGIN!"
#testステージで実行する内容を定義する
test-job:
stage: test
script:
- echo "This job tests something"
- date
- hostname
- git clone http://MailAddress:password@172.16.186.208:50000/Masuda/test_project_m.git
- ansible-lint apache_install.yml
- apache_install.ymlと.gitlab-ci.ymlをリモートリポジトリへPushする。
apache_install.ymlと.gitlab-ci.ymlが登録されていることを確認。

4.作成したansible-playbookに対してGitLab Runner上でansibleの静的解析ツール(ansible-lint)が実行されていることを確認する
- はじめにansible-lintが失敗した場合の動作を確認するため、
再度apache_install.ymlを編集しpushする。
インデントをずらして(11行目以降)、ansible-lintで失敗するように編集した。
---
- name: deploy httpd server
hosts: all
become: yes
tasks:
- name: install httpd
yum:
name: httpd
state: present
- name: start & enabled httpd
service:
name: httpd
state: started
enabled: yes
- GitLab Runnerがリポジトリの更新を検知し、パイプラインを実行している。
詳細を確認するため、三日月🌙マークをクリックまたは、左ペインよりC/ICD>pipelinesをクリックする。

- gitlab-ci.ymlに記載したbuildとtestのステージが実行され、
build-jobは成功、ansible-lintを実行するtest-jobが失敗している。

- 成功していたbuild-jobの実行状況はこんな感じ。

- test-jobの詳細を確認すると、狙い通りansble-lintでerrorとなっていた。11行目が指摘されている。

- 次にansible-lintが成功した場合の動作を確認するため、apache_install.ymlのインデントを修正しpushする。
- パイプラインのステータスがrunningからsuccessになったことを確認。
✓マークをクリックまたは左ペインよりC/ICD>pipelinesをクリックする。

- build-job、test-jobともに成功となっている。

- test-jobの詳細を確認。ansible-lintも成功となっていた。

- 以降も、リポジトリを更新するたびにパイプラインが実行されていることが確認できた。
GitLabとGitLab Runnerの連携は成功していると判断することにした。

今回はここまで
GitLabとGitLabRunnerの連携は、初心者の私でも問題なくできました◎
.gitlab-ci.ymlの書き方については、GitLabの公式ドキュメントなどを参考にしてみてください。
私もはじめはよく分からなかったですが、パイプラインが動いているところを見て
なんとなく.gitlab-ci.ymlの内容と動きについて把握することができました。
次回はmolecule部分を取り上げたいと思います。
おまけ
英語が苦手なので、GitLabのUIを日本語にします。
- 画面右上にあるアイコンを選択>Settings

- 左ペインよりPreferencesを選択>Localization>Languageで日本語を選択>Save Changes

- 設定が保存される。

- ブラウザを更新する。日本語に変わっている。

以上です。
<参考サイト>
@sky_jokerxx,”GitLabのgitlab-runnerを使えるようにするまでの備忘録”,
Qiita,2018/11/24,https://qiita.com/sky_jokerxx/items/2a264a0194a5cbc7bd12(2021/01/21アクセス)
nyameji,”GitLabRunnerを登録してGitLabCIを動かしてみる”,Hatena Blog 26歳からの文系プログラマーの備忘log,
http://nyameji.hatenablog.com/entry/2018/02/18/181445(2021/01/21アクセス)
岩田智哉,”GitLab RunnerでCI/CDしてみる(前編)”,Developers.IO produced by Classmethod,
https://dev.classmethod.jp/articles/gitlab-runner-ci-cd-1/(2021/01/21アクセス)
@yurano,”はじめてのGitLab-CI”,Qiita,2016/8/10,https://qiita.com/yurano/items/a7804d987ccff37b1a9d(2021/01/26アクセス)
作者不明,”【個人開発でGitLab】GitLab CIの概要と簡単な手順を紹介”,getechらぼ,2020/3/14,https://getech-lab.toniemon.com/gitlab-ci-basic/(2021/01/26アクセス)






