Pythonことはじめ2
はじめに
実装したもの
運用業務の自動化というやつ
- マクロを使った手操作をスクリプト化してイイ感じにする
- 現行タスクは、機材にログイン & コマンド操作 & 出力内容をチェック
- 新規もの
コマンドを垂れ流すだけならマクロでできてるはず
- 操作失敗時のケア、コマンド間のデータ連携、チェックが肝になりそう
- 無人操作になるので、ロギング、エラーハンドリング、運用整理がいる
- 機材の数や種類は1つや2つではない、コマンドも同様
調べたこと
ヘルプ
pydoc pdb or python -m pydoc pdb
- Web起動させてブラウザに http://localhost:1234/ 使ってないけどオサレ
python -m pydoc -p 1234
- replからは組み込み変数 help を使う。
>>> help("pdb")
- Pythonコマンドラインのオプション > 1. コマンドラインと環境
デバッグ
- 標準デバッガの pdb を使った。
python -m pdb script.py
-
- ローカル変数の値を確認
p locals() - プロパティやメソッドを確認
dir() - 辞書型オブジェクトの属性値を確認
vars(インスタンス等) - メソッドや特殊メソッドを確認
getattr()
- ローカル変数の値を確認
テストコードは unittestで書いた。
- 検証環境でコマンドの結果をテストコードに貼ってチェック処理を実装した
- デバッグを効率化できた。
コード構成
とりあえずスクールで習ったとおりにmainメソッドを書いた。
-
- Argparse チュートリアルを先に読むといいかも
- 指定なしだと、引数は文字列扱い。数値として扱いたければ
type=int - add_mutually_exclusive_group() は非推奨
キーワード引数の可変長変数が便利(多用はよくなさげ)。
- ** はアンパック演算子という
- なんでもかんでもキーワード引数にしない とのこと。
エラー処理について
ログ
- logging を使う。
- 参考にした記事
文字列
Docstringに関数の説明とかを書く。PEP 257
スクールで習ったRubyとの違い
余談
コードを書く時間は半分くらい?🌓
- ほかは正解を探す営み(実機操作、問合せ等)、作業環境の改善、資料作成とか。
- 集中力的には悪くないかも。改善案が浮かぶのは帰宅中か就寝前が多い気がする
- 資料をいったんコピペして実装するのが作業効率よかった。(後で消せばいい)
要件はふんわり?😶🌫️
- 怪しい情報が聞こえてきたら
- イイ感じな資料を手早く作れたい。Mermaidのフロー図は使いづらいかも
- コードをシンプルにして不確実性に備える
リファクタリングをくりかえす😵💫
- 回数がかさむほど未熟さを感じる。一発での完成度も実力のうちだと実感した
JSONファイルの操作に手こずった🏒
- JSONファイル操作なら jq が便利なはず..
- だけど慣れてるPowerShell、VSCode、Bashでやりくりしてた
- 標準ライブラリのjsonで扱う。
- 事実上最後のJSON仕様「RFC 8259」と「ECMA-404 2nd Editon」公開。UTF-8エンコード必須に - Publickey
- JSONファイル操作なら jq が便利なはず..
スクールで学んだコーディング基礎(Ruby)はPythonにも色々と通じる📝
- スクールでの試行錯誤を思い出した。教材をPythonで書き換えて学習してた。
- 使い捨てのコマンド自作も仕事術の1つかも > rubyでコマンドを作る
- viも使うので参考にさせて頂いた > 脱初心者を目指すなら知っておきたい便利なVimコマンド25選 (Vimmerレベル診断付き)
Effective Python 第2版を読み始めた📚
- 目次をみてピンとくる章から読んでいる。Tips集なので取り入れやすい。
- 少なくとも洋書版は今年の11月に新刊がでる > Effective Python: 125 Specific Ways to Write Better Python, 3rd Edition
時事ネタ🗞️ > Python理事会が古参開発者を追い出して開発者コミュニティが騒動に
とても共感🍵 > やる気がなくてもやる - 腹は減る
以上
SNMPによるネットワーク監視
SNMPによるネットワーク監視
はじめに
近いうちに使うことになりそうなSNMPについて調べてまとめておく📝
SNMP(Simple Network Management Protocol)とは
ネットワークを監視するために用いられる事実上の標準プロトコルである。
小規模なネットワークでは簡易的にpingを用いて死活監視(※)のみを行うこともある。 ※例: ExPing(フリーソフト): コンソールにインストール。死活状態を〇×で表示したりできる
SNMPで監視できる事項
- 機器の稼働状況
- 稼働時間、ポートごとのパケット数、CPU稼働率、メモリ使用状況、内部温度、製品名...etc
- -> 大抵の情報を取得できる! 定義データベースをMIBという。
MIB(Management Information Base)とは
SNMPマネージャとエージェント間でやり取りされる命令と機能との対応表である
RFC1156(MIB1) RFC1213(MIB2)
MIBには標準MIBとプライベートMIBがある。
- 標準MIBは、RFCで定義される標準的なもの。
- プライベートMIBは、機器メーカーが独自に定義したものであり、異なるメーカー間や異なる機種間(※)での同一性は担保されない。iOSのアップデートでプライベートMIBが削除された事例とかはチョロチョロあるらしい
SNMP通信
UDP161ポート(snmp), 162(snmp-trap)
問合せを行い、情報を収集する側(管理する側) -> SNMPサーバ または SNMPマネージャ 問合せに対して応答する側(管理される側) -> SNMPエージェント
SNMP Trap
通常のSNMP通信は、マネージャが定期的にエージェントに対して問い合わせを行う。これをポーリング通信(polling)という。 それに対して、SNMPトラップは、エージェント側で設定した状況になった時(※)、エージェント側からマネージャに対して一方的に通知を行うための通信。 ※内部温度が35℃を超えた、CPU使用率が90%を超えた、メモリ残量が5%以下など
SNMPコミュニティ
SNMPコミュニティとは、一種のグループ名であり、SNMPの通信が行われる際は、エージェントで予め設定したコミュニティ名とマネージャが問い合わせる際のコミュニティ名が合致しないと応答されない。事実上のパスワードといえる。 またメーカーを問わず、大部分の製品ではデフォルトのコミュニティ名が "Public" となっているので必ずこれは変更しなくてはならない! (実際にこれを悪用して企業内の重要なルータなどの情報を第三者に取られてしまう事件があったらしい)
SNMPのバージョン
- SNMP v1: RFC1157 コミュニティ名による平文認証、SNMPトラップの再送確認なし
- SNMP v2: RFC1901 コミュニティ名による平文認証、SNMPトラップの再送確認あり
- SNMP v3: RFC2273-2275 暗号化されたパスワード認証あり、SNMPトラップの再送確認あり
現状で推奨されるのは当然 v3 であるが、v2が広く使用されたり、v1が使われているかも
SNMPメッセージ
SNMPによってやり取りされる。通信の属性、命令
v1 は5種類
Get Request (man -> agent) エージェントから得たい情報をOID(Object ID)を指定して要求する命令
GetNext Request (man -> agent) 直前に指定して取得したOIDの次のデータを要求
Set Request (man -> agent) エージェントの設定変更を行いたい場合、そのOIDを指定して要求する ★どのような項目をSNMPで変更できるのかはその装置の実装次第(マニュアル、仕様書の確認が必要になる)
Get Response (agent -> man) マネージャから要求されたGet Request に対して値を返す
TRAP (agent -> man) エージェントの状態変化があった場合、自発的に発信 ★どのような場合にTRAPを発信するかは設定(実装)次第
v2c は、v1 + 2種類
Get Bulk Request (man -> agent) 一括参照要求。複数の情報をまとめて取得するコマンド
Inform Request (agent -> man) 通知に対する確認応答を要求
v3 SNMPメッセージ自体はv2cと同じ7種類が使える そして、v3では、コミュニティ名ではなく USM(User-based Security Model)というユーザごとのパスワード認証と VACM(View-based Access Control Model)というユーザごとにアクセス可能なMIBの範囲を制限できる機能が追加されている。
USMのセキュリティレベル
- noAuthNoPriv: ユーザ名を利用して認証、暗号化なし
- AuthNoPriv: MD5 または SHA を使用して認証、暗号化なし
- AuthPriv: MD5 または SHA を使用して認証、暗号化あり
メッセージダイジェスト(MD5 etc)
- 「元データ」 短くても長くてもよい ↓
- 「ハッシュ関数」 一方向のみ計算できる演算 ↓
- 「メッセージダイジェスト」 一定長のデータ(64バイトなど)
メッセージダイジェストを利用した同一性の保証の仕組み MDがわかっても、それと同じMDを作れる元データを作成することは不可能である したがって、MDが一致することをもって、互いが保持している元データの同一性が担保できる
MDによる同一性確認はネットワーク上での本人確認にも応用されている
SNMPの用語 「RMON」
RMONとは、Remote MONitoring MIBの略 これはMIBのうち、ネットワークの回線を監視するパラメータ群からなるMIBのこと。 例として、MRTG(Multi Router Traffic Grapher ※)などを用いてトラフィックの状況をグラフ化したりできる。
以上
Pythonことはじめ
はじめに
来月からPythonでスクリプトを書く機会が増えそうなので、環境構築とか公式ドキュメントのリンクを自分用に整理しました📝
環境構築
Pythonのパッケージ管理については以下がわかりやすかったです
当時、Webで観測していた範囲だとバージョン管理はRyeがよさそうでした👒
追伸: uvも支持されているようです > uvが良いので今日から暫く使ってみます
pyenv は少なくとも学習中にはあまり必要ではないようです
- pyenvを初心者に薦めるのはもうやめよう
- Pyenvって必要ですか?
- 一般的な用途ではマイナーバージョンまで別々に保持する必要はないはず
- Pythonのバージョンの切り替えはコマンド名の使い分け(python3.7、python3.8)で十分なはず
因みにMSのドキュメントは pip + venv
- ターミナルを開き、HelloWorld プロジェクト フォルダー内で、次のコマンドを使用して .venv という名前の仮想環境を作成します:
python3 -m venv .venv。 - 仮想環境をアクティブにするには、
source .venv/bin/activateと入力 ~
ツール
最近だと↓ な感じ? 🐍
- Ruff - Visual Studio Marketplace
- 新しい静的コード解析ツール「Ruff」をご紹介 | gihyo.jp
- Mypy Type Checker - Visual Studio Marketplace
- Visual Studio Codeに新しいPython拡張機能が仲間入り
- pytest: helps you write better programs
- pytest - ゼロから学ぶ Python
少し前の定番リンターは Flake8, Black だった?
VSCodeのマニュアルは、
公式情報
- Wikipediaによると公式サイトは https://www.python.org/ -> documentation
- パッケージの共有リポジトリは PyPI
- Pythonの特徴を簡潔に書き表した19の格言集が Zen of Python
- ↑ を正式に書き起こしたものが PEP(Python Enhancement Proposal)
- ↑ のPEP8が Python コードのスタイルガイド として知られている
独学用
Pythonとは~みたいな話は、WEB+DB PRESS総集編[Vol.1~120]の書き下ろし記事を参考にしました。↓ の版が入手しやすいかも。
認定資格は公式ドキュメントのチュートリアルを教材にしているので、初心者の理解度チェックによいです。このブログの公開時点では模試3回分は無料公開されていました。
どんなライブラリがあるか~については、生成AIに「代表的なメソッド3つとサンプルコードをかいて~」って聞くのがとっつきやすいかと..
知っておけば身を助けるかも..
さいごに
あとは奨励されている資格があるので取得に向けて準備中。 プログラミングスクール(RoR、JS)はまた休会かなぁ..😑
以上
30代でプログラミングスクールに入会してWeb開発を学ぶ_12カ月目ふりかえり
目次
はじめに
2023年6月1日に入会したオンライン制のプログラミングスクール(フィヨルドブートキャンプ(FBC))で学んだことや思ったことを書き留めます
これから書くこと
- FBC入会から12カ月経過(活動: 9か月、休会: 3か月)した時点でのふりかえり
フィヨルドブートキャンプでの活動状況
学習時間について
- 2023年10月に職場環境が変わり活動時間は概ね半減。休会へ(12/02 - 02/29)
- 復会直後は2週間くらい業務輻輳と体調不良で何もできず、それ以降は以下の通り
- 9ヶ月間の合計:855.5H = 23年 6月~11月: 710.0H, 3月: 16.5H, 4月: 51.0H, 5月:78.0H

