あなたとあなたのチームが、どこで実行されているかわからないまま、大量のPowerShellスクリプトを持っている場合、この記事はあなたのためです。この記事では、人気のあるJenkins自動化サーバーを設定して、PowerShellスクリプトを管理および実行する方法を学びます!
Gitバージョン管理をJenkinsと統合し、事前に定義されたスケジュールでPowerShellスクリプトを設定して実行する方法も学びます。
PowerShellスクリプトの散乱:これではうまくいかない
自動化エンジニアとして、私のチームと私が克服しなければならなかった主な課題の1つは、スケジュールされたPowerShellスクリプトの散乱でした。多くの異なる場所からスケジュールされ、実行されるPowerShellスクリプトが数十あることを発見しました。
各エンジニアまたはエンジニアチームは、自分自身のサーバーでスケジュールされたものを持っていました。各種類のスクリプトは、そのサービスを実行しているサーバーで実行されました。
- A domain controller ran all of the Active Directory scripts.
- Exchangeサーバーは、すべてのExchangeスクリプトを実行しました。
- A member server ran all networking team scripts.
- A member server ran all of the database scripts for the DBAs.
- A member server ran all of the security team’s scripts.
- …そして、続いていきます
これらのサーバーのいずれかで実行されているすべてのコードは、そのサーバーの一時ディレクトリにスクリプトファイルとして保存されるか、共有ドライブのスクリプトフォルダーに保存されていました。それは悪夢でした!
信じられないかもしれませんが、大部分では、このシステムはうまく動作していました。スクリプトは望む通りに実行され、すべてのサーバーにはバックアップがありました。コードは失われることはありませんでした。
この現状に満足しているのは理解できます。このシステムの改善は優先事項ではありませんでした。
しかし、このシステムには欠点もありました。一部のエンジニアのニーズを満たすことはできたものの、スケーラビリティや維持管理の面で永続的に使い続けることはできませんでした。また、このシステムではスケジュールされたタスクに柔軟性を持たせることもできませんでした。この厳格さにより、同じスクリプトの10のバージョン(わずかな編集が加えられたもの)がスケジュールされることになりました。
そこで、Jenkinsの登場です。
なぜJenkinsを選ぶのでしょうか?
PowerShellスクリプトをスケジュールして実行するためのオプションの中で、なぜJenkinsを選ぶのでしょうか?Jenkinsを使用することで、多くの利点が得られます。以下はいくつかのハイライトです。
より良い制御
PowerShellスクリプトを1つの場所にまとめると、どのサーバーでスクリプトが実行されるのかを心配する必要がありません。2年前に書かれたスクリプトが古くなり、いくつかのサービスアカウントをロックアウトしていることを忘れることができます。
スクリプトを簡単にナビゲートできるフォルダ構造に整理することができ、スクリプトの実行場所を正確に制御することもできます。さらに、パイプラインを使用して大きなモノリシックなスクリプトを小さなモジュラーなチャンクに分割し、複数のジョブで再利用することもできます。
簡単なスケジューリング
Jenkinsを使用すると、PowerShellスクリプトの実行をスケジュールするための1つの中央の場所があります。さまざまなスクリプトを異なる時間に異なるパラメータで実行することができ、スケジュールを管理するための素敵なWeb GUIも利用できます。
バージョン管理
PowerShellスクリプトをバージョン管理ツールで管理すると、さまざまな問題が解決されます。そのうちの1つは、Jenkinsなどのツールと統合できることです。JenkinsはGitや他のバージョン管理製品と統合して、自動的に最新バージョンを取得することができます。
統合されたログ
PowerShellスクリプトがあちこちに散らばってログを作成すると、ログはあちこちに散らばることになります。Jenkinsを使用すると、スケジュールされたタスクが作成したログファイルを探し回る必要はなく、ウェブサイト上の読みやすい出力ウィンドウで優れたログを取得できます。
前提条件/要件
この記事では、JenkinsでPowerShellスクリプトを実行するための手順を説明します。そのためには、以下のものが必要です。
- A running Jenkins server
- JenkinsサーバーまたはビルドエージェントにGitがインストールされていること
- A Git repo set up containing your PowerShell scripts (Be sure you know the repo URL)
- Jenkins Gitプラグイン
PowerShellプラグインのインストール
JenkinsでPowerShellスクリプトを実行するには、PowerShellプラグインをインストールする必要があります。以下の手順で行います。
- メインページで、Manage Jenkinsをクリックし、Manage Pluginsをクリックします。
- Availableタブをクリックします。
- 画面の右側のFilterボックスにpowershellと入力します。すると、以下のようにPowerShellプラグインが表示されます。

