如果你和你的团队有太多 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脚本执行。您可以安排在不同时间运行不同脚本,使用漂亮的Web GUI管理计划等。
版本控制
拥有某种版本控制下的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 有一个名为 jobs 的概念。任务是一组指令,您可以提供给 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的脚本。在此脚本内部,您有一行:
当作业运行时,您希望执行此脚本。为此,您需要创建一个构建步骤。
Jenkins允许您为一个作业指定多个构建步骤。对于您的目的,您需要添加一个Windows PowerShell构建步骤。要这样做,在作业配置屏幕上:
- 单击添加构建步骤按钮,并选择Windows PowerShell。

2. 在命令框中,如下所示,dot source你Git仓库中的PowerShell脚本。你可以看到我们正在使用一个名为WORKSPACE
的PowerShell 环境变量。此变量表示当前工作目录(Git仓库的根目录)。

3. 现在点击保存以保存该作业。
现在你应该已经设置好了一个作业来从Git仓库调用一个PowerShell脚本!
执行PowerShell脚本
现在你已经创建了一个作业,请运行它并查看输出。
- 确保你在主作业界面。如果你为这个作业使用了Hello World作为名称,那么默认的URL将是http://localhost:8080/job/Hello world/。
- 在主作业界面,点击左侧的立即构建,如下所示。

点击立即构建将立即启动当前作业的构建。对于运行时间较长的复杂作业,你将有能力点击构建并实时查看输出。然而,在这种情况下,该作业将几乎立即运行。
4. 要查看结果,请点击构建旁边的绿色勾号。

如果一切按计划进行,你的输出将会看到类似以下的内容:

调度和触发器
现在您有一个可以在需要时运行并输出 Hello World 消息的作业。 但Jenkins的一个主要卖点是替代定期任务。 我们不想手动运行它。 如果重新打开该作业,您将看到一个名为生成触发器的部分。

这些是您在不需要点击立即构建按钮的情况下运行作业的选项。
创建时间表
有几种不同的选项可以创建触发器。 在此示例中,让我们保持简单。
- 选择定期构建。 此触发器允许您使用类似于cron的调度语法安排作业。
2.将作业设置为在周一、周三和周五上午7:30运行,如下所示。

3. 保存更改并等待。
当分配的日期和时间到达时,您将在构建历史下看到所需的脚本运行。

现在,您在Jenkins中安排了一个将定期执行的PowerShell脚本。