Jenkins_Pipeline_Library/vars/Pipeline_dev.groovy
2026-03-25 12:08:12 +08:00

155 lines
6.1 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

//=================================================================
// 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')
}
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'
}
script {
// 最小化处理checkout 前仅重置子模块,避免残留改动导致冲突
bat '''
if exist .gitmodules (
git submodule foreach --recursive git reset --hard
)
'''
}
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: true, // 关闭,避免冲突
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
]
)
}
}
}
}
}