如果你和你的团队有太多零散的PowerShell脚本,不知道它们到底在哪运行,那么这篇文章就是为你准备的。在本文中,你将学习如何设置流行的Jenkins自动化服务器来管理和执行PowerShell脚本!
你将学习如何将Git版本控制与Jenkins集成,然后设置和安排PowerShell脚本在预定的时间运行。
PowerShell脚本的散乱:这不是一个好办法
作为一名自动化工程师,我和我的团队所面临的主要挑战之一就是预定的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.
- …以此类推。
所有在这些服务器上运行的代码都保存在该服务器上的临时目录中,或者作为共享驱动器上的脚本文件夹。这真是一场噩梦!
信不信由你,就大多数情况而言,这个系统运行得很好。脚本按预期运行,我们在所有的服务器上都有备份。从来没有代码丢失过。
可以理解为什么每个人都对这个现状感到满意。改进这个系统并不是优先考虑的事情。
但是這個系統並不完美。雖然它滿足了一些工程師的需求,但它無法無限擴展或輕易地進行維護。這個系統也不允許任何排程任務的靈活性。這種僵硬性導致同一個腳本的十個版本(稍作修改)被排程執行。
進入 Jenkins。
為什麼要選擇 Jenkins?
在所有可用於排程和執行 PowerShell 腳本的選項中,為什麼要選擇 Jenkins?使用 Jenkins 伺服器來執行 PowerShell 腳本有許多好處。以下是其中幾個亮點:
更好的控制
一旦您將所有 PowerShell 腳本放在一個地方,就不必再擔心腳本在哪台伺服器上運行。您現在可以忘記兩年前編寫的已經過時並導致某些服務帳戶被鎖定的腳本。
您可以將腳本組織成易於導航的文件夾結構,精確控制所有腳本的執行位置,甚至使用管道將大型的單塊腳本拆分為可以在多個作業中重複使用的小模塊。
輕鬆排程
通過 Jenkins,您可以在一個中央位置完全支持排程 PowerShell 腳本的執行。您可以安排不同的腳本在不同時間運行並帶有不同的參數,使用網頁界面輕鬆管理排程等。
版本控制
擁有某種版本控制的PowerShell腳本可以解決許多不同的問題。其中之一是能夠與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插件。為此,在主頁:
- 點擊管理Jenkins,然後點擊管理插件。
- 點擊可用選項卡。
- 在屏幕的右側,在篩選框中輸入powershell。然後,你應該會看到PowerShell插件出現,如下所示。

4. 選中安裝复选框,然後點擊安裝但不重啟。
5. 安裝 PowerShell 插件後,當您稍後提供 PowerShell 腳本時,將創建一個 Windows PowerShell 構建步驟選項。
創建作業
Jenkins 有一個名為 作業 的概念。作業是一組指示,您可以提供給 Jenkins,讓它知道要執行哪些腳本、遵守哪些排程等等。在本節中,您將創建一個作業,該作業將執行一個 PowerShell 腳本。為此,您將設置一個作業,該作業將將 Git 存儲庫克隆到 Jenkins 中。
- 登入 Jenkins 後,點擊右上角的 新建項目。

2. 然後會顯示如下所示的屏幕。選擇 自由樣式項目。這種類型的作業將提供最大的靈活性。

3. 為作業命名為 Hello World,然後點擊 確定。

4. 現在您應該在 作業配置 屏幕上。您現在應該看到一個名為 源代碼管理 的部分,如下所示。這允許您指定 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的腳本。在這個腳本中,您只有一行代碼:
當作業運行時,您想執行此腳本。為此,您需要創建一個構建步驟。
Jenkins允許您為每個作業指定多個構建步驟。對於您的目的,您需要添加一個Windows PowerShell構建步驟。為此,在作業配置屏幕上:
- 單擊添加構建步驟按鈕,然後選擇Windows PowerShell。

2. 在指令框中,按照下面所示的方式点源Git存储库中的PowerShell脚本。您可以看到我们正在使用一个名为WORKSPACE
的PowerShell环境变量。该变量表示当前工作目录(Git存储库的根目录)。

3. 现在点击保存以保存作业。
现在您已经设置了一个作业来调用Git存储库中的PowerShell脚本!
执行PowerShell脚本
现在您已经创建了一个作业,请运行它并查看输出结果。
- 确保您处于主作业界面。如果您使用了Hello World作为此作业的名称,则默认URL将为http://localhost:8080/job/Hello world/。
- 在主作业界面上,点击左侧的立即构建,如下图所示。

点击立即构建后,当前作业将立即开始构建。对于复杂且运行时间较长的作业,您将能够点击构建并实时查看输出结果。然而,在本例中,该作业将几乎瞬间运行完毕。
4. 要查看结果,请点击构建旁边的绿色勾号。

如果一切按计划进行,您将在输出中看到类似以下内容:

排程和觸發器
現在您已經有了一個可以根據需要運行並輸出 Hello World 訊息的作業。但是,Jenkins的主要賣點之一是替代定期任務。我們不希望必須進去手動運行它。如果重新打開該作業,您將看到一個名為 Build Triggers 的部分。

這些是使作業運行而無需在Jenkins中單擊 Build Now 的選項。
創建一個排程
有幾個不同的選項可以創建觸發器。在這個例子中,讓我們保持簡單。
- 選擇定期構建。此觸發器允許您使用類似於cron的排程語法來排程作業。
2.將作業設定為在每週一、週三和週五上午7:30運行,如下所示。

3.保存更改並等待。
當指定的日期和時間到達時,您將在構建歷史記錄下看到所需的腳本運行。

現在,您在Jenkins中有了一個定期執行的PowerShell腳本。