プラクティスについて
復会後3カ月で対応したのは
- OOP(オブジェクト指向プログラム)の課題を2本。これだけで約2カ月..💦
- Webアプリ(Sinatra&PostgreSQL)。PostgreSQLの導入に手間取る🐘
- (勝手に回り道(Docker独学)して約1週間を余計に溶かす🐳)
- RoR(ポリモーフィック)。Railsガイドを読んで少し分かった気がする🚂
- JS。入門本を隙間時間で読む📚
休会について
- 公式HPに記載はありませんが最大3回まで休会可能でした。(当時)
- 活動時間をとれないなら毎月約3万円が消えていくだけなので致し方なし💸
- 覚えなおしを通じて、ちゃんと理解せず誤魔化してた分を見直す日々。知らなかった内容もチラホラ..💦
- 未来の自分が困らないようにしたい
直近6か月の取り組みや雑感
現場で小さなスクリプト(Python3とか)をコーディングするも苦戦
- 色々と怪しい感じで書いている自覚はあれど、学習時間が足りない💩
- gitをはじめ、ツールの使い方とかもイマイチ身についてない💦
PC1台で完結しない作業環境に苦戦(色々と忘れてる)
- VSCodeを常に使えるとは限らない、ツールへのアクセス制約、穴ほり.. etc
休会前の日報をサルベージ..せず
- 時間効率を含めると、価値が薄そうでやる気でず..🗑️
- ふりかえらず進むことにする🏃♂️
職業訓練時代のことを思い出す
- 宅内環境の整理中に、職業訓練やその後の備忘録などを発掘
- 喉元をすぎて熱さを忘れてた👹
メインPCを変更(Windows11 ← MacBookPro)
開発環境を仮想環境化(Debian on WSL2)
- 構築&破棄がお手軽(Mac初期化は手付かずも、WSLは数十回は作り直し済み)
- MWのインストール手順のチェックとかやりやすい
英語を頑張るのをやめる
- 公式文書(英語)は躊躇わず Google翻訳 & DeepL(少し自力で読むとかしない。原文みるのは最終手段)
- コミットログを日本語で書く。英作文の実態は生成AIにほぼ丸投げだったので..
- 得意分野(日本語🎌)を活かす。苦手分野(英語🗽)を無闇に絡めない
手元の生成AI事情(Claude3(Sonnet)も使い始めて、ChatGPTと併用。)
- 手詰まったときのアドバイザー&公式文書を読みとくサポートとして使用中
- いまだ非課金。
- 自分の質問内容だと劇的に優れてる感触ないので(レス遅いのが気になる)
- それでも自分の理解力&集中力がボトルネックになっている状態😵💫
- 大体合っている回答でも、合ってない部分に(仕事なら)一発アウトなネタがあることを実感💀
- なぜそれでいいのか/問題にならないかを理解しないと仕事で使えない
学んだこと
WSL2での作業方法
- テンプレ環境を作る > ディストリビューションをエクスポートする、WSL 上で同一ディストリビューションの環境を複数インストール・管理する
code --remote wsl+<distro name> <path in WSL>での起動が便利 > リモートフォルダまたはワークスペースを開く- デバッガの動かし方 > デバッグ拡張機能
- デフォルトユーザ を変更 > WSL での詳細設定の構成。
- ショートカット集 > 過去の自分に教えなければならないVSCodeのショートカット
迷子になったら、いったん公式のチュートリアルを読んでみる
- 個別の調べごとの参照先がチュートリアルだったことは経験上ないので意識的に。
- サラッと読めないからといって読み飛ばす、とかえって遠回りになる(こともある)。一晩以上かけてでもハンズオンした方がいい(こともある)。
- リンク先 > Rails
、PostgreSQL、Docker
- フツーに検索するとRailsは別のサイトに導かれそう..
さいごに
直近はインフラ要素が多かったこともあり、とあるインフラエンジニアの方の技術ブログを拝見していたのですが..

