Jenkins応用

 



📚 Groovy(Jenkinsの内部言語)について

🔹 Groovyとは?

  • Jenkinsの内部で使われているプログラミング言語です。

  • パイプラインに複雑なロジックや条件分岐、繰り返し(ループ)などを組み込むことができます。

  • プログラム経験がある人には特に便利で、条件分岐やループなどの操作が簡単にできます。

🔹 どこで役立つ?

  • Jenkinsでの複雑なパイプライン作成に役立ちます。例えば、関数(functions)やif文、ループ(for文)などを使いたい場合です。

  • Groovyの基本的な書き方や構文については、Googleで「Groovy loops」などを検索すればたくさん出てきます。

  • あまり使わないかもしれませんが、覚えておいて損はない知識です。必要ならその時に調べて使いましょう。


📊 Build Health(ビルドの健康状態)

🔹 ビルドの状態アイコン

  • 太陽(☀️): ビルドがすべて成功している。

  • 雨雲(🌧️): 成功よりも失敗が多い。

  • 雷雲(🌩️): ほとんどすべてのビルドが失敗している。

  • 曇りと晴れ(🌤️): いくつかのビルドは成功しているが、失敗もある。

これらのアイコンはビルドの状態をすぐに知らせてくれるので、何か問題があれば早く対処できます。


🛠️ トラブルシューティング(問題解決)

🔹 Replay(再実行)がない場合

  • 通常、JenkinsではReplay(再実行)が使えますが、エラーが発生した場合、再実行できないことがあります

  • その場合、成功したビルドを探して再実行を試みることが重要です。

  • エラーの原因を確認するために、コンソール出力を見てみましょう。エラーメッセージが原因を教えてくれることが多いです。

🔹 よくあるエラー原因

  • 波括弧({})のミス構文エラーがよくある原因です。

  • Googleでエラーメッセージを検索することも非常に効果的です。


🔑 Credentials(認証情報)

🔹 認証情報の設定方法

  • GitHubやAWSなどの外部リソースにアクセスするために、ユーザー名やパスワード、SSHキーなどを使います。

  • セキュリティの観点から、AWSの場合は、Jenkinsノードにアクセス権限を割り当てる方が安全です。

    • IAMロールをノードに割り当て、認証情報を直接入力するのではなく、AWSに必要なアクセス権を自動で付与する方法です。

🔹 セキュリティのポイント

  • Jenkinsは秘密情報(credentials)を管理できますが、できるだけIAMロールや自動的なアクセス制御を使うことをお勧めします。


📝 Jenkinsfileの名前

🔹 Jenkinsfileの名前変更

  • 通常、JenkinsではJenkinsfileという名前のファイルを使いますが、環境別に名前を変えたい場合があります。

  • 例:prod.Jenkinsfilestaging.Jenkinsfileなど。

🔹 Jenkinsfileの色

  • JenkinsfileVSCodeなどで編集するとき、名前が違うと色がつかないことがあります。

    • もし色付きで見たい場合は、一旦名前を変えて編集し、編集後に元の名前に戻すことができます。


🧩 複数のJenkinsfile

🔹 複数のJenkinsfileの設定

  • マルチブランチパイプラインを使っている場合、複数のJenkinsfileを使うことができます。

  • 同じリポジトリ内に複数のJenkinsfileを配置する場合、どのファイルを使うかを明示的に指定する必要があります。

🔹 Jenkinsで複数のJenkinsfileを使う方法

  1. 新しくtest.jenkinsfileなどのファイルを作成し、その中にパイプラインの設定を記述します。

  2. Jenkinsで、パイプラインの設定時に、使いたいJenkinsfileの名前を指定します。

  3. これで、異なる名前のJenkinsfileを使って、複数の環境やアプリケーションに対応できます。


🛑 デバッグのコツ

🔹 待機時間を挿入する(sleep)

  • Kubernetesのような環境では、次のステップに進む前に待機時間を挿入することがよくあります。

    • 例えば、Kubernetesでリソースを削除する場合、削除が完了するのを待つ必要があります。

  • Jenkinsで一定時間待機させるには、sleepコマンドを使います。

