在我的帖子里谈论 您的第一个内部PSScript存储库,我使用网络分享来展示开始的容易。我将把这个想法带到下一步并将模块发布到一个 尼古特 服务器。这就是我们在内部管理模块的方式。

指数

为什么要使用Nuget服务器?

Nuget Server或Feed是推荐方式来分发模块。这基本上是psgallery的。 Nuget饲料将更好地规模,因为它索引了上传时的包。

Nuget Feed还可以轻松地将模块分配给不属于您域名的系统。这只是一个网站,当它归结为它。如果您打开访问DMZ的访问,那么这些系统可以将模块从此馈送中取出。

文件共享对于本地测试很好,但对于您想要的生产。使用Docker,您将看到与Nuget Feed测试同样易于测试。

入门

我们需要的第一件事是Nuget服务器。有许多选项可以创建您自己的网站到主机源,并且有一些预构建的服务器可用。 Microsoft Docs网站在这里有一个很好的列表: 托管自己的尼古特饲料。如果您已经使用了VSTS(Visual Studio Team Services),他们有一个 尼古特包管理 提供您可以使用的。对于今天的帖子,我们将在Docker中旋转一个本地实例。

Docker运行Sunside / Simple-Nuget-Server

Sunside / Simple-Nuget-Server 是我能找到的第一个容器。这是我跑步启动这个实例的命令。

    $apiKey = New-Guid
    $arguments = @(
        'run'
        '--detach=true'
        '--publish 5000:80'
        '--env', "NUGET_API_KEY=$apiKey"
        '--volume', 'C:\Images\nuget\database:/var/www/db'
        '--volume', 'C:\Images\nuget\packages:/var/www/packagefiles'
        '--name', 'nuget-server'
        'Sunside / Simple-Nuget-Server'
    )

    Start-Process Docker -ArgumentList $arguments -Wait -NoNewWindow

Make sure you save that $apiKey. We will need it in later examples.

我在我的Windows 10系统上运行它,所以我必须确保我的本地Docker设置为运行Linux容器。

注册此存储库

Now that our server is running, we need to register it as a repository. The docker run command mapped port 80 to port 5000 on our localhost.

    Import-Module  powershellget. 

    $uri = 'http://localhost:5000'
    $repo = @{
        Name = 'MyRepository'
        SourceLocation = $uri
        PublishLocation = $uri
        InstallationPolicy = 'Trusted'
    }
    Register-PSRepository @repo

除了我现在将URI带到我的服务器时,这与我在上一篇文章中使用的例子是相同的例子。

PS> Get-PSRepository

Name         InstallationPolicy SourceLocation
----         ------------------ --------------
MyRepository Trusted            http://localhost:5000/
PSGallery    Untrusted          //www.powershellgallery.com/api/v2/

You may notice that MyRepository is trusted. If you take a close look at the parameters that were used to register it, I set InstallationPolicy = 'Trusted'.

使用您的存储库

You use this repository just like any other repository. I already covered how to use Publish-Module, Find-Module, and Install-Module from a repository in my 您的第一个内部PSScript存储库 邮政。所有这些命令仍然适用于此存储库,所以我不会再覆盖所有这些。

一个重要的区别是,我们需要在发布时提供NuGet API密钥。

    Publish-Module -Name MyModule -Repository MyRepository -NuGetApiKey $apiKey

这是设置服务器时指定的相同API键。

常规包

这 focus of this article was on Modules, but you can use NuGet to distribute other packages too. We package all of our software installs as NuGet packages and distribute them with Install-Package. But I do recommend that you do not mix modules and regular packages.

I found that having them in the same feed creates a lot of clutter and makes your feed more confusing. Running Find-Package would list your modules. If you called Install-Package on a module, it does not install it like Install-Module would. Create different feeds for different package types.

这款Docker容器是最简单的Nuget服务器,所以它只支持一个馈送。如果您使用任何预设的核心心服务器,那么您应该可以选择配置更多rief。

在我的下一篇文章中,我掩盖了 将社区模块发布到内部存储库.