Upgrade to Pro — share decks privately, control downloads, hide ads and more …

GitLabでCI/CDを動かしてみよう

 GitLabでCI/CDを動かしてみよう

CI/CDってよく聞くけれど、実はどうやって動いているのか分からない人のためのGitLab CI/CD入門勉強会を開催します。今回の勉強会では、GitLabを使ってCI/CDを実際に動かしながら、その仕組みや使い方を丁寧に解説します。GitLab本体のセットアップ方法から始めて、ランナーの登録やYAMLファイルの基本的な書き方、ジョブとパイプラインの構成、よく使われる実例までを順を追って紹介します。自動化の基礎を身につけたい初心者や、CI/CDに一歩踏み出したいエンジニアにおすすめの内容です。

Avatar for とことんDevOps

とことんDevOps

June 26, 2025
Tweet

More Decks by とことんDevOps

Other Decks in Technology

Transcript

  1. GitLab • GitLab Inc.が開発したウェブ型のGitリポジトリマネージャ • オープンソースで開発 • 商⽤版とコミュニティ版がある • GitHubみたいなサービスを⾃分で運⽤できる(※)

    • Issue管理 • プルリクエスト(Gitlabではマージリクエスト) • Wiki • CI/CD • ※GitLab⾃⾝がGitHubのようにサービスとしても提供 4
  2. CI/CDとは • 以下の略称 • Continuous Integration(継続的インテグレーション) • Continuous Delivery(継続的デリバリー) •

    もしくはContinuous Deploy(継続的デプロイ) • アプリケーションの構築・テスト・展開を ⾃動化していくうえでの⼿法 5
  3. CIのようす 7 リポジトリ の メインライン ビルド テスト (4)マージ (1)作業ブラ ンチ作成

    (2)開発もしくはテスト 結果に応じた修正 (3)プッシュ ビルド テスト ビルド テスト ビルド/テスト 定期実⾏もアリ レビュー PullRequest (MergeRequest)の ようにレビューを 挟むこともある
  4. やること • お試し環境として、Ubuntu ServerとDocker Engineを構築 • Dockerは、公式のセットアップ⼿順に従う • https://docs.docker.com/engine/install/ubuntu/ •

    GitLabをDockerコンテナでセットアップ • 今回はHTTPSではなくHTTPアクセスで⽤意 • GitLab Runnerをコンテナでセットアップ • それぞれ、Docker Composeの例を後述 11
  5. GitLabのセットアップ • gitlabディレクトリを作成して、その中にcompose.ymlを作成 • 設定やデータなどのボリュームもこのディレクトリに保存 • 私の好みの問題 12 akkie@m75q-2:~$ mkdir

    gitlab akkie@m75q-2:~$ cd gitlab akkie@m75q-2:~/gitlab$ vi compose.yml (次のページの内容を参考に記述) akkie@m75q-2:~/gitlab$ docker compose up -d
  6. GitLabコンテナのcompose.ymlの例 13 services: gitlab: image: 'gitlab/gitlab-ce:latest' restart: always environment: GITLAB_OMNIBUS_CONFIG:

    | external_url 'http://192.168.29.75:8081' ※8081の部分はお好みで gitlab_rails['gitlab_shell_ssh_port'] = 2222 nginx['listen_port'] = 80 nginx['listen_https'] = false ports: - '8081:80' ※8081の部分はお好みで - '2222:22' volumes: - /etc/localtime:/etc/localtime:ro - './config:/etc/gitlab' - './logs:/var/log/gitlab' - './data:/var/opt/gitlab'
  7. GitLab CI/CD Runnerの登録準備 • GitLabの管理者エリアの「CI/CD」→「Runner」を開く • 「Create instance runner」をクリック •

    「タグのないジョブの実⾏」にチェックを⼊れる • 「Runnerを作成」をクリック • ステップ1の「Runner認証トークン」をコピーしてメモする 15
  8. GitLab CI/CD Runnerのセットアップ • gitlab-runnerディレクトリを作成して、その中にcompose.yml を作成 • gitlabとは別に作る • まだ起動はしない

    16 akkie@m75q-2:~$ mkdir gitlab-runner akkie@m75q-2:~$ cd gitlab-runner akkie@m75q-2:~/gitlab-runner$ vi compose.yml (次のページの内容を参考に記述)
  9. GitLab Runnerコンテナの構成 • compose.ymlの例 • 以下のコマンドで登録作業(次のページに設定項⽬を記載) • 設定後にコンテナを起動 17 services:

    gitlab-runner: image: gitlab/gitlab-runner restart: always volumes: - ./config:/etc/gitlab-runner - /var/run/docker.sock:/var/run/docker.sock akkie@m75q-2:~/gitlab-runner$ docker compose run --rm gitlab-runner register
  10. registerコマンドの設定内容 • 「URL」→GitLabのURLを⼊⼒ • http://192.168.29.75:8081/ のように、GitLabのURL • 「registration token」→P.17でメモしたトークンを⼊⼒ •

    「Enter a name for the runner」→Runnerの名前を⼊⼒ • そのままEnterを押すとランダムな⽂字列で登録 • 「Enter an executor」→「docker」を指定 • 「Enter the default Docker image」→お好みで • 何もなければubuntu:24.04など 18
  11. dnsmasqのhostsファイル管理 • 弊社内で使⽤中のものをベースに解説 • dnsmasq(DNSサーバー)で使⽤されるhostsファイルを Gitで管理 • GitLabに配置することで、Web UIでDNSレコードの編集が可能に •

    ものぐさな運⽤! • GitLabでCI/CDを設定することで、⾃動デプロイを可能に • 書式エラーチェックのようなCIのテスト的な要素はない • Ansibleを使⽤してhostsファイルを配布 • CDの部分が主な使い⽅かも 21
  12. ⼿順 • テスト⽤dnsmasqサーバーの⽤意 • VMを⽤意 • リポジトリの作成 • hostsファイル •

    Ansible Playbook • .gitlab-ci.yml • GitLabのCI/CDの設定 • 実⾏テスト 22
  13. テスト⽤dnsmasqサーバーの⽤意 • Ubuntu ServerのVMを⽤意 • Ansible向けに、⼀般ユーザーからパスワードレスでsudo できるよう にしておく • dnsmasqをインストール

    • sudo apt install dnsmasq ‒y • /etc/dnsmasq.confを記述 • 最低限の設定(右) • SSH鍵を作成する • 秘密鍵はGitLabで使⽤するためメモする • 公開鍵の内容を~/.ssh/authorized_keysに追記する 23 strict-order interface=enp1s0 bind-interfaces
  14. .gitlab-ci.ymlの⽤意(1/2) • stages • ステージの定義 • 上から順に実⾏される • 今回はシンプルにテストと デプロイの2つ

    • before_script • CI実⾏前に実⾏するスクリプト • 必要なツールのインストール などに使⽤ • 今回はAnsibleとOpenSSHを インストール 27 --- stages: - test - deploy before_script: - apt-get update -y && apt-get install ansible-core -y - 'command -v ssh-agent >/dev/null || ( apt-get install openssh-client -y )' - eval $(ssh-agent -s) - chmod 400 "$SSH_PRIVATE_KEY" - ssh-add "$SSH_PRIVATE_KEY" - mkdir -p ~/.ssh - chmod 700 ~/.ssh - cp "$SSH_KNOWN_HOSTS" ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - cp "$ANSIBLE_HOSTS" ansible/hosts
  15. .gitlab-ci.ymlの⽤意(2/2) • test • CI⽤のステージ • stage: testがstagesとの紐づけ • グローバルキーワードのtestは無関

    係 • Ansibleのチェックモードを実⾏ • deploy • CD⽤のステージ • mainブランチに変更があった場合 のみ実⾏ • stagesは上からすべて実⾏する ため、この制限がないとテストの 段階でこれも実⾏されてしまう 28 test: stage: test image: ubuntu:24.04 script: - ansible-playbook -i ansible/hosts ansible/update-hosts.yml -DC deploy: stage: deploy only: refs: - main image: ubuntu:24.04 script: - ansible-playbook -i ansible/hosts ansible/update-hosts.yml -D
  16. GitLabプロジェクトのCI/CD設定(2/2) • SSH_KNOWN_HOSTS • dnsmasqサーバーの ホスト公開鍵 • ssh-keyscanコマンドで取得 • ANSIBLE_HOSTS

    • Ansibleのhostsファイル 30 [dnsmasq] 192.168.29.76 ansible_ssh_user=ubuntu (コマンド実⾏例) $ ssh-keyscan 192.168.29.76 (中略) 192.168.29.76 ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAICNqjQrAIPLW4S4d5FKEH rX05E4K2BfgOa7ThLgLTjHo
  17. 36