NLDClient-yudde/Tool/build_env/jenkins_iOS_dev.groovy

328 lines
17 KiB
Groovy
Raw Blame History

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

// 对应管线任务参数
def PLATFORM_PARAM = "iOS"
def PROFILE_PARAM = "Debug"
def IPA_NAME = "NLDBuild.ipa"
def AAB_PARAM = "fasle"
def DEV_PARAM = true
// 构建时候的参数
def CHANNEL_PARAM = params.Channel
def DEBUGBUILD_PARAM = params.DebugBuild
def HOTUPDATE_PARAM = params.Enable_Hot_Update
// Jenkins 归档地址
def ARTIFACT_URL = "http://${env.PHXH_BUILDER_IP_ADDRESS}:8080/job/${env.JOB_NAME}/"
def VERSION_PARAM // 版本号 根据项目获取
def OSS_UPLOAD_PATH_PARAM // 上传地址,根据项目获取
def ASSETS_END_POINT_PARAM // Assets endPoint根据项目获取
// 构建地址
def BUILD_PATH
// 日志地址
def log_path
// xcode 项目相关参数
def PROJECT_NAME = "Unity-iPhone"
def SCHEME_NAME = "Unity-iPhone"
def GetRemote(){
/*if('BilibiliDev' == params.Channel)
return 'bilibili';
else*/
return 'main';
}
def SendMessageToWechat(message){
if (!message) {
return }
def INNER_ROBOT="https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=3c92758c-1128-4931-ac8d-f19669d7befe"
sh "chmod +x $WORKSPACE/Tool/build_tools/send_wechat_message.sh"
sh "$WORKSPACE/Tool/build_tools/send_wechat_message.sh '${INNER_ROBOT}' '@all' '${message}'"
}
def ParseBuildLogError(logPath){
sh "chmod +x $WORKSPACE/Tool/build_tools/parse_unity_build_log.sh"
// 转译 "\[Build Exception\]:" 取消使用
// def exceptionFlag = '\\[Build Exception\\]:'
def errorMessage = sh(script: "${WORKSPACE}/Tool/build_tools/parse_unity_build_log.sh ${logPath} 'error CS' true true", returnStdout: true).trim()
def exceptionMessage = sh(script: "${WORKSPACE}/Tool/build_tools/parse_unity_build_log.sh ${logPath} 'Build Exception' false true", returnStdout: true).trim()
def sceneMessage = sh(script: "${WORKSPACE}/Tool/build_tools/parse_unity_build_log.sh ${logPath} 'Problem detected while' true true", returnStdout: true).trim()
def multipleMessage = sh(script: "${WORKSPACE}/Tool/build_tools/parse_unity_build_log.sh ${logPath} 'Multiple Unity' true false", returnStdout: true).trim()
def processSceneMessage = sh(script: "${WORKSPACE}/Tool/build_tools/parse_unity_build_log.sh ${logPath} 'Failed to process scene' true false", returnStdout: true).trim()
SendMessageToWechat(errorMessage)
SendMessageToWechat(exceptionMessage)
SendMessageToWechat(sceneMessage)
SendMessageToWechat(multipleMessage)
SendMessageToWechat(processSceneMessage)
}
pipeline {
agent any
stages {
stage('拉最新工程') {
steps {
script {
try {
def currentPath = sh(script: 'pwd', returnStdout: true).trim()
echo "cd ${currentPath}"
// 1. 还原子模块修改
def gitDirExists = sh(script: '[ -d ".git" ] && echo "true" || echo "false"', returnStdout: true).trim()
def scriptPathExists = fileExists("${WORKSPACE}/Tool/build_tools/git_revert_modules_modification.sh")
if (gitDirExists == 'true' && scriptPathExists) {
sh "chmod +x $WORKSPACE/Tool/build_tools/git_revert_modules_modification.sh"
sh "$WORKSPACE/Tool/build_tools/git_revert_modules_modification.sh $WORKSPACE"
}
// 2. 拉取主项目代码
def remote = GetRemote();
echo "拉取分支:${remote}"
checkout scmGit(
branches: [[name: "*/${remote}"]],
extensions: [
checkoutOption(60),
lfs(),
cloneOption(noTags: false, reference: '', shallow: false, timeout: 120),
submodule(recursiveSubmodules: true, reference: '', timeout: 1200)
],
userRemoteConfigs: [[url: 'http://1.14.122.170:3000/PHXH/NLDClient.git']]
)
// 3. 删除旧 GamePlay_Dll 文件夹
def gameplayDllPath = "${WORKSPACE}/ProjectNLD/Assets/Code/Scripts/GamePlay_Dll"
sh "if [ -d '${gameplayDllPath}' ]; then rm -rf '${gameplayDllPath}'; fi"
// 4. 拉取 GamePlay 仓库
def gameplayTargetPath = "${WORKSPACE}/ProjectNLD/Assets/Code/Scripts/GamePlay"
def gameplayPath = "http://1.14.122.170:3000/PHXH/GamePlay.git"
def branch = GetRemote();
sh "chmod +x ${WORKSPACE}/Tool/build_tools/git_pull_gameplay.sh"
sh "$WORKSPACE/Tool/build_tools/git_pull_gameplay.sh ${gameplayTargetPath} ${gameplayPath} ${branch}"
} catch (err) {
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】拉最新工程失败"
SendMessageToWechat(message)
error("Failure of the '拉最新工程' stage")
}
}
}
}
stage('获取项目配置') {
steps {
script {
try {
// 将项目相关配置复制到打包路径下
sh "chmod +x $WORKSPACE/Tool/build_tools/copy_env.sh"
sh "$WORKSPACE/Tool/build_tools/copy_env.sh $WORKSPACE/Tool/build_env"
// 将打包机器相关配置复制到打包路径下
echo "copy local env file to $WORKSPACE"
sh "cp /Users/mayuanzheng/Builds/local_env.sh $WORKSPACE/Tool/build_tools/"
} catch (err) {
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】获取项目配置失败"
SendMessageToWechat(message)
error("Failure of the '获取项目配置' stage")
}
}
}
}
stage('根据渠道修改工程') {
steps {
script {
try {
echo "根据 [${CHANNEL_PARAM}] 渠道修改工程"
sh "chmod +x $WORKSPACE/Tool/build_tools/modify_project_by_channel.sh"
sh "$WORKSPACE/Tool/build_tools/modify_project_by_channel.sh $WORKSPACE ${CHANNEL_PARAM}"
} catch (err) {
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】根据渠道修改工程失败"
SendMessageToWechat(message)
error("Failure of the '根据渠道修改工程' stage")
}
}
}
}
stage('根据渠道获取相关参数') {
steps {
script {
try {
echo "根据 [${params.Channel}] 渠道获取相关参数"
def playersettings = "$WORKSPACE/Tool/Channels/$CHANNEL_PARAM/ChannelSetting.txt"
sh "chmod +x $WORKSPACE/Tool/build_tools/get_build_version.sh"
sh "chmod +x $WORKSPACE/Tool/build_tools/get_build_upload_path.sh"
sh "chmod +x $WORKSPACE/Tool/build_tools/get_build_assets_end_point.sh"
VERSION_PARAM = sh(script: "$WORKSPACE/Tool/build_tools/get_build_version.sh $playersettings", returnStdout: true).trim()
OSS_UPLOAD_PATH_PARAM = sh(script: "$WORKSPACE/Tool/build_tools/get_build_upload_path.sh $playersettings", returnStdout: true).trim()
ASSETS_END_POINT_PARAM = sh(script: "$WORKSPACE/Tool/build_tools/get_build_assets_end_point.sh $playersettings", returnStdout: true).trim()
BUILD_PATH = "Builds/$CHANNEL_PARAM/$PLATFORM_PARAM/$VERSION_PARAM"
log_path="$BUILD_PATH/build.log"
echo "获取到的版本是 ${VERSION_PARAM}, 获取到的上传地址是 ${OSS_UPLOAD_PATH_PARAM}获取到的assets-oss-endpoint是 ${ASSETS_END_POINT_PARAM}"
} catch (err) {
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】根据渠道获取相关参数失败"
SendMessageToWechat(message)
error("Failure of the '根据渠道获取相关参数' stage")
}
}
}
}
stage('打包') {
steps {
sh "chmod +x $WORKSPACE/Tool/build_tools/build_unity.sh"
sh "chmod +x $WORKSPACE/Tool/build_tools/hot_update.sh"
script {
def build_result
if(params.Debug_AllLocal == true)
PROFILE_PARAM="AllLocal"
if(params.Build_InitApp == false){
build_result=sh(script: "$WORKSPACE/Tool/build_tools/hot_update.sh ${VERSION_PARAM} ${PLATFORM_PARAM} ${PROFILE_PARAM} ${CHANNEL_PARAM} ${HOTUPDATE_PARAM}", returnStatus: true, returnStdout: false)
log_path="$BUILD_PATH/UpdatePreviousBuild.log"
}
else
build_result=sh(script: "$WORKSPACE/Tool/build_tools/build_unity.sh ${VERSION_PARAM} ${PLATFORM_PARAM} ${PROFILE_PARAM} ${CHANNEL_PARAM} ${HOTUPDATE_PARAM} ${DEBUGBUILD_PARAM} ${AAB_PARAM} ${DEV_PARAM}", returnStatus: true, returnStdout: false)
// 打包失败
if(build_result != 0)
{
// 归档并分析日志
archiveArtifacts artifacts: "$log_path" , followSymlinks: false
def parse_log = "../../$log_path"
ParseBuildLogError(parse_log)
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】构建失败"
SendMessageToWechat(message)
error("Failure of the '打包' stage")
}
}
}
}
stage('上传资源') {
steps {
script {
sh "chmod +x $WORKSPACE/Tool/build_tools/upload_oss.sh"
def asset_path="$WORKSPACE/ProjectNLD/ServerData/${PLATFORM_PARAM}"
def upload_path="${OSS_UPLOAD_PATH_PARAM}/${CHANNEL_PARAM}/${PLATFORM_PARAM}/${VERSION_PARAM}"
def upload_result=0
upload_result = sh(script: "$WORKSPACE/Tool/build_tools/upload_oss.sh ${asset_path} ${upload_path} ${ASSETS_END_POINT_PARAM}", returnStatus: true, returnStdout: false)
if(upload_result != 0)
{
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】上传资源失败"
SendMessageToWechat(message)
error("Failure of the '上传资源' stage")
}
}
}
}
stage('导出IPA') {
steps {
script {
if (params.Build_InitApp == true) {
def project_path="$WORKSPACE/Builds/$CHANNEL_PARAM/$PLATFORM_PARAM/$VERSION_PARAM"
def export_result=0
sh "chmod +x $WORKSPACE/Tool/build_tools/build_xcode_xcodeproj.sh"
export_result = sh(script: "$WORKSPACE/Tool/build_tools/build_xcode_xcodeproj.sh ${PROJECT_NAME} ${SCHEME_NAME} ${project_path}", returnStatus: true, returnStdout: false)
if(export_result != 0)
{
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】导出IPA失败"
SendMessageToWechat(message)
error("Failure of the '导出IPA' stage")
}
}
}
}
}
stage('重命名IPA') {
steps {
script {
if (params.Build_InitApp == true) {
def change_name_result=0
def path="$WORKSPACE/Builds/$CHANNEL_PARAM/$PLATFORM_PARAM/$VERSION_PARAM/"
sh "chmod +x $WORKSPACE/Tool/build_tools/rename_ipa.sh"
change_name_result = sh(script: "$WORKSPACE/Tool/build_tools/rename_ipa.sh ${path}", returnStatus: true, returnStdout: false)
if(change_name_result != 0)
{
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】重命名IPA失败"
SendMessageToWechat(message)
error("Failure of the '重命名IPA' stage")
}
}
}
}
}
stage('上传IPA') {
steps {
script {
// 增量更新不需要上传包体
if (params.Build_InitApp == true){
def ipa_path="$WORKSPACE/Builds/$CHANNEL_PARAM/$PLATFORM_PARAM/$VERSION_PARAM/$IPA_NAME"
def upload_path="${OSS_UPLOAD_PATH_PARAM}/${CHANNEL_PARAM}/${PLATFORM_PARAM}/"
def upload_path_with_version="${OSS_UPLOAD_PATH_PARAM}/${CHANNEL_PARAM}/${PLATFORM_PARAM}/${VERSION_PARAM}/"
def upload_result=0
def upload_result_with_version=0
upload_result=sh(script: "$WORKSPACE/Tool/build_tools/upload_oss.sh ${ipa_path} ${upload_path} ${ASSETS_END_POINT_PARAM}", returnStatus: true, returnStdout: false)
upload_result_with_version=sh(script: "$WORKSPACE/Tool/build_tools/upload_oss.sh ${ipa_path} ${upload_path_with_version} ${ASSETS_END_POINT_PARAM}", returnStatus: true, returnStdout: false)
if(upload_result != 0 || upload_result_with_version != 0)
{
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】上传IPA失败"
SendMessageToWechat(message)
error("Failure of the '上传IPA' stage")
}
}
}
}
}
stage('发布debug版本号') {
steps {
script {
sh "chmod +x $WORKSPACE/Tool/build_tools/debug_send_version.sh"
def result=0
//result = sh(script: "$WORKSPACE/Tool/build_tools/debug_send_version.sh")
if(result != 0)
{
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】发布debug版本号失败"
SendMessageToWechat(message)
error("Failure of the '发布debug版本号' stage")
}
}
}
}
stage('归档') {
steps {
script {
try{
archiveArtifacts artifacts: "$log_path" , followSymlinks: false
if (params.Build_InitApp == true)
archiveArtifacts artifacts: "$BUILD_PATH/*.ipa" , followSymlinks: false
}
catch(Exception e){
SendMessageToWechat(e.message + "\r\n" + e.stackTrace)
currentBuild.result = 'FAILURE'
return
}
}
}
}
stage('通知') {
steps {
script {
if (params.Build_InitApp == true) {
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】客户端打包上传成功!下载链接:${ARTIFACT_URL}"
SendMessageToWechat(message)
} else {
def message = "【${PLATFORM_PARAM}】【${VERSION_PARAM}】【Debug】【${CHANNEL_PARAM}】客户端增量更新上传成功!下载链接:${ARTIFACT_URL}"
SendMessageToWechat(message)
}
}
}
}
}
}