【发布时间】:2021-12-09 09:40:58
【问题描述】:
我是 DevOps 的新手。我正在尝试为 .NET 项目设置自动部署管道。我想构建这个项目并将其复制到远程 Windows 机器上进行手动测试。
我已经完成了大部分工作。但我最大的问题(我猜)与交叉编译有关。这一切都可以在我的 Windows 计算机上运行(我可以使用 IDE 构建和运行项目),但我无法在 GitLab-runner 上正确编译它。
我有以下.gitlab-ci.yml 配置:
image: mcr.microsoft.com/dotnet/sdk:5.0
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- dotnet build -o ../build
artifacts:
paths:
- build
test_job:
stage: test
script:
- dotnet test --no-build -o ../build
deploy_job:
stage: deploy
rules:
- if: $CI_COMMIT_BRANCH == $CI_DEFAULT_BRANCH
script:
- dotnet publish MyProject.sln -o ../publish
# copy ../publish to a remote server
我注释掉了最后一部分,因为它不相关(它只是复制带有sftp 的文件)。
我有舞台build 这样的作品,但有点不。它构建 something,但不生成 EXE 文件。我正在尝试在测试阶段重用这个构建。
在deploy 阶段,我决定使用dotnet publish 而不是dotnet build,希望它可能会给我正确的结果。我尝试了许多不同的方法和许多不同的标志,但最后我无法在 GitLab 运行器上编译这个项目,因此我可以将输出文件夹复制到 Windows 机器并运行 EXE 文件。
如果我跑步dotnet publish -o ../publish
我明白了:
/usr/share/dotnet/sdk/5.0.402/Sdks/Microsoft.NET.Sdk/targets/Microsoft.NET.Sdk.CrossTargeting.targets(27,5):错误 NETSDK1129:“发布”目标是不指定目标框架不支持。当前项目针对多个框架,必须指定发布的框架 申请。
所以我累了并指定这样的框架:dotnet publish -o ../publish -f net5.0
然后我得到:
/usr/share/dotnet/sdk/5.0.402/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(241,5):错误NETSDK1005:资产文件'/builds/myuser/myrepo/ myproject/Common/obj/project.assets.json' 没有 'net5.0' 的目标。确保恢复已运行,并且您已在项目的 TargetFrameworks 中包含“net5.0”。
所以我事先也尝试过运行dotnet restore --force,但令所有人惊讶的是,这并没有改变任何事情(仍然是同样的错误)——是的,我知道无论如何都应该隐式调用 restore。
只有在我向解决方案文件添加显式路径后,它才开始“成功”编译。dotnet publish MyProject.sln -o ../publish
但它不会生成任何EXE文件。
我错过了什么?我不知道我做错了什么。我不仅对 DevOps 还对 .NET 有点陌生。如何在 Gitlab-runner 上编译这个项目以便它可以在 Windows 上运行?
【问题讨论】:
标签: c# .net gitlab devops cross-compiling