Jenkins_Pipeline_Library/vars/Pipeline_dev.groovy
2026-03-07 15:07:06 +08:00

148 lines
5.8 KiB
Groovy

//=================================================================
// Byway Studios Inc. Confidential Information.
// Copyright Byway Studios Inc. All rights reserved
//=================================================================
def call(Map config)
{
pipeline
{
agent
{
label config.winbakeLabel
}
parameters
{
booleanParam(name: 'CleanBuild', defaultValue: false, description: 'Force Clean Build to Avoid Previous Build Cache')
booleanParam(name: 'DebugBuild', defaultValue: false, description: 'To Create Debug Build for Profiling')
booleanParam(name: 'CleanCache', defaultValue: false, description: 'Force Clean Script and Package Cache')
booleanParam(name: 'CleanLibrary', defaultValue: false, description: 'Force Clean the Whole Library Folder')
hidden(name: 'BuildNonTuyoo', defaultValue: true, description: 'Should We Build APK without Tuyoo SDK Login')
}
options
{
skipDefaultCheckout(true) // ★ 关键:禁止 Jenkins 自动 checkout library
}
stages
{
stage("Checkout Unity Project")
{
options
{
timeout(30)
}
steps
{
script {
// 配置 Git 支持长路径(解决 Windows 260 字符限制)
bat 'git config --global core.longpaths true'
}
checkout([
$class: 'GitSCM',
branches: [[name: '*/main']], // 分支名
userRemoteConfigs: [[
url: 'git@gitea.bywaystudios.com:pet_home/AplusB_Pet_nation.git',
credentialsId: '503eaa43-0676-40ac-81c0-d9c5cc8b4ff7'
]],
extensions: [
[$class: 'SubmoduleOption',
disableSubmodules: false,
parentCredentials: true,
recursiveSubmodules: true,
trackingSubmodules: false, // 关闭,避免冲突
reference: '',
timeout: 20,
threads: 1],
[$class: 'PruneStaleBranch']
]
])
}
}
stage("Build Unity Android")
{
options
{
timeout(60)
}
steps
{
BuildAndroid(config)
}
}
stage("AchiveArtifact")
{
options
{
timeout(10)
}
steps
{
archiveArtifact("Android_dev")
}
}
}
post
{
always
{
script {
// 获取触发者
def triggerUser = "自动触发"
def buildCause = currentBuild.getBuildCauses()
if (buildCause && buildCause.size() > 0 && buildCause[0].userName) {
triggerUser = buildCause[0].userName
}
// 获取失败阶段(仅失败时)
def failedStage = ""
if (currentBuild.currentResult == 'FAILURE') {
def stages = currentBuild.rawBuild.getAction(org.jenkinsci.plugins.workflow.job.views.FlowGraphAction)?.getNodes()
if (stages) {
for (stage in stages) {
if (stage.getError() != null) {
failedStage = "\n- 失败阶段: ${stage.getDisplayName()}"
break
}
}
}
}
// 收集提交记录
def changeString = ""
def changeLogSets = currentBuild.changeSets
if (changeLogSets.size() > 0) {
changeString = "\n\n提交记录:\n"
for (int i = 0; i < changeLogSets.size(); i++) {
def entries = changeLogSets[i].items
for (int j = 0; j < entries.length; j++) {
def entry = entries[j]
changeString += "- ${entry.commitId.take(7)} ${entry.msg} - ${entry.author}\n"
}
}
} else {
changeString = "\n\n提交记录: 无变更"
}
dingtalk(
robot:'dingtalk_unity_1',
type:'MARKDOWN',
title:"${currentBuild.currentResult} - dev #${env.BUILD_NUMBER}",
text: [
"### ${currentBuild.currentResult}",
"\n构建信息:",
"- 项目: ${env.JOB_NAME}",
"- 构建号: #${env.BUILD_NUMBER}",
"- 分支: main",
"- 触发者: ${triggerUser}",
"- 耗时: ${currentBuild.durationString}${failedStage}",
"\n链接:",
"- [下载链接](${env.BUILD_URL})",
changeString
]
)
}
}
}
}
}