Jenkinsおじさんの
育て方

@sakamoto_desu
Jenkins
×
SRE
×
BIZREACH
アジェンダ
-
なぜJenkinsおじさんを育てるのか?
-
どんな人を育てるのか?
-
どう育てるのか?
なぜ
Jenkinsおじさんを
育てるのか?
1.
Jenkinsおじさん
=
Jenkinsエキスパート
背景
-
Jenkins 10台〜
-
Job 100個〜
-
CI/CD以外にも利用

解決したい課題
-
ジョブが多すぎて検証しきれずJenkinsサーバのバージョンアップができない
-
特定のジョブのためだけにJenkinsサーバの設定変更ができない
-
他に移行するにも既存も動かし続ける必要がある
Jenkinsおじさんがもっと必要だ!
とめられないCI/CD



Jenkinsが止まるとCI/CDが止まり、開発が止まる
移行のためにも知識が必要



既存Jenkinsを理解していないと移行できない
移行期間中の既存Jenkinsの維持も必要
進化するJenkins
-
Jenkins X
-
Jenkin CoC
-
Jenkins Evergreen

どんな
Jenkinsおじさんを
育てるのか?
2.
トラブルを解決できる
- 開発者が遭遇したエラーの解決を手伝える
- ジョブの不可解な動作を解決できる

ジョブのメンテナンスができる
- 既存ジョブのメンテナンス
- 新規ジョブの作成

どうやって
Jenkinsおじさんを
育てるのか?
3.
ヒントになったのは
28.SREの成長を
加速する方法

教育の方法
アンチパターン
3.1.
アンチパターン:
訓練として下働きのような作業(アラートやチケットのトリアージ)で手いっぱいにさせる。厳しい試練を与えて試す。
推奨:
具体的で順序建てられた学習体験を設計する
時間
思考
実行
CI/CDの意義の学習
Jenkinsの役割を学習
sandboxで
Jenkinsを構築
sandboxで
Jenkinsジョブを作成
トラブル対応
シャドーイング
トラブルシューティングのtipsを学習
構築プロジェクトを担当
Jenkinsのドキュメントを読む
既存ジョブの写経
e.g. 崖から突き落とす研修
研修講師「このサービスのクローンを作ってください」
初心者「まったく太刀打ちできなかった」
熟練者「つまらなかった」
今は個人にフィットした研修になっています
崖から突き落とすのはやめましょう

アンチパターン:
プロジェクトの新しい作業はほぼ全てシニアSREに渡し、ジュニアSREには断片的な作業だけを渡す
推奨:
単純ではないプロジェクトの作業を切り出して渡し、サービススタック中の一部を受け持つ機会を与える
単純作業ではなく、目的のはっきりしたプロジェクトの作業を受け持ってもらうこと
-
担当者意識が学習効果を上げる
-
同僚からの信頼を得るのに役立つ
「ここのこれだけ直せばいいよ」
「このプロジェクトを任せた!解決するとパフォーマンスが上がるよ!」
○
×
経験学習サイクル
3.2.
経験学習サイクル

経験学習サイクル
-
具体的な経験をする(経験)
-
何が起こったかを多様な視点から振り返る(省察)
-
他の場面でも応用できるように経験を概念化する(概念化)
-
新たな場面で実際に試してみる(試行・実践)
経験学習サイクルイメージ
経験学習 | 弟子 | 師匠 |
---|---|---|
具体的経験 | ジョブ動かなくて苦労した | 助けすぎない 必要な知識は座学でインプット済み |
内省的省察 | なぜ苦労したんだろう? | 振り返りの時間を設ける |
抽象的概念化 | 次はどうすればいいのだろう? | 応用できる教訓を作ってもらう |
積極的実践 | やってみよう! | チャンスを与える |
1on1、ティーチング・コーチング・フィードバックを活用
やったこと
3.4.
-
目的のあるプロジェクトを任せる
-
断片的な作業をやらせない
-
雑用にしない
-
過度に責任が重い物を任せない
-
経験学習サイクルを回す
方針のおさらい
新卒2年目への教育内容
課題:
Jenkinsサーバの分離
背景:
JenkinsサーバにCI/CD用の設定を実行したいがJobが大量で影響が大きく設定変更できない
期待する結果:
CI/CDのためだけに設定可能な状態
座学
-
CI/CDの歴史
-
Jenkinsの基礎知識
-
既存ジョブの知識
-
トラブルシューティングのtips
座学: CI/CDの歴史
CI/CDとは?
なぜ必要なのか?
岩田聡さんのマザー2開発秘話が好きなので開発環境が与える影響の事例として紹介しました
座学:Jenkinsの基礎知識
-
Jenkinsの役割
-
master/node
-
job
-
plugin
座学:既存ジョブの知識
-
なんのためのジョブか
-
Jenkinsfileの読み書き
-
写経しよう
座学:トラブルシューティングのtips
-
ログの場所
-
ドキュメントの場所
-
Try&Errorのやり方
-
stackoverflowの活用
-
Jenkins JIRAの活用
1. ログの場所
-
ジョブのログ
-
コンソールログ
-
PipelineSteps
-
テスト結果
-
-
サーバのログ
-
ノードのログ


ヘルプに大事な話が書いてあったりする
2. ドキュメントの場所
-
Syntax確認用のジョブを作る
-
Multibranchならブランチを切って確認する
- etc
3. Try&Errorのやり方

4&5. Stackoverflow と JIRAの活用
1. エラーに遭遇

2. stackoverflowで同じエラーを見つけるも未解決
でもJIRAチケットが案内されてるのを見つける
※画像はイメージです

3. Unresolvedだった
でもコメントをよくみると・・・
※画像はイメージです

4. Workaroudを見つけた!
※画像はイメージです
といった体験をtipsとしてインプットする
経験:Jenkinsサーバ分離
まずはJenkins設定に慣れるところから
経験学習サイクルを意識しながら実践
-
ローカルにJenkinsを構築して慣れる
-
新規Jenkins環境をインストール
-
node設定
-
ジョブを写経して動かしてみる
結果
-
Jenkinsの質問に答えられる
-
自己解決力の向上
昔「エラーで動きません」
今「エラーが起きたんですが原因がわかりました。解決策が2個あるんですがどちらが適切ですか?」

(何かかっこいいセリフ)
Jenkinsおじさんの育て方
By Minoru Sakamoto
Jenkinsおじさんの育て方
Jenkinsおじさんの育て方
- 11,781