Slide 1

Slide 1 text

受託開発でGitLab CI を活⽤していく 2024/3/27 株式会社Future Techno Developers 中川 聡也

Slide 2

Slide 2 text

謝辞 本日は登壇の機会をいただき、ありがとうございます。
 まず初めに、主催者の皆様、参加者の皆様
 そして資料提供いただきましたGitLab 様に
 心から感謝申し上げます。
 1

Slide 3

Slide 3 text

サーバーレス:Serverless/Cloudflare/Momento /TiUG ゲーム‧アプリ:IGDA Japan / Japan Android Group Cloud Native:OCha Cafe! 他も顔出してます。どこかであったら声かけてください! まずは⾃⼰紹介 @xiombatsg
 2 何をしている⼈? 商品開発をしているお客様を技術⾯でご⽀援 チーム構築のご⽀援(Platform Engineer,SRE…) どんなジャンル? ゲーム/Webサービス/CG/組み込み/etc… どんなコミュニティに顔を出している? Cloudflare UG 東京, TiUGの運営に参画 中川 聡也 Satoya Nakagawa https://zenn.dev/nakagawa_satoya

Slide 4

Slide 4 text

事業紹介 3 プロジェクト⽀援事業 Webサイト運営事業 ソフトウェア開発事業 Web診断事業 当社サービス 代理店‧顧客ご紹介企業様 お客様 保守担当メンバー‧パートナー 弊社は「ソフトウェア商品開発をサポートする」企業です

Slide 5

Slide 5 text

最近こんなチラシを作りました システム開発で いつもプロジェクトが炎上してしまう と困っていませんか? プロジェクト開発に知⾒のあるエンジニアが、 課題管理やスムーズな進捗管理などを⾒直し、 解決に向けてアドバイスします!

Slide 6

Slide 6 text

【宣伝】TiUG Meetup #1 https://tiug.connpass.com/event/310114/ NewSQL データベース TiDBのUser Groupが開始されます。 ハイブリッド開催で、オフライン、オンラインどちらもまだ枠があります 触ったことがない⽅などにも楽しめる内容になっています!

Slide 7

Slide 7 text

【宣伝】Cloudflare Meet-up Tokyo Vol.4 4/1 から 始まるDeveloper week のre:Cap イベントです。 毎年⾯⽩いアップデート内容があります。 今回も期待⼤です!是⾮参加お願いします! https://cfm-cts.connpass.com/event/313277/

Slide 8

Slide 8 text

本題

Slide 9

Slide 9 text

今⽇話すこと アジェンダ 8 GitLabの有料機能の話も少し触れますが、 CIは無料で使⽤することができます。 01 そもそもCI/CDって? 02 GitLab CI概要 03 GitLab CI のセットアップ 04 弊社の活⽤事例 05 まとめ

Slide 10

Slide 10 text

GitLab CIは 持って帰ってもらいたいこと 01 SaaS版もSelf版,Shared,Specific Runnerを組み合わせることができる 02 ドキュメントはクリエーションラインさんの翻訳を読もう 03 CI スクリプトは簡単 04 SASTなどコード品質チェックは標準で提供されている 9 05 CLIは便利

Slide 11

Slide 11 text

そもそもCI/CDって?

Slide 12

Slide 12 text

CI/CDとは? ● Continuous Integration (CI) チームから提供されたコードを共有リポジトリに統合します ● Continuous Delivery ソフトウェアが⾃動的に本番環境にリリースされます ● Continuous Deployment   変更を本番環境にプッシュします

Slide 13

Slide 13 text

なぜ CI/CDを使うと良いの? CIが統合のトラブルを軽減 問題が⼩さなうちに解消し、複雑化させない CIでチームの開発を加速させる 開発者間の信頼を⾼め、ボトルネックを減らす CIがエラーを素早く検出 記憶に残っているうちにエラーを修正できる CDはすべての変更をリリース可能にする 各リリースのリスクが低下し、予測可能なものになる CDは価値を素早く、より多く提供する お客様の関⼼事を素早くフィードバック 02 01 05 04 03 CI/CDは、全ての部⾨間のコラボレーションを促進し、コードの作成と管理を容易にするだけで なく、次のような具体的なメリットがあります。

Slide 14

Slide 14 text

Deploy & Operate Plan & Create Integrate & Verify Monitor & Improve 1つのワークフローで開発者、セキュリティ、各運⽤チームを統合

