You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jenkins迁移至Ubuntu20.04后无法执行Perforce中的构建脚本

我自行编写了一个构建脚本,存放在Perforce streams仓库的//HVS/Main/BuildScripts/hvs_client.jenkinsfile路径下,但运行任务时会直接自动标记为成功,未执行实际构建逻辑,运行情况如下图所示:
运行截图

我已正确配置Script Path路径,配置截图如下:
Script Path配置截图

同时也配置了正确的stream路径,配置截图如下:
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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:24:04