4. チェックボックスを選択し、Install without restartをクリックします。
5. PowerShellプラグインをインストールすると、後ほどPowerShellスクリプトを実行するためのWindows PowerShellビルドステップオプションが作成されます。
ジョブの作成
Jenkinsにはジョブの概念があります。ジョブは、Jenkinsに実行するスクリプトやスケジュールなどを指示するための一連の命令です。このセクションでは、PowerShellスクリプトを実行するジョブを作成します。そのために、JenkinsにGitリポジトリをクローンするジョブを設定します。
- Jenkinsにログインしたら、右上隅にあるNew Itemをクリックします。

2. 以下の画面が表示されます。 Freestyle projectを選択してください。このタイプのジョブは最も柔軟性があります。

3. ジョブにHello Worldという名前を付け、OKをクリックします。

4. これでJob Configuration画面に移動します。以下のようにSource Code Managementというセクションが表示されるはずです。これにより、ジョブで使用するためにJenkinsがクローンするGitリポジトリを指定できます。このデモでは、Gitを選択してください。

5. Gitをクリックすると、Gitリポジトリの情報を入力するオプションが表示されます。これはPowerShellスクリプトが含まれるGitリポジトリです。

以下に各フィールドの詳細を示します。
- リポジトリのURL – Gitリポジトリを指すURLです。例えば、TFSの場合、URLは次のようになります:*http://SERVERNAME:8080/tfs//Messaging/_git/Dynamic Distro List*
- 資格情報 – リポジトリにアクセスできるユーザー名とパスワードです。すでに設定されていない場合は、追加をクリックして作成することができます。
- 名前 – 空白のままにしておくことができます。
- Refspec – 空白のままにしておくことができます。
- ブランチ指定子 – このジョブで使用するブランチを選択することができます。デフォルトでは、masterブランチを取得しますが、別のテスト用ブランチを使用したい場合は、ここで指定することができます。
ジョブごとに複数のリポジトリをクローンすることもできます。上記の「リポジトリの追加」ボタンを使用すると便利です。これは、モジュールや他の依存関係を別のリポジトリに必要とする場合に役立ちます。
Windows PowerShellビルドステップの追加
おそらく、GitリポジトリのマスターブランチのルートにHello World.ps1という名前のスクリプトがあります。このスクリプトの中には、1行のコードがあります:
ジョブが実行されるときにこのスクリプトを実行したいとします。そのためには、ビルドステップを作成する必要があります。
Jenkinsでは、ジョブごとに複数のビルドステップを指定することができます。目的に合わせて、Windows PowerShellビルドステップを追加する必要があります。ジョブ設定画面で次の手順を実行してください:
- ビルドステップの追加ボタンをクリックし、Windows PowerShellを選択します。

2. コマンドボックス内に、以下に示すように、GitリポジトリにあるPowerShellスクリプトをドットソースしてください。PowerShellの環境変数であるWORKSPACE
を使用していることがわかります。この変数は、現在の作業ディレクトリ(Gitリポジトリのルートフォルダ)を表します。

3. 今すぐ保存をクリックしてジョブを保存してください。
これで、GitリポジトリからPowerShellスクリプトを呼び出すためのジョブが設定されました!
PowerShellスクリプトの実行
ジョブを作成したので、実行して出力を確認してください。
- メインのジョブ画面にいることを確認してください。このジョブにHello Worldという名前を使用した場合、デフォルトのURLはhttp://localhost:8080/job/Hello world/になります。
- メインのジョブ画面で、以下に示すように左側の今すぐビルドをクリックしてください。

ビルドを実行をクリックすると、現在のジョブのビルドがすぐに開始されます。複雑なジョブや実行に時間がかかるジョブの場合、ビルドをクリックして実行中の出力をリアルタイムで表示することができます。しかし、この場合はジョブがほぼ即座に実行されます。
4. 結果を確認するには、ビルドの横にある緑色のチェックをクリックしてください。

すべてが計画通りに進んだ場合、出力には以下のような内容が表示されます。

スケジュールとトリガー
必要な時に実行できるジョブができました。また、Hello Worldメッセージを出力します。しかし、Jenkinsの主なセールスポイントの1つはスケジュールタスクの置換です。手動で実行する必要はありません。そのジョブを再度開くと、Build Triggersというセクションがあることに気づくでしょう。

これらは、JenkinsでBuild Nowをクリックする必要なしにジョブを実行するためのオプションです。
スケジュールの作成
トリガーの作成にはいくつかの異なるオプションがあります。この例では、簡単にしてみましょう。
- 定期的にビルドを選択します。このトリガーでは、cronのようなスケジュール構文を使用してジョブをスケジュールできます。
2. ジョブを以下のように設定して、毎週月曜日、水曜日、金曜日の午前7時30分に実行するようにします。

3. 変更を保存し、待ちます。
割り当てられた日時が訪れると、Build Historyの下でスクリプトが正常に実行されたことが表示されます。

これで、Jenkinsで定期的に実行されるPowerShellスクリプトが用意されました。