Slide 15

Slide 15 text

要するにCIツールとは 1. エラー検知を早くして 2. デプロイのトラブルを削減し 3. チームの⽣産性を向上し 4. 継続デリバリーを可能にし 5. お客様に早期に価値を提供することができる 14 02 01 05 04 03

Slide 16

Slide 16 text

GitLab CI に⼊る前に GitLabって?

Slide 17

Slide 17 text

16 Built from the ground up as a single application 200% faster DevSecOps lifecycle Secure Manage Plan Create Verify Package Release Configure Monitor Defend ✔ Single Conversation ✔ Single Data Store ✔ Single Permission Model ✔ Single Interface ✔ Governance & Security ✔ Team Collaboration ✔ Lifecycle Analytics Developers Product Management Quality Assurance Security Operations Infrastructure Collaborate Automate

Slide 18

Slide 18 text

17 計画から展開、監視、監査まで全てカバー - 既存のツールと共存可 Manage Plan Create Verify Package Secure Release Configure Monitor Protect

Slide 19

Slide 19 text

18 DevOpsの4フェーズ

Slide 20

Slide 20 text

19 DevOpsの基礎固め コミュニティサポート DevOpsの高度化 迅速なサポート体制 無償版 究極のDevOps-DevSecOps 迅速なサポート体制 プレミアム ウルティメイト コードレビューの迅速化 高度なCD/CD 企業版アジャイル管理 リリースのコントロール 自社運用の冗長性を強化 コードレビューの迅速化 高度なCD/CD 企業版アジャイル管理 リリースのコントロール 自社運用の冗長性を強化 セキュリティテスト高度化 セキュリティリスク管理 コンプライアンス ポートフォリオ管理 バリューストリーム管理 効率性と コントロール を強化 セキュリティ/コンプラ イアンス対策/計画管理 を強化

Slide 21

Slide 21 text

Plan⾦額 20 弊社はPremiumを使用しています

Slide 22

Slide 22 text

GitLab CI 概要

Slide 23

Slide 23 text

CI/CDパイプラインの概要 1 2

Slide 24

Slide 24 text

GitLabパイプライングラフ ● パイプラインで達成したいことを定義    ランナーによる実⾏    ステージでの実⾏ ● ジョブを実⾏するタイミングと⽅法を定義  コードをコンパイルした後にテストを実⾏するステージがあります ● 各ステージのジョブが並⾏して実⾏される    ステージ内のすべてのジョブが成功した場合、パイプラインは次のステージに移動します    ステージ内のジョブが⼀つでも失敗すると、次のステージは(通常は)実⾏されません

Slide 25

Slide 25 text

GitLab パイプラインを起動する⽅法 ● GitLabリポジトリにコードをプッシュする ● UIから⼿動で実⾏する ● 後で実⾏するようにスケジュールする ● 上流パイプラインによって「トリガー」される ● APIを使⽤して「トリガー」付きでパイプラインを起動

Slide 26

Slide 26 text

Shared Runner と Specifi Runner インスタンス環境 Specific Runner インスタンスにインストールして使⽤するRunner 物理マシンやジョブの実⾏が⻑い時などに利⽤ Shared RunnerではできないDockerを使わないRunner もある SaaS環境 Shared Runner GitLab 社が ⽤意しているSaaS上で動くRunner 物理マシンを⽤意する必要がない コンピュート時間課⾦で利⽤可能(Free Tierあり) テストなどの⽐較的反復するJobはShared Runner 実⾏時間が⻑い、物理マシンにデプロイするなどはSpecific Runner の使い⽅が個⼈的におすすめです。

Slide 27

Slide 27 text

GitLab CI のセットアップ SaaS版でお話ししますが、Self managed 版も基本は⼀緒です。

Slide 28

Slide 28 text

1.GitLab のアカウントを作成する 下記の2種類の⽅法で可能です 1. Google アカウントなどID連携 2. メールアドレスでの連携 Self-managedでは LDAP やKerberos 、 独⾃のOAuth2プロバイダ連携も使⽤可能です。

Slide 29

Slide 29 text

プロジェクトを作成 CIを試すだけならテンプレートプロジェクトが便利です 例:dotnetのテンプレートプロジェクトで作成 .gitlab-ci.ymlをルートに配置

Slide 30

Slide 30 text

