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