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
CircleCIで集中管理しよう(社内向け)
Search
kirimaru
January 24, 2019
1
130
CircleCIで集中管理しよう(社内向け)
発表日:2019年1月23日
kirimaru
January 24, 2019
Tweet
Share
More Decks by kirimaru
See All by kirimaru
DDD(ドメイン駆動設計)を知らない人に知ったつもりさせる/Introduce_DDD_to_unfamiliar_individuals
hirotokirimaru
0
170
例示! Spring Bootで作られた REST APIのテストコード/ Testing-Example-for-a-REST-API-created-with-Spring-Boot
hirotokirimaru
2
1.1k
一緒に使うことが多い値は別クラスにしよう(Data Clumps)/data_clumps_is_useful
hirotokirimaru
0
520
Backlogが好きな話。/i_like_backlog
hirotokirimaru
0
84
私が好きなポートアンドアダプターを紹介する/I-like-hexagonal-architecture.pdf
hirotokirimaru
1
600
名付けのためにクラス図を元に会話しよう/Let's-use-class-diagram-to-communicate-with-client
hirotokirimaru
0
540
Code Smellsの Primitive Obsession に気を付けて設計する/Designing-with-Code-Smells-Primitive-Obsession
hirotokirimaru
1
2.8k
FCCを推す/My favorite software architecture is FCC
hirotokirimaru
0
140
我々はなぜオブジェクト指向やDDD等のアーキテクチャを学ぶのか/Why_we_learn_ObjectOriented_and_DDD_Architecture
hirotokirimaru
1
940
Featured
See All Featured
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
21
1.6k
Intergalactic Javascript Robots from Outer Space
tanoku
266
26k
The Illustrated Children's Guide to Kubernetes
chrisshort
31
46k
Making Projects Easy
brettharned
108
5.5k
Fireside Chat
paigeccino
21
2.6k
Build The Right Thing And Hit Your Dates
maggiecrowley
24
2k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
7
1k
Debugging Ruby Performance
tmm1
70
11k
4 Signs Your Business is Dying
shpigford
175
21k
Atom: Resistance is Futile
akmur
259
25k
The Mythical Team-Month
searls
216
42k
Designing for humans not robots
tammielis
248
25k
Transcript
CircleCIを使って 集中管理しよう @nainaistar
CI/CD
CI/CDとは ・ソフトウェアを常にテストして、 自動でリリース可能な状態にしておく手法。
なぜ注目するか
なぜ注目するか ・一人でも品質を保証できる仕組みが欲しかった。 ・PGは各々で静的解析ツールをかけていても、 IT以降で静的解析ツールをかけておらず、 意味が無いと思っていたから。 (時間的な問題や、ツールがIT時には無いとか・・・)
なぜ注目するか PT以降の各工程で、テスト数とステップ数の比率を求めたり、 納品物のステップ数求めたり・・・ たとえ概算でも、非常にめんどくさい。 ステップ数を数えたくない
なぜ注目するか 静的解析ツールの使用、コードの整形、ステップ数換算等の 各開発者が今まで分散して行っていた操作を CI/CDサーバの一箇所で集中管理できるという 点に注目しています。 ※正確には、監視程度ですが・・・。
正直なところ ・ソフトウェアを常にテストして、 自動でリリース可能な状態にしておく手法。 最悪、テストも、リリース可能な状態にしておくことも 不要であるとすら思っています。
小さいところから自動化しよう
Circle CI
CircleCIとは ・CI/CDができるWebサービス。 ・GitHub/BitBucketのリポジトリが必要。 ・Privateリポジトリでも連携できる。 ・1コンテナは無料。ただし、OS Xのコンテナは有料。 コンテナ数での課金、従量課金制もある。 ・無料枠の時間は、1月に1000分まで。(16時間40分) ・1.0の情報ばかりで、2.0の情報にヒットしづらい。
さらに ・GitHubが3ユーザまでprivateリポジトリ無料(1/7から) ・BitBucketが5ユーザまでprivateリポジトリ無料
つまり?
ここでいう、無理とは ・ジョブが長時間で嫌だ。もっと早くしたい。 ⇒コンテナ数を増やす必要有。 ・開発者一人一人のコミット起因でジョブを実行する。 (無料枠だと3人までなので、問題は無いかも・・・?) ⇒Pull-Requestを起因にすることで、 実行ジョブを減らせる。
Jenkinsでは駄目なの? ・管理コストが無視できない。 ・ローカルに構築するなら、もっとハイスペックPCを! ・専用サーバはウィルススキャン等の継続コスト、 そもそも、セットアップ時の初期コストが高い! ・高すぎる自由度が後に重圧になる(らしい)。 ・他社ではXCode等のビルド環境を自前で用意する コストを省くために、CircleCIやBitriseを利用する(らしい)。
CircleCI の JOB
CircleCIの設定ファイル 設定ファイル .circleci/config.yml に詳細を記載する。 (JOBも後に出てくるワークフローも)
CircleCIのJOB 記載内容: ・JOB名 ・実行環境(dockerイメージ等) ・実行するコマンド ・その他利用用途に応じた内容 (テスト結果ファイルの出力先等)
CircleCIのJob ソース CircleCI
Job単位の実行結果
CircleCIの ワークフロー
CircleCIのワークフロー (Jenkinsのパイプライン) 記載内容: ・ワークフロー名 ・実行するJOB名 ・JOB同士の関係性(直列) ・その他任意設定 (特定のブランチのみ実行したい等)
CircleCIのワークフロー ソース Circle CI
ワークフロー単位の実行結果
条件に満たない場合、 途中で処理を止めることも出来る
JOB承認ボタンを押すまで、 後続処理を実行しないこともできる。
処理結果はメール等に通知できる
コミット、Pull-Request起動だけでなく、 Cron起動も出来る
(自分が集中管理したい) JOB一覧
1.ステップ数カウント(cloc) 2.静的解析ツール(JavaScript) (ESLint + Prettier) 3.静的解析ツール(Java) (SonarCloud) ※Privateリポジトリは有料 インストール版は、SonarQube
以降のスライドは雰囲気のみ紹介 具体的な内容は、 .circleCI/config.yml に全て記載しているので、そちらを参照してください。 ソースコード https://github.com/hirotoKirimaru/circleCITest
JOB (ステップ数カウント)
ステップ数カウントツール(cloc) ステップ数がカウントできるツール ※詳細は省略 npmかyarnが入っていれば、 yarn add –D cloc で使い始められます。
Git-Flowを用いた開発フロー
ステップ数が欲しい箇所 ステップ数の差分 全ステップ数
こんなイメージのJOBを作った(差分)
こんなイメージのJOBを作った(差分) stepCount.txt
こんなイメージのJOBを作った(全部)
JOB (JavaScript静的解析)
ESLint + Prettier(JavaScript静的解析) ESLint・・・JavaScriptの静的解析ツール XXLintという名前は静的解析ツールであることが多い ESLint, HTMLHint, CSSLint等々。 Prettier・・・コードフォーマッタ 別のツールだが、同時に使われることが多い。
こんなイメージのJOBを作った エラー時にどこがダメだったか、 教えてくれる。
JOB (Java静的解析)
SonarCloud(Java静的解析) SonarQubeのCloud版 publicリポジトリは無料だが、privateリポジトリは有料。 他と違い、CircleCI上で結果は見れず、 SonarCloudのページにアクセスする必要がある。 CircleCIからsonarqubeへの連携APIを叩いているイメージ
環境
環境 ・ ソース管理 GitHub ・ CI/CD CircleCI ・ その他 ・
ステップ数カウントツール ・ cloc ・ Java静的解析ツール ・ SonarCloud ・ JavaScriptの静的解析ツール ・ ESlint ・ コード成形ツール(HTML,JS,CSS) ・ Prettier ・ チャットツール ・ Slack
ソースコード ・ ソース https://github.com/hirotoKirimaru/circleCITest
参考
参考 ・CircleCIで始めるCI/CD導入の基本のキ https://codezine.jp/article/detail/11208 ・CircleCI 2.0/2.1の機能をフル活用してCI/CDワークフローを改善してみた https://tech.gunosy.io/entry/enhance-circleci-workflow ・Prettier 入門 ~ESLintとの違いを理解して併用する~ https://qiita.com/soarflat/items/06377f3b96964964a65d
・clocとシェルスクリプトでgit管理ソースの改修ステップ数を集計 https://qiita.com/aakasaka/items/ae07781d7bea447492a7