.gitlab-ci.ymlを配置する ① DockerImageを指定(Docker HubにあるものでOK) ②パイプラインステージ名を定義(名前は⾃由) ③ジョブを定義 - stage は実⾏するstageを指定する - script は実⾏したいshellコマンド - artifacts はビルド⽣成物を定義(後ほどダウンロード できるようになる) ① ② ③ docker compose に慣れていると似たような記法なので 導⼊のハードルはそれほどありませんでした

Slide 31

Slide 31 text

CI Runner を配置 試すだけであれば Shared Runner が簡単で良いです (free版でも400分枠があります) 弊社では基本 Shared Runner を使⽤し、特定環境のデプロイ時に のみRunnerをインストールしています。

Slide 32

Slide 32 text

CI を実行 この⽅法以外にも実⾏⽅法は⾊々あります。 (MergeRequest,Webhook などなど)

Slide 33

Slide 33 text

さらにこんなこともできます

Slide 34

Slide 34 text

.gitlab-ci.yml を共通化して管理 社内の CIカタログ プロジェクトはCIカタログを参照 ※お客様先で誤動作防⽌ ※必要であれば、CIカタログも提 供します(実績なし) gitlab.comに公開している CIカタログ ※少しずつ整備中 弊社の場合(弊社HP Nuxt3 Cloudflare Pages の例)

Slide 35

Slide 35 text

社内カタログをさらに 共通の設定やlinterなどはincludeで Nuxt3 に関連するところだけJobを記述 共通変数の定義 SASTなどGitlab が提供しているCIのinclude stageの定義

Slide 36

Slide 36 text

CIカタログちょっとだけ 2023 Advent Calender の時期(2023年12⽉) 2024年 3⽉26⽇現在(126件) まだホビーが多いが、着実に増えてきている

Slide 37

Slide 37 text

SASTちょっとだけ コード品質チェック結果などを出してくれる SASTとは Gitlab が提供している コード品質チェックテンプレート

Slide 38

Slide 38 text

GitLab CLI はおすすめ インストール手順:https://gitlab.com/gitlab-org/cli/-/blob/main/docs/installation_options.md GitLab CLI のインストールをおすすめしてます。 <できること> 1. CI Lint (CIスクリプトの構⽂チェックができる) 2. CI Trace ローカルでCI実⾏ログが⾒れる) 3. CI View (CI実⾏状態をCLIで可視化) 4. CI Trigger (CI をマニュアル実⾏) などなど

Slide 39

Slide 39 text

glab ci view の例 カーソルを移動して、各JOBのログの実⾏状態を確認することが可能

Slide 40

Slide 40 text

Test結果も見れます。 JUnit ファイルを出力すると Merge Requestの画⾯でも確認できます レビュー時によく使ってます

Slide 41

Slide 41 text

良さそうなことだけじゃなくて

Slide 42

Slide 42 text

GitLab CI ちょっと残念なこと 1. ⾮エンジニアに触らせるには、UIが残念 a. エンジニアがメインで触るチームなら問題ない b. ダッシュボードを別で作るのもあり 2. Jobを分割して実⾏をすると、毎Job DockerImageのダウン ロードされて、遅い a. 実⾏時間が短いJobはまとめる b. Specific Runner にする(Shell Executer があるのでこちらは 早い)

Slide 43

Slide 43 text

GitLab CI ちょっと残念なこと 3. ⽇本語ドキュメントがない a. クリエーションラインさんが⽇本語翻訳しています。そちら を⾒ましょう 4. Jobを分割して実⾏をすると、毎Job DockerImageの ダウンロードされて、遅い b. 実⾏時間が短いJobはまとめる c. Specific Runner にする(Shell Executer があるのでこちらは 早い)

Slide 44

Slide 44 text

そもそもなんでGitLab CI?

Slide 45

Slide 45 text

そもそも何でGitLab CI? 44 昔はビルド、デプロイなどを⼀ つでやっていたけど ビルドタイミングもデプロイ タイミングも変わってきた Jobの実⾏タイミングを細か く定義ができる Jobを並⾏で実⾏できる

Slide 46

Slide 46 text

そもそも何でGitLab CI? 45 NAT越えのハードルが ある案件があり、対策をとれる ものがないか検討していた GitLab CI はPull型のため NAT越えを考慮しなくても Jobが実⾏できた

Slide 47

Slide 47 text

