[英]Jenkins Package Restore with nuget.config
目前正在努力使用 Jenkins 部署新的应用程序,并遇到 package 恢复问题。 请注意......我的重点是开发,而不是 DevOps,所以很多这对我来说仍然很陌生。 因此,如果需要一些来回澄清,我提前道歉。
该项目使用以下文件:jenkinsfile、docker-compose.bi.build.yml、build.sh 和 nuget.config。 这些文件都列在下面以供参考。
简要概述:
我有 2 个 DLL,它们在 2 个单独的 VS 解决方案(和单独的 Git 存储库)中受源代码控制。 这些 DLL 是:AN.Infrastructure(基础设施)和 AN.Domain.Core(域)。 域取决于基础设施。 infras 是一些基本的东西......字符串扩展等,并没有很多依赖。 domain 对 EF、Postgres EF、AutoMapper 等有更多的依赖关系,但它也在 package 恢复过程中引入了基础设施。 就源代码控制、jenkins 等而言,基础设施和域的设置方式相同(这意味着我希望它们构建几乎相同的内容减去额外的依赖项)。 目前,infras 正在按应有的方式构建和部署,因此我知道我所拥有的流程正在运行。
过程是这样的:
问题:
由于似乎缺少 package 参考,我无法获得通过 Jenkins 构建的域解决方案。 该过程引发以下错误:
Package Microsoft.EntityFrameworkCore.Analyzers,未找到版本 3.1.4。 自 NuGet 恢复后,它可能已被删除。 否则,NuGet 恢复可能仅部分完成,这可能是由于最大路径长度限制。
我知道的:
我试过的:
你的名字......我现在在 Jenkins 的 45 个版本......每次尝试新的东西(例如......使用 nuget.config,没有 nuget.config,等等) 我在下面的文件中发布的是当前的 state 以及我在问题中描述的内容。 我非常乐意回答任何问题,提供任何其他信息,或尝试任何解决此问题的方法……只是不确定此时 go 的位置。
詹金斯文件:
pipeline {
agent any
stages {
stage('Build The Codes') {
steps {
sh '''sudo AN_BUILD_NUMBER=${BUILD_NUMBER} /usr/local/bin/docker-compose -f docker-compose.ci.build.yml up'''
}
}
stage ('Deploy The Codes') {
when {
branch 'main'
}
steps {
sh '''sudo cp ./src/AN.Domain.Core/bin/Release/*${BUILD_NUMBER}.nupkg /opt/nuget/development/'''
}
}
stage ('Deploy The Codes 2.0') {
when {
branch 'release'
}
steps {
sh '''sudo cp ./src/AN.Domain.Core/bin/Release/*${BUILD_NUMBER}.nupkg /opt/nuget/production/'''
}
}
}
}
docker-compose.ci.build.yml:
version: '3.8'
volumes:
nugetdirectory:
services:
ci-build:
image: mcr.microsoft.com/dotnet/sdk:3.1
volumes:
- .:/src:z
- nugetdirectory:/opt/nuget/production
working_dir: /src
environment:
- "AN_BUILD_NUMBER=${AN_BUILD_NUMBER}"
command: /bin/bash -c "sh ./build.sh"
构建.sh:
echo '*** Starting build process for AN.Domain project ***'
echo 'Generate New Assembly Version'
year=$(date '+%Y')
month=$(date '+%m')
day=$(date '+%d')
version="${year}.${month}.${day}.${AN_BUILD_NUMBER}"
echo 'New Assembly Version: ' + $version
echo 'Clean previous output directory for AN.Domain project'
echo ' - Remove Docker publish directory'
rm -rf obj/Docker/publish
echo ' - Remove previous nuget packages'
rm /src/src/AN.Domain.Core/bin/Release/*.nupkg
echo 'Clean output directory for AN.Domain project'
dotnet clean
echo 'Publish AN.Domain project'
dotnet msbuild /t:Restore -target:Publish -property:Configuration=Release -property:OutputPath=obj/Docker/publish -property:Version=$version
echo 'Copy NuGet packages to output directory'
cp /src/src/AN.Domain.Core/bin/Release/*.nupkg obj/Docker/publish
echo '*** Finishing build process for AN.Domain project ***'
nuget.config:
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<packageSources>
<add key="nuget.org" value="https://api.nuget.org/v3/index.json" />
<add key="privateRepo" value="/opt/nuget" />
</packageSources>
<activePackageSource>
<add key="All" value="(Aggregate source)" />
</activePackageSource>
</configuration>
更新:
所以,我在 build.sh 中替换了这一行:
dotnet msbuild /t:Restore -target:Publish -property:Configuration=Release -property:OutputPath=obj/Docker/publish -property:Version=$version
有了这个:
dotnet publish -c Release -o obj/Docker/publish /property:Version=$version
最初我有“dotnet publish”,但我遇到了同样的错误。 我从下面的 SO 问题中得到了前一个想法,但我相信我在了解 nuget.config 之前就这样做了。 所以,我认为可能发生的情况是两者都是必要的,但是当我使用“dotnet publish”时我没有 nuget.config 然后我将其切换到 msbuild 并且从未返回并使用这种 dotnet publish 组合进行测试和 nuget.config。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.