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
150
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
220
例示! Spring Bootで作られた REST APIのテストコード/ Testing-Example-for-a-REST-API-created-with-Spring-Boot
hirotokirimaru
2
1.6k
一緒に使うことが多い値は別クラスにしよう(Data Clumps)/data_clumps_is_useful
hirotokirimaru
0
620
Backlogが好きな話。/i_like_backlog
hirotokirimaru
0
100
私が好きなポートアンドアダプターを紹介する/I-like-hexagonal-architecture.pdf
hirotokirimaru
1
750
名付けのためにクラス図を元に会話しよう/Let's-use-class-diagram-to-communicate-with-client
hirotokirimaru
0
570
Code Smellsの Primitive Obsession に気を付けて設計する/Designing-with-Code-Smells-Primitive-Obsession
hirotokirimaru
1
3.1k
FCCを推す/My favorite software architecture is FCC
hirotokirimaru
0
170
我々はなぜオブジェクト指向やDDD等のアーキテクチャを学ぶのか/Why_we_learn_ObjectOriented_and_DDD_Architecture
hirotokirimaru
1
1k
Featured
See All Featured
Building Flexible Design Systems
yeseniaperezcruz
327
38k
What’s in a name? Adding method to the madness
productmarketing
PRO
22
3.1k
A Modern Web Designer's Workflow
chriscoyier
693
190k
The Art of Programming - Codeland 2020
erikaheidi
52
13k
BBQ
matthewcrist
85
9.3k
Save Time (by Creating Custom Rails Generators)
garrettdimon
PRO
27
840
GraphQLとの向き合い方2022年版
quramy
43
13k
What's in a price? How to price your products and services
michaelherold
243
12k
Faster Mobile Websites
deanohume
305
30k
A Philosophy of Restraint
colly
203
16k
4 Signs Your Business is Dying
shpigford
180
21k
The World Runs on Bad Software
bkeepers
PRO
65
11k
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