とのこと。
インフラとアプリで違いはあれど一人前になるには~という意味では同じなのではと思うも、未だにスクールを卒業してスタートラインに立つメドはたっておらず..🤧
BtoC、ベンチャー、スタートアップ についての理解が足りていなかったことにも気づき、いろいろと現実が見えてきてしまった今日この頃です🙄
以上
腰痛にはトレーニングがいいかも
目次
はじめに
昨年に悩まされた腰の具合が今年はいまのところイイ感じです。 今年の1月からジム通い(近所の公営体育館、週一)を再開したのが功を奏している気がするので、実践中のトレーニングについて解説動画のリンクをまとめました🏋️♂️
なお当方は、昨年時点では整形外科でMRI検査をしたものの所見はありませんでした(その程度の腰痛です)。
そして腰痛やトレーニングについて専門的な知識をもたない素人なのであしからず🙏
腰痛対策になっていそうなトレーニング
ボディビルが目的ではないので、男性なら最低xxkgから! とか思わず、ムリなく10-15回こなせる負荷(重量)をこなすのがよさそうです。
- トレーニングで腰痛を避ける方法
- 【クランチ】これが出来なくて他の腹筋運動をやるな!
- 【レッグレイズ】下っ腹に効かない人へ
- 【デッドリフト】腰は鍛えなきゃ逆に腰痛になりやすい。
- 【レネゲイドロウ】体幹を鍛える
- 「アダクション」の使い方
- 「アブダクション」の使い方
- 【肘膝ツイスト腹筋】1日10回で引き締まったお腹が手に入る!
さいごに
ジムに行くのが怠いと感じた時にみている動画リンクです。 なかやまきんに君の楽し気な取材をみているとモチベがあがります💪
お手入れしないと日常生活に支障が出る年齢に差し掛かってきたか~、と考えると少し切ないですが、1回300円 & 40~50Hの補強運動ならまだ大したメンテコストではないですね👛
最後までご覧いただきありがとうございました🙏
以上
Rubyでオブジェクト指向を学習したときに調べたこと
目次
はじめに
プログラミングスクールでボウリングのスコア計算プログラムをオブジェクト指向で書いたときのメモ書きです。休会明けで色々と忘れており、Rubyのインスタンスやメソッドについて色々と調べたのでまとめました🎳
課題のポイントは👇になるかと思います。
- ストライクは 'X' で表示される。それ以外は数字。
- 各フレームは1投 or 2投。最終フレームは3投目があるかも。
- ボーナス得点の算出はフレームをまたぐ。
# 入力: 投球結果 出力: 合計点。 $ ruby bowling.rb '0,1,2,3,4,5,0,1,2,3,4,5,0,1,2,3,X,X,1,0' 68
オブジェクト指向プログラミングについて
考え方について
komagataのブログでは以下のように説明されています。
全てをクラス変数とクラスメソッドで処理するというのは手続き型プログラミングの世界です。
オブジェクト指向プログラミングでは、極力「インスタンス変数を使ってそのインスタンス自身に処理させる」というのが基本です
どれが良い悪いというのはないですが、オブジェクト指向プログラミングは極力、実体(インスタンス)が個別に持つ情報を利用してインスタンスメソッドを呼び出して処理する。そういう書き方が基本です。
また、メンターの方からは以下のようなコメントをいただきました。
オブジェクト指向プログラミングは擬人法プログラミングだと思ってください。
オブジェクトは人間です。自分のことは自分が一番よくわかっていて、一人で全部できる大人です。
クラスメソッドとインスタンスメソッドについて
【プログラミング初心者向け】クラスメソッドとインスタンスメソッドはどう使い分けるべき?で色々と説明されていますが、まずはインスタンスメソッドで実装することを目指せばよさそうです。
オブジェクト指向的に適切なクラス設計がされていれば、クラスメソッドが登場する回数はインスタンスメソッドに比べてずっと少ないはずです。
文法は、以下の公式リファレンスやブログが参考になりました。
インスタンス変数について
改訂版・(あなたの周りでも見かけるかもしれない)インスタンス変数の間違った使い方によると以下のようになりそうです。
インスタンスごとに保持する必然性がある(別々の値になる)データをセットする
- 大きいスコープがほしいという理由でインスタンス変数を使わない
変数のスコープ(変数の寿命)が不必要に大きくなると、クラスが大きくなるにつれて保守性がどんどん低下
- 大きいスコープの変数がほしいならグローバル変数を使うべき(原則NGだけど)
- 処理の過程で使う一時的なデータは、引数、戻り値、ローカル変数で受け渡す
「じゃあインスタンス変数はいつ使えばいいの?」
インスタンス変数はオブジェクト指向プログラミングの文脈で、クラスを定義するときに使います。
たとえば、Person(人間)クラスに名前と血液型を保持させたいときは、名前と血液型をインスタンス変数に保存します。
基本的な考え方として、インスタンス変数はインスタンスが作成されてから(newされてから)最後までほとんど変わらない値だと思ってください。
🤔🤔🤔
メソッドについて
- Rubyではメソッド名と同じ名前のローカル変数を宣言しないようにしようによると、メソッド名は「動詞のみ」または「動詞 + 目的語」がオススメとのことです
参考にさせていただいた資料
- 説明に添えてあるサンプルコードがとてもわかりやすい書籍です。
- 第7章がとても参考になりました。スコープ、書き方、実装例 etc
- 複数のクラスを定義してレシートの集計を実装していきます。ライブコーディング動画。
感想
最後までお読んでいただきありがとうございました。
CI/CDわからないけどJenkinsでパイプラインをつくってみた
目次
はじめに
Jenkins(ver2.0系)のパイプラインで手作業をジョブ化した初心者のメモ書きです。
公式ユーザガイドは情報量が多くて、どこから読むべきかなのか少々わかりにくかったので、Declarative Pipelineでジョブを実装するまでに調べたことを整理しました。
想定する読者レベル
- Jenkins、CI/CDがよくわからない。
- Jenkinsでパイプラインを作って動かしてみたい。
Jenkinsについて
できることは大まかに👇な感じ
ver2.0のリリースが2016年なので、2017年前後に書かれた情報が多い印象です。
- Jenkins 2.0 最新事情 〜Make Jenkins Great Again〜
- Jenkins 2.0 Pipeline & Blue Ocean
- Jenkinsに関するQ&A part1(2022 Jenkins Day Japan) | CloudBees|テクマトリックス
- What is Jenkins?
使い方について
- 【CI奮闘記】第1章:Jenkinsを使う事=CI/CDではない
- 【CI奮闘記】第8章:Jenkinsは何が得意なの?
- GitHubからJenkinsとTerraformを使って仮想マシンをデプロイしてみた | IIJ Engineers Blog
環境構築
「親機/子機」を「コントローラ/エージェント」といいます。かつての「マスター/スレーブ」 > 用語集
インストール
コントローラに「Jenkins本体 & Java」、エージェントに「Java」をいれます。
- 手っ取り早くコントローラを構築したいならこちら
- Dockerのインストールが前提。
- APIキーの取得方法の説明もあります。
- 公式な手順はこちら。
- OSに直接インストールする方式
- Javaインストールの説明もあります。
コントローラとエージェントを紐付け
お試しで動かすだけならスキップして、エージェントなしでもOKです。
- 公式な動画解説(英語)は → Creating Agents
- 日本語の記事なら → 【CI奮闘記】第6章:エージェントを作ってみよう!
開発ツールを用意
お試しで動かすだけならスキップしてOKです。
- curl版のLinter を使用しました > Pipeline Development Tools
- Jenkinsコントローラと開発PCの間でHTTP通信する必要あり..
- JENKINS_URL=http://$JENKINS_USER:$JENKINS_USER_KEY@localhost:8080 をセット
- pipeline{} の外はノーチェック? 隅々までチェックしてない感じ。
- そのほか(まだ使ってません..)
- 非公式なnpm版 → jflint
- テストツール → jenkinsci/JenkinsPipelineUnit: Framework for unit testing Jenkins pipelines
パイプラインの書き方
Pipelineについて
- Declarative Pipeline
- いまのデフォルト。ver1ではプラグインだったっぽい
- Groovyを書くときはscriptブロックを切りだす
- 開始タグは pipeline
- Scripted Pipeline
- 柔軟さと属人性のトレードオフ。巷では非推奨な空気感。
- 全部Groovyで書く
- 開始タグは node
- 参考資料
Declarative Pipelineについて
- 公式の構文解説、サンプルコードとか
Groovyについて
- バージョン確認方法はこちら
- 基本構文はこちら
- デバッグ手法はこちら
- JenkinsDSLとはそこそこ違う(例: ×echo ⚪︎println)ので、Script{}の実装を関数に切り出すと使いやすいかも。
パイプラインをパラメータ付きビルドで動かす
コントローラからファイルを取得します。実行環境は Ubuntu 22.04.3 LTS🐧
動かし方は以下の通り
- 新規ジョブの作成 > パイプラインを選択 > パイプラインの定義にサンプルコードをコピペして保存。
- ビルド実行する(エラー終了)。画面を再ロードすると"パラメータ付きビルド"を選べるようになる。
- パラメータ付きビルドを実行して成功すれば、ビルドの成果物(ip.txt, hosts) をダウンロードしたり、Console Outputから実行ログをみれたりできます。
公式資料は → Getting started with Pipeline
// Jenkinsfile
pipeline {
agent any
parameters {
string(name: 'user_id', defaultValue: '999', description: '998 か 999 なら動くよ)')
booleanParam(name: 'require_confirmation', defaultValue: true, description: '実行確認したければオン')
}
stages {
stage('precheck') {
steps {
sh "uname -n; id; pwd; ls -l"
script {
checkPermission(params.user_id)
}
}
}
stage('confirmation') {
when {
expression { params.require_confirmation.toBoolean() }
}
steps {
input message: "やっていいかい # ${env.BUILD_NUMBER}",
ok: 'いいとも'
}
}
stage('execute') {
steps {
sh "ip a > ip.txt"
sh "cat /etc/hosts > hosts"
}
}
}
post {
always {
echo currentBuild.result
}
success {
archiveArtifacts artifacts: '*', onlyIfSuccessful: true
}
cleanup {
cleanWs()
}
}
}
def checkPermission(String userId) {
def allowedIds = ['998', '999']
if (!(allowedIds.contains(userId))) {
error "Permission denied: ID ${userId} is not allowed."
}
}
そのほか
グローバル変数について
- env: Jenkinsfile内ならenvironment{}、Jenkins全体ならダッシュボード >【Jenkinsの管理】でセット
- params: パラメータ付きビルド時のWeb画面からの入力欄の値(parameters{})
環境変数(env)の制約
- 文字列 or 戻り値が文字列となる関数 しかセットできないっぽい。これか..?
the Global Variable Reference only contains documentation for variables
使いやすそうな環境変数
- WORKSPACE、BUILD_USER_ID、JOB_NAME、GIT_BRANCH、GIT_URL とか?
"${xxx}" という変数の書き方
- Jenkins全体の環境変数を参照するときの書き方
- 式展開の書き方
- echo は文字列しかとれないので、配列やハッシュを出力したい時とかに使う
ヒアドキュメントの書き方
エージェントを動かしたい
- agent {} で指定する。
ハマったときは
- ワークスペース(env.WORKSPACE)をみればヒントがあるかも..
感想
ハンズオンしていけば段々と公式ユーザガイドを読むのが苦でなくなります(多分)📚
あとはやりたいことをキャッチアップしつつ頑張ってください(← 筆者がいまココ)☕
Jenkinsの主な用途はCI/CDだと思いますが、それ以外の自動化にも活用できますので自動化に取り組みたい人の第一歩の助けになれば幸いです。
最後までお読んでいただきありがとうございました。