そもそも何でGitLab CI? 46 Jenkinsはメモリ使⽤量が多 く、軽量インスタンスにする のがむずかしい GitLab CI Runner はメモリ 使⽤量が軽量 (ジョブの内容は別)

Slide 48

Slide 48 text

そもそも何でGitLab CI? 47 元々GitLabを使っていた 統合できる GitLab好き よし! GitLab CIにしよう!

Slide 49

Slide 49 text

とはいえ全プロジェクトで統合するにはハードルがまだまだあり・・・ お客様 ● 管理しているリポジトリがある ● 本番環境はお客様先 ● 納品はお客様先リポジトリ 次ページ以降で弊社でよくやっている構成を紹介します 結論: なるべく弊社側のリポジトリに取り込んで頑張る 弊社 ● 作業時は⾃社のリポジトリにしたい (BPも多い) ● CI ツールを常に実⾏したい

Slide 50

Slide 50 text

弊社の活⽤事例

Slide 51

Slide 51 text

弊社環境(GitLab.com) お客様環境 ケース1 レビュサーバ環境へのデプロイ インスタンス環境(EC2など) コンテナ環境(ECSなど) CI Trigger テスト/ビルド Docker Image ビルド リポジトリ GitLab Project Shared Runner Container Registry お客様環境でデプロイ リポジトリミラー Specific Runner デプロイ Runner をインスタンスにインストールしておいて、 デプロイに必要なコマンドの実⾏などを⾏っています。 git からの pull,マイグレーションなど ビルドした artifact の取得など CI のパイプライントリガで ECS環境にデプロイします Container Registry で作ったイメージをデプロイします デプロイ

Slide 52

Slide 52 text

弊社環境(GitLab.com) お客様環境 ケース2 Webフロントのデプロイ ドキュメント環境(GitLab Pages) Webフロント環境確認(Cloudflare Pages) リポジトリ GitLab Project お客様環境でデプロイ リポジトリミラー Specific Runner CI Trigger テスト/ビルド Shared Runner デプロイ レビュブランチ毎にデプロイ 本番サイトもCloudflare 上であれば同じ構成にしています Pages Job OpenAPI や Docusaurus をデプロイ

Slide 53

Slide 53 text

弊社環境(GitLab.com) ケース3 オンプレ環境へのデプロイ 本番環境(Windows Serverなど) GitLab Project Specific Runner CI Trigger テスト/ビルド Shared Runner デプロイ Runner をインスタンスにインストールしておいて、 デプロイに必要なコマンドの実⾏などを⾏っています。 git からの pull,マイグレーションなど ビルドした artifact の取得など Pull型のRunner特性を活かして、 お客様のオンプレサーバーに Runner をインストールし、 Job を登録してデプロイ

Slide 54

Slide 54 text

弊社環境(GitLab.com) ケース4 アプリのビルド ゲームビルドPC環境 GitLab Project Specific Runner CI Trigger テスト Shared Runner ビルド ビルド時間が⻑いものは 専⽤のビルドPCを⽤意してビルド モバイルアプリ ビルドRunner Shared Runner GitLab で Android/iOS ビルド向け に Fastlane を使ったビルド環境が 提供されている Windows アプリビルド Runner Shared Runner GitLab で Windowsビルド環境が 提供されている

Slide 55

Slide 55 text

こういうこともやってます テスト用DBとの接続はサービスの機能を使用 ● GitLab CI には Docker Executer を使⽤してジョブ中に使⽤できる DB を構築することができます。 ● 弊社では MySQL が多いですが、 PostgresSQL や Redis のサービスも あります

Slide 56

Slide 56 text

まとめ

Slide 57

Slide 57 text

今後個人的に期待すること 1. CIカタログが GitHub Marketplace のようになる 2. 各社のCIスクリプトノウハウが共有される世界 3. IDE Extenstion にCI 機能を追加される 4. CI トリガーに Epicやissue,Wikiなど プロジェクト以外のもので もトリガーできるようになる a. 現在はWebHookを使っていく必要がある

Slide 58

Slide 58 text

GitLab CIは まとめ 01 SaaS版もSelf版,Shared,Specific Runnerを組み合わせることができる 02 ドキュメントはクリエーションラインさんの翻訳を読もう 03 CI スクリプトは簡単 04 SASTなどコード品質は標準で提供されている 57 05 CLIは便利

Slide 59

Slide 59 text

ご清聴ありがとうございました

Slide 60

Slide 60 text

No content