在 Jenkins 执行 dotnet publish 编译脚本报错, 相同脚本直接在终端执行却正常

2022-11-02 14:06:01 +08:00
 Weiney

尝试在 Jenkins 内执行.Net 的编译打包操作, 相同的编译命令, 在 Jenkins 的 shell 执行报错, 直接在终端用 Jenkins 的运行账户执行就没有问题.

错误信息: error CS0227: Unsafe code may only appear if compiling with /unsafe

查了下这个问题是需要改项目的.csproj, 增加 AllowUnsafeBlocks配置参数解决Compiler Error CS0227

但是我检查了需要打包的项目, 这个配置是存在的, 我直接在终端执行编译命令也没问题, 单单是在 Jenkins 执行就报错了, 困扰了很久, 希望有大神给点解决思路

有尝试将 Jenkins Job 执行时的临时文件 /tmp/jenkinsxxx.sh 拷贝出来在终端直接执行, 执行正常没有报错, 问题只出现在 Jenkins

附上相关环境信息:

Jenkins 2.361.2 dotnet 5.0.214

1128 次点击
所在节点    Linux
7 条回复
XXWHCA
2022-11-02 14:10:46 +08:00
感觉问题是出在 jenkins 的环境问题,jenkins 的环境和 path 环境配置的并不一样
Weiney
2022-11-02 14:17:56 +08:00
@XXWHCA 这个有考虑过, Jenkins 执行 Shell 也是通过 系统创建的 jenkins 账户执行的, 我也尝试过登陆到 jenkins 的账户直接在 Job 的 workspace 执行 Jenkins 生成的脚本, 执行是没问题的.

而且我有对比两种执行环境的 env, Jenkins 的 Shell 执行环境出了增加了部分 Jenkins 的系统环境变量, 其他的例如 Path 等都是一模一样的
lqy2575395
2022-11-02 14:31:42 +08:00
hao lei ya
wdwwtzy
2022-11-02 14:36:48 +08:00
msbuild 后面加 /p:AllowUnsafeBlocks=true 参数试试呢
lm93129
2022-11-02 14:37:54 +08:00
建议吧需要的环境变量在对应的脚本里面重新配置一次,这样在不同的环境中,也可以正常读取到环境变量
wu00
2022-11-02 14:39:16 +08:00
确定你 /tmp/jenkinsxxx.sh build 的目标是 jenkins workspace 下的项目,比如你在终端 build 的是 AllowUnsafeBlocks=true 的 csproj ,而 workspace 下的 csproj 是 false
Weiney
2022-11-04 11:38:29 +08:00
解决了家人们,虽然我也不知道什么原因,因为项目是拉取 SVN 进行构建的,出问题时 SVN 的拉取策略是`Use 'svn update' as much as possible, with 'svn revert' before update`,修改为`Always check out a fresh copy`问题就解决了,反正现在能正常跑起来,但是每次构建都去全量拉项目的确实有点耗时

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/892077

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX