Jenkins迁移至Ubuntu20.04后无法执行Perforce中的构建脚本
我自行编写了一个构建脚本,存放在Perforce streams仓库的//HVS/Main/BuildScripts/hvs_client.jenkinsfile路径下,但运行任务时会直接自动标记为成功,未执行实际构建逻辑,运行情况如下图所示:
我已正确配置Script Path路径,配置截图如下:
同时也配置了正确的stream路径,配置截图如下:
该配置在我原物理机部署的Windows Jenkins服务器上运行完全正常,仅有的差异是当前我正在将Jenkins服务从物理机迁移至云端,运行在Ubuntu 20.04系统上的新主节点出现了上述问题。我已配置了一台Windows服务器作为从节点,已安装Java agent并成功连接到主节点,节点配置了"Windows"标签。
我的pipeline脚本内容如下:
def channelId = 'removed_for_stackoverflow' def threadId def slackResponse pipeline { agent {label 'Windows'} parameters { choice(name: "BuildType", choices: ['Development', 'Shipping', 'Testing'], description: "What environment are you building to? Default is Development.") string(name: "SevenZIPDir", defaultValue: "C:\\Program Files\\7-Zip\\7z.exe", description: "Location of 7zip executable.") booleanParam(name: "clean", description: "Should jenkins clean the workspace?", defaultValue: false) } options { skipDefaultCheckout() } stages { stage('P4 Sync') { steps { script { if (params.clean) { cleanWs() } p4sync charset: 'none', credential: '5feaca76-6a4a-4540-8a1e-e86ac8b3dc5b', populate: syncOnly(force: false, have: true, modtime: false, parallel: [enable: false, minbytes: '1024', minfiles: '1', threads: '4'], pin: '', quiet: true, revert: false), source: streamSource('//HVS/Main') } } } // https://github.com/jenkinsci/slack-plugin#bot-user-mode // https://docs.unrealengine.com/4.27/en-US/ProgrammingAndScripting/ProgrammingWithCPP/UnrealArchitecture/VersioningAssetsAndPackages/ // https://www.perforce.com/manuals/jenkins/Content/P4Jenkins/variable-expansion.html stage('Notify Slack users') { steps { script { slackResponse = slackSend(channel: channelId, replyBroadcast: true, message: "Beginning build of ${env.JOB_NAME} for CL#${P4_CHANGELIST} ${env.BUILD_URL}") threadId = slackResponse.threadId slackResponse.addReaction("stopwatch") } } } stage('Build Client') { steps { retry(3) { bat("%WORKSPACE%/Engine/Build/BatchFiles/RunUAT.bat BuildCookRun -project=\"%WORKSPACE%/HVS/HVS.uproject\" -noP4 -platform=Win64 -clientconfig=Development -cook -allmaps -clean -build -stage -pak -CrashReporter -archive -archivedirectory=\"%WORKSPACE%/temp/Development/x64\"") } } } /*stage('Deploy to Steam') { }*/ stage('Archive Artifacts'){ steps { dir("temp/${params.BuildType}/x64/WindowsNoEditor") { bat "\"${params.SevenZIPDir}\" a -mx=1 -mmt=on %WORKSPACE%/temp/HVS_${params.BuildType}_x64_${P4_CHANGELIST}.7z *" } archiveArtifacts artifacts: "temp/*.7z", followSymlinks: false, onlyIfSuccessful: true } } } post { success { script { slackSend(channel: threadId, replyBroadcast: true, message: "Build of ${env.JOB_NAME} for CL#${P4_CHANGELIST} successful! ${env.BUILD_URL}") slackResponse.addReaction("white_check_mark") } } failure { script { slackSend(channel: threadId, replyBroadcast: true, message: "Build of ${env.JOB_NAME} for CL#${P4_CHANGELIST} failed! ${env.BUILD_URL}") slackResponse.addReaction("red_circle") } } unstable { script { slackSend(channel: threadId, replyBroadcast: true, message: "Build of ${env.JOB_NAME} for CL#${P4_CHANGELIST} is not stable @channel ${env.BUILD_URL}") slackResponse.addReaction("warning") } } } }
我的从节点已配置"Windows"标签,节点配置截图如下:
排查解决步骤
按优先级依次排查即可定位问题:
- 首先确认Ubuntu主节点已安装Perforce插件、配置的P4凭证有效且有拉取
//HVS/Main/BuildScripts/hvs_client.jenkinsfile的权限,Jenkins默认会先在主节点拉取Jenkinsfile再调度任务,主节点拉取失败的情况下会直接判定任务执行成功,不会进入后续阶段。 - 查看任务完整控制台输出,确认任务是否调度到了带
Windows标签的从节点执行,若主节点没有限制任务只能在从节点运行,主节点会尝试本地执行脚本,因为不支持bat指令直接跳过所有步骤标记成功。 - 临时删除
options中的skipDefaultCheckout()配置测试,确认是p4sync步骤的执行问题还是调度阶段的问题。 - 检查Windows从节点的工作目录配置,确认运行Jenkins agent的账号对工作目录有完整读写权限,路径不含中文、特殊字符。
内容的提问来源于stack exchange,提问作者Ryan Glenn
相关产品推荐
相关产品推荐

