Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
受託開発でGitLab CI を活用していく
Search
中川 聡也
March 27, 2024
Programming
1
430
受託開発でGitLab CI を活用していく
主要CIツール3選!導入する前に知りたかった!各ツールのアピールポイント!
で発表した資料です
https://trident-qa.connpass.com/event/310009/
中川 聡也
March 27, 2024
Tweet
Share
More Decks by 中川 聡也
See All by 中川 聡也
Cloudflare Workers でWebGPUと戯れる
xiombatsg
0
130
Webサービス開発でのPostman活用方法
xiombatsg
0
200
Cloudflare Worker x Momento でリージョンと戦う
xiombatsg
0
650
OCHa Cafe Season7をふりかえって
xiombatsg
0
260
Other Decks in Programming
See All in Programming
デプロイを任されたので、教わった通りにデプロイしたら障害になった件 ~俺のやらかしを越えてゆけ~
techouse
52
32k
CSC509 Lecture 09
javiergs
PRO
0
110
Outline View in SwiftUI
1024jp
1
170
とにかくAWS GameDay!AWSは世界の共通言語! / Anyway, AWS GameDay! AWS is the world's lingua franca!
seike460
PRO
1
560
PagerDuty を軸にした On-Call 構築と運用課題の解決 / PagerDuty Japan Community Meetup 4
horimislime
1
110
のびしろを広げる巻き込まれ力:偶然を活かすキャリアの作り方/oso2024
takahashiikki
1
410
qmuntal/stateless のススメ
sgash708
0
120
Progressive Web Apps für Desktop und Mobile mit Angular (Hands-on)
christianliebel
PRO
0
110
カスタムしながら理解するGraphQL Connection
yanagii
1
1.2k
Webの技術スタックで マルチプラットフォームアプリ開発を可能にするElixirDesktopの紹介
thehaigo
2
930
詳細解説! ArrayListの仕組みと実装
yujisoftware
0
490
NSOutlineView何もわからん:( 前編 / I Don't Understand About NSOutlineView :( Pt. 1
usagimaru
0
170
Featured
See All Featured
Keith and Marios Guide to Fast Websites
keithpitt
408
22k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
7.9k
jQuery: Nuts, Bolts and Bling
dougneiner
61
7.5k
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
231
17k
Responsive Adventures: Dirty Tricks From The Dark Corners of Front-End
smashingmag
250
21k
Adopting Sorbet at Scale
ufuk
73
9k
Put a Button on it: Removing Barriers to Going Fast.
kastner
59
3.5k
Docker and Python
trallard
40
3.1k
Why Our Code Smells
bkeepers
PRO
334
57k
Why You Should Never Use an ORM
jnunemaker
PRO
53
9k
Raft: Consensus for Rubyists
vanstee
136
6.6k
What's in a price? How to price your products and services
michaelherold
243
12k
Transcript
受託開発でGitLab CI を活⽤していく 2024/3/27 株式会社Future Techno Developers 中川 聡也
謝辞 本日は登壇の機会をいただき、ありがとうございます。 まず初めに、主催者の皆様、参加者の皆様 そして資料提供いただきましたGitLab 様に 心から感謝申し上げます。 1
サーバーレス: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
事業紹介 3 プロジェクト⽀援事業 Webサイト運営事業 ソフトウェア開発事業 Web診断事業 当社サービス 代理店‧顧客ご紹介企業様 お客様 保守担当メンバー‧パートナー
弊社は「ソフトウェア商品開発をサポートする」企業です
最近こんなチラシを作りました システム開発で いつもプロジェクトが炎上してしまう と困っていませんか? プロジェクト開発に知⾒のあるエンジニアが、 課題管理やスムーズな進捗管理などを⾒直し、 解決に向けてアドバイスします!
【宣伝】TiUG Meetup #1 https://tiug.connpass.com/event/310114/ NewSQL データベース TiDBのUser Groupが開始されます。 ハイブリッド開催で、オフライン、オンラインどちらもまだ枠があります 触ったことがない⽅などにも楽しめる内容になっています!
【宣伝】Cloudflare Meet-up Tokyo Vol.4 4/1 から 始まるDeveloper week のre:Cap イベントです。
毎年⾯⽩いアップデート内容があります。 今回も期待⼤です!是⾮参加お願いします! https://cfm-cts.connpass.com/event/313277/
本題
今⽇話すこと アジェンダ 8 GitLabの有料機能の話も少し触れますが、 CIは無料で使⽤することができます。 01 そもそもCI/CDって? 02 GitLab CI概要
03 GitLab CI のセットアップ 04 弊社の活⽤事例 05 まとめ
GitLab CIは 持って帰ってもらいたいこと 01 SaaS版もSelf版,Shared,Specific Runnerを組み合わせることができる 02 ドキュメントはクリエーションラインさんの翻訳を読もう 03 CI
スクリプトは簡単 04 SASTなどコード品質チェックは標準で提供されている 9 05 CLIは便利
そもそもCI/CDって?
CI/CDとは? • Continuous Integration (CI) チームから提供されたコードを共有リポジトリに統合します • Continuous Delivery ソフトウェアが⾃動的に本番環境にリリースされます
• Continuous Deployment 変更を本番環境にプッシュします
なぜ CI/CDを使うと良いの? CIが統合のトラブルを軽減 問題が⼩さなうちに解消し、複雑化させない CIでチームの開発を加速させる 開発者間の信頼を⾼め、ボトルネックを減らす CIがエラーを素早く検出 記憶に残っているうちにエラーを修正できる CDはすべての変更をリリース可能にする 各リリースのリスクが低下し、予測可能なものになる
CDは価値を素早く、より多く提供する お客様の関⼼事を素早くフィードバック 02 01 05 04 03 CI/CDは、全ての部⾨間のコラボレーションを促進し、コードの作成と管理を容易にするだけで なく、次のような具体的なメリットがあります。
Deploy & Operate Plan & Create Integrate & Verify Monitor
& Improve 1つのワークフローで開発者、セキュリティ、各運⽤チームを統合
要するにCIツールとは 1. エラー検知を早くして 2. デプロイのトラブルを削減し 3. チームの⽣産性を向上し 4. 継続デリバリーを可能にし 5.
お客様に早期に価値を提供することができる 14 02 01 05 04 03
GitLab CI に⼊る前に GitLabって?
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
17 計画から展開、監視、監査まで全てカバー - 既存のツールと共存可 Manage Plan Create Verify Package Secure
Release Configure Monitor Protect
18 DevOpsの4フェーズ
19 DevOpsの基礎固め コミュニティサポート DevOpsの高度化 迅速なサポート体制 無償版 究極のDevOps-DevSecOps 迅速なサポート体制 プレミアム ウルティメイト
コードレビューの迅速化 高度なCD/CD 企業版アジャイル管理 リリースのコントロール 自社運用の冗長性を強化 コードレビューの迅速化 高度なCD/CD 企業版アジャイル管理 リリースのコントロール 自社運用の冗長性を強化 セキュリティテスト高度化 セキュリティリスク管理 コンプライアンス ポートフォリオ管理 バリューストリーム管理 効率性と コントロール を強化 セキュリティ/コンプラ イアンス対策/計画管理 を強化
Plan⾦額 20 弊社はPremiumを使用しています
GitLab CI 概要
CI/CDパイプラインの概要 1 2
GitLabパイプライングラフ • パイプラインで達成したいことを定義 ランナーによる実⾏ ステージでの実⾏ • ジョブを実⾏するタイミングと⽅法を定義 コードをコンパイルした後にテストを実⾏するステージがあります • 各ステージのジョブが並⾏して実⾏される
ステージ内のすべてのジョブが成功した場合、パイプラインは次のステージに移動します ステージ内のジョブが⼀つでも失敗すると、次のステージは(通常は)実⾏されません
GitLab パイプラインを起動する⽅法 • GitLabリポジトリにコードをプッシュする • UIから⼿動で実⾏する • 後で実⾏するようにスケジュールする • 上流パイプラインによって「トリガー」される
• APIを使⽤して「トリガー」付きでパイプラインを起動
Shared Runner と Specifi Runner インスタンス環境 Specific Runner インスタンスにインストールして使⽤するRunner 物理マシンやジョブの実⾏が⻑い時などに利⽤
Shared RunnerではできないDockerを使わないRunner もある SaaS環境 Shared Runner GitLab 社が ⽤意しているSaaS上で動くRunner 物理マシンを⽤意する必要がない コンピュート時間課⾦で利⽤可能(Free Tierあり) テストなどの⽐較的反復するJobはShared Runner 実⾏時間が⻑い、物理マシンにデプロイするなどはSpecific Runner の使い⽅が個⼈的におすすめです。
GitLab CI のセットアップ SaaS版でお話ししますが、Self managed 版も基本は⼀緒です。
1.GitLab のアカウントを作成する 下記の2種類の⽅法で可能です 1. Google アカウントなどID連携 2. メールアドレスでの連携 Self-managedでは LDAP
やKerberos 、 独⾃のOAuth2プロバイダ連携も使⽤可能です。
プロジェクトを作成 CIを試すだけならテンプレートプロジェクトが便利です 例:dotnetのテンプレートプロジェクトで作成 .gitlab-ci.ymlをルートに配置
.gitlab-ci.ymlを配置する ① DockerImageを指定(Docker HubにあるものでOK) ②パイプラインステージ名を定義(名前は⾃由) ③ジョブを定義 - stage は実⾏するstageを指定する -
script は実⾏したいshellコマンド - artifacts はビルド⽣成物を定義(後ほどダウンロード できるようになる) ① ② ③ docker compose に慣れていると似たような記法なので 導⼊のハードルはそれほどありませんでした
CI Runner を配置 試すだけであれば Shared Runner が簡単で良いです (free版でも400分枠があります) 弊社では基本 Shared
Runner を使⽤し、特定環境のデプロイ時に のみRunnerをインストールしています。
CI を実行 この⽅法以外にも実⾏⽅法は⾊々あります。 (MergeRequest,Webhook などなど)
さらにこんなこともできます
.gitlab-ci.yml を共通化して管理 社内の CIカタログ プロジェクトはCIカタログを参照 ※お客様先で誤動作防⽌ ※必要であれば、CIカタログも提 供します(実績なし) gitlab.comに公開している CIカタログ
※少しずつ整備中 弊社の場合(弊社HP Nuxt3 Cloudflare Pages の例)
社内カタログをさらに 共通の設定やlinterなどはincludeで Nuxt3 に関連するところだけJobを記述 共通変数の定義 SASTなどGitlab が提供しているCIのinclude stageの定義
CIカタログちょっとだけ 2023 Advent Calender の時期(2023年12⽉) 2024年 3⽉26⽇現在(126件) まだホビーが多いが、着実に増えてきている
SASTちょっとだけ コード品質チェック結果などを出してくれる SASTとは Gitlab が提供している コード品質チェックテンプレート
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 をマニュアル実⾏) などなど
glab ci view の例 カーソルを移動して、各JOBのログの実⾏状態を確認することが可能
Test結果も見れます。 JUnit ファイルを出力すると Merge Requestの画⾯でも確認できます レビュー時によく使ってます
良さそうなことだけじゃなくて
GitLab CI ちょっと残念なこと 1. ⾮エンジニアに触らせるには、UIが残念 a. エンジニアがメインで触るチームなら問題ない b. ダッシュボードを別で作るのもあり 2.
Jobを分割して実⾏をすると、毎Job DockerImageのダウン ロードされて、遅い a. 実⾏時間が短いJobはまとめる b. Specific Runner にする(Shell Executer があるのでこちらは 早い)
GitLab CI ちょっと残念なこと 3. ⽇本語ドキュメントがない a. クリエーションラインさんが⽇本語翻訳しています。そちら を⾒ましょう 4. Jobを分割して実⾏をすると、毎Job
DockerImageの ダウンロードされて、遅い b. 実⾏時間が短いJobはまとめる c. Specific Runner にする(Shell Executer があるのでこちらは 早い)
そもそもなんでGitLab CI?
そもそも何でGitLab CI? 44 昔はビルド、デプロイなどを⼀ つでやっていたけど ビルドタイミングもデプロイ タイミングも変わってきた Jobの実⾏タイミングを細か く定義ができる Jobを並⾏で実⾏できる
そもそも何でGitLab CI? 45 NAT越えのハードルが ある案件があり、対策をとれる ものがないか検討していた GitLab CI はPull型のため NAT越えを考慮しなくても
Jobが実⾏できた
そもそも何でGitLab CI? 46 Jenkinsはメモリ使⽤量が多 く、軽量インスタンスにする のがむずかしい GitLab CI Runner はメモリ
使⽤量が軽量 (ジョブの内容は別)
そもそも何でGitLab CI? 47 元々GitLabを使っていた 統合できる GitLab好き よし! GitLab CIにしよう!
とはいえ全プロジェクトで統合するにはハードルがまだまだあり・・・ お客様 • 管理しているリポジトリがある • 本番環境はお客様先 • 納品はお客様先リポジトリ 次ページ以降で弊社でよくやっている構成を紹介します 結論:
なるべく弊社側のリポジトリに取り込んで頑張る 弊社 • 作業時は⾃社のリポジトリにしたい (BPも多い) • CI ツールを常に実⾏したい
弊社の活⽤事例
弊社環境(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 で作ったイメージをデプロイします デプロイ
弊社環境(GitLab.com) お客様環境 ケース2 Webフロントのデプロイ ドキュメント環境(GitLab Pages) Webフロント環境確認(Cloudflare Pages) リポジトリ GitLab Project
お客様環境でデプロイ リポジトリミラー Specific Runner CI Trigger テスト/ビルド Shared Runner デプロイ レビュブランチ毎にデプロイ 本番サイトもCloudflare 上であれば同じ構成にしています Pages Job OpenAPI や Docusaurus をデプロイ
弊社環境(GitLab.com) ケース3 オンプレ環境へのデプロイ 本番環境(Windows Serverなど) GitLab Project Specific Runner CI Trigger
テスト/ビルド Shared Runner デプロイ Runner をインスタンスにインストールしておいて、 デプロイに必要なコマンドの実⾏などを⾏っています。 git からの pull,マイグレーションなど ビルドした artifact の取得など Pull型のRunner特性を活かして、 お客様のオンプレサーバーに Runner をインストールし、 Job を登録してデプロイ
弊社環境(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ビルド環境が 提供されている
こういうこともやってます テスト用DBとの接続はサービスの機能を使用 • GitLab CI には Docker Executer を使⽤してジョブ中に使⽤できる DB
を構築することができます。 • 弊社では MySQL が多いですが、 PostgresSQL や Redis のサービスも あります
まとめ
今後個人的に期待すること 1. CIカタログが GitHub Marketplace のようになる 2. 各社のCIスクリプトノウハウが共有される世界 3. IDE
Extenstion にCI 機能を追加される 4. CI トリガーに Epicやissue,Wikiなど プロジェクト以外のもので もトリガーできるようになる a. 現在はWebHookを使っていく必要がある
GitLab CIは まとめ 01 SaaS版もSelf版,Shared,Specific Runnerを組み合わせることができる 02 ドキュメントはクリエーションラインさんの翻訳を読もう 03 CI
スクリプトは簡単 04 SASTなどコード品質は標準で提供されている 57 05 CLIは便利
ご清聴ありがとうございました
None