steps {
sleep 10 // 10秒待機 }
  • デバッグリソースの状態を待機するために使える便利な方法です。


🧑‍💻If文 (条件分岐) 

  • 目的: パラメータに応じて処理を分ける方法

  • : 例えば、サブマリンの発射ボタンのように、2つのキーを同時に回して押す必要がある場面。これをJenkinsのパイプラインで表現できます。

  • 実装方法:

    • Boolean パラメータ(真偽値)を使い、「もし false なら処理を止める」といった条件を設定。

    • 成功の代わりに、失敗ではなく成功として処理を終了させることができます。

  • 重要なポイント:

    • 失敗と見なさず、条件が満たされていないだけで処理を中止する方法を取ることが推奨されます。これにより、プロダクション環境で不安を与えることを避けます。


🔧関数 (Function) 

  • 目的: 再利用可能なコードを関数として定義し、何度も呼び出せるようにする

  • 実装方法:

    • defを使って関数を定義(例: def myFunction())。

    • 関数内でパラメータを受け取ったり、文字列のフォーマットや入力のサニタイズを行う。

    • 変数スコープに注意。関数内で定義した変数はその関数内でしか使えません。

  • 重要なポイント:

    • 変数スコープを理解することが非常に重要です。特に、関数内で定義された変数は他の場所では使用できません。


📏変数スコープ (Variable Scope) 

  • 目的: 変数のスコープ(有効範囲)を理解する

  • 詳細:

    • 変数は宣言された場所によってその使用範囲が決まります。

    • パイプライン全体で使える変数を定義するには、environmentブロックを使用します。

    • 関数内で使いたい変数は、その関数のパラメータとして渡す必要があります。

    • もし他のステージで使いたい変数があれば、そのステージごとに定義していく必要があります。

  • 重要なポイント:

    • 変数が期待通りに動作しない場合は、そのスコープを確認し、適切にパラメータを渡すことを心がけましょう。


🖥️Bashスクリプトで複数行を実行する方法 

  • 目的: 複数行のBashコマンドをJenkinsで実行する方法

  • 実装方法:

    • 複数行のコマンドを実行するには、"""(三重引用符)で囲みます。これにより、複数行のコマンドを1つのステップとして実行できます。

    • 注意点: テキストエディタによっては、余分な引用符が追加される場合があるので、確認が必要です。


🚀ジョブからジョブをトリガーする方法 

  • 目的: 1つのジョブの実行後に、別のジョブをトリガーする方法

  • 実装方法:

    • ジョブ内でbuildコマンドを使って、他のジョブを呼び出します。

    • 他のジョブにパラメータを渡すこともできます。

  • 重要なポイント:

    • これにより、特定の条件下で自動的に他のジョブを実行させることができます。


🔄 ジョブ間でパラメータを渡す方法 

  • 目的: 1つのジョブで設定したパラメータを、別のジョブに渡して実行する方法

  • 実装方法:

    • build job: 'JobName', parameters: [booleanParam(name: 'MyBoolean', value: true)]のように、パラメータを設定して渡すことができます。

    • ジョブ間でパラメータを渡す際には、パラメータの名前や値を正確に指定する必要があります。

  • 重要なポイント:

    • 渡すパラメータを設定する際には、Jenkinsfileの構文に従って正しく書く必要があり、少し複雑ですが、この方法をマスターすれば自動化の幅が広がります。


🔌Jenkinsプラグインの使用 

  • 目的: Jenkinsに機能を追加するためにプラグインをインストールする方法

  • 実装方法:

    • Jenkinsの「管理」→「プラグインの管理」から、必要なプラグイン(例: GitHubやKubernetes、Green Ballsなど)をインストールします。

    • インストール後は、Jenkinsの再起動が必要な場合があります。

  • 重要なポイント:

    • プラグインを活用することで、Jenkinsの機能が大幅に向上します。特にビルド結果の色変更や通知機能など、多岐にわたる機能が追加できます。


前の記事:Jenkins パイプライン:変数と環境変数