当前位置:网站首页 > 更多 > 玩电脑 > 正文

[玩转系统] 持续部署我的 PowerShell 模块

作者:精品下载站 日期:2024-12-14 07:14:51 浏览:14 分类:玩电脑

持续部署我的 PowerShell 模块


持续构建模块的新版本并将其部署到内部存储库(或 PowerShell Gallery)是我真正喜欢的事情。这样我就可以推送我的代码并让自动化处理其余的事情。以下是我的一些经验教训。

部署在标签上

首先,我通常只触发标签上的部署工作流程,这样我就可以手动决定何时进行发布以及发布的版本,而无需依赖任何复杂的方法。我的模块通常很小,而且我们很少会超过几个人来处理每个模块,所以我试图让事情尽可能简单。

使用 git 创建标签非常简单,我只需这样做:

git tag -a 1.4.2 -m 'Release 1.4.2'

我用我想要的版本注释每个标签,然后通过使用 gitversion 我可以从我的标签解析语义版本,并且我将始终获得正确的版本。 Gitversion 还跟踪构建号,以便我可以在每次提交上构建和测试(即使我不会将结果部署到存储库)。您可以在这里阅读有关 gitversion 的更多信息:https://gitversion.readthedocs.io/en/latest/

构建我的模块

在处理我的模块时,我喜欢将代码分成不同的文件。首先,我通常有两个子文件夹:私人和公共。每个文件都包含具有私有或公共功能的 ps1 文件。在这些文件夹中,我通常为每组或一组类似功能创建一个 ps1。这就是我已经习惯的工作方式,你可能有另一种做事方式,那很好。然而,我发现拥有许多文件有时会使模块的加载时间非常慢,因此我想出了一种在构建时将所有文件合并到一个大 psm1 文件中的方法。我只是获取所有内容并将其输出到 .\bin\MyModule\MyModule.psm1。这是构建之前我的模块文件夹的示例:

[玩转系统] 持续部署我的 PowerShell 模块

我也经常忘记导出我的公共功能。一开始,我每个函数都有一个 ps1 文件,并使用文件名来查找要导出的函数,但这给了我处理许多文件的方法,所以我现在使用 AST 来解析我的 Public 文件夹中所有 ps1 文件中的函数。这样我就可以在 psm1 文件末尾添加具有正确参数的 Export-ModuleMember。

我用来将公共文件夹中的所有文件组合到脚本块并解析函数和别名的代码片段如下:

$PublicScriptBlock = [ScriptBlock]::Create((Get-ChildItem -Path $PublicFolder | Get-Content | Out-String))
$PublicFunctions = $PublicScriptBlock.Ast.FindAll({ $args[0] -is [System.Management.Automation.Language.FunctionDefinitionAst]},$false).Name
$PublicAlias = $PublicScriptBlock.Ast.FindAll({ $args[0] -is [System.Management.Automation.Language.ParamBlockAst] },$true).Attributes.Where{$_.TypeName.FullName -eq 'alias'}.PositionalArguments.Value

更新模块清单

由于我使用 gitversion,因此可以通过以下命令找到我的新版本:

$gitversion = gitversion | ConvertFrom-Json
if($gitversion.BuildMetaData) {
$ModuleVersion = $gitversion.MajorMinorPatch + '.' + $gitversion.BuildMetaData
}
else {
$ModuleVersion = $gitversion.MajorMinorPatch
}

如果我最新的提交是一个名为 1.4.2 的标签,这将是我的新版本。但是,如果我在该标签后添加三个提交,我的新版本将是 1.4.2.3。

接下来我需要更新我的 ModuleManifest。对于这一点,Update-ModuleManifest 非常棒!如果您没有,请通过安装库中的 PowerShellGet 模块来获取它 (https://www.powershellgallery.com/packages/PowerShellGet)。如果您已经拥有它,请确保您使用的是最新版本。

Update-ModuleManifest -Path '.\bin\MyModule\MyModule.psd1' -ModuleVersion $ModuleVersion

您需要 登录账户 后才能发表评论

取消回复欢迎 发表评论:

关灯