You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

175 lines
6.8 KiB

#!groovy
def GetJobString() {
return JOB_NAME.substring(JOB_NAME.lastIndexOf('/') + 1, JOB_NAME.length()) + " #" + BUILD_NUMBER
}
def GetBaseDiscordDescription() {
return (
"Name: ${env.VersionName}.${env.BUILD_NUMBER}\n"
+ "Branch: ${env.VersionBranch}\n"
+ "Type: ${env.BuildType}\n"
+ "Build: [${env.BUILD_NUMBER}](${env.BUILD_URL})\n"
)
}
def GetStartedDiscordDescription() {
return (
GetBaseDiscordDescription()
)
}
def GetFinishedDiscordDescription() {
return (
GetBaseDiscordDescription()
+ "Status: [" + currentBuild.currentResult + "](${env.BUILD_URL})\n"
)
}
def GetSuccessDiscordDescription() {
return (
GetFinishedDiscordDescription()
+ "Artifacts: [changelog.txt](${env.BUILD_URL}artifact/changelog.txt), [included_files.txt](${env.BUILD_URL}artifact/included_files.txt)"
)
}
def GetJobDescription() {
def PatchDataName = readFile(file: 'PatchDataName.txt', encoding: 'UTF-16')
return ("Build successful. Run the \"Set Game Version\" plan to point the appropriate branch to " + PatchDataName)
}
def SetJobDescription() {
currentBuild.description = GetJobDescription()
}
pipeline{
agent {
node {
label 'renx-build'
}
}
environment {
DISCORD_WEBHOOK = credentials("f704b0eb-41e9-42d3-be14-0f951d6ef10b")
SVN_CREDS = credentials("bd2310a8-7607-4257-b749-7570e4ff2e22")
VCS_SSH_KEY = credentials("9b40a4a9-38fd-4230-bb4b-7fd29a09af85")
ROOT_DIR = "${env.workspace}"
UDK_PATH = "${ROOT_DIR}\\UDK_Uncooked"
BUILD_PATH = "${UDK_PATH}\\build"
UDK_URL = "svn://svn.renegade-x.com/svn/main/UDK_Uncooked"
}
parameters {
choice(name: "BuildType", choices: ["Auto", "RenX", "TibSun", "RenX.SDK", "TibSun.SDK"], description: "")
choice(name: "VersionBranch", choices: ["release", "beta", "alpha", "nightly", "nightly_ts", "launcher", "sdk"], description: "Version branch to base the build on")
string(name: "VersionName", defaultValue: "", description: "Version name to assign to the build (i.e: Open Beta 5.1234)")
string(name: "RevisionNumber", defaultValue: "0", description: "SVN revision number to base the build on; leave as 0 to use most recent revision")
}
stages {
stage("Prepare Workspace") {
// Requires: UdkPath, UdkUrl, TargetRevision, RootDir, BuildPath
steps {
discordSend description: GetStartedDiscordDescription(), footer: "Build Started", link: env.BUILD_URL, result: currentBuild.currentResult, title: ("Build Started: " + GetJobString()), webhookURL: "${env.DISCORD_WEBHOOK}"
echo "Preparing Workspace..."
powershell '''
# Source in common.ps1
. "${Env:ROOT_DIR}\\common.ps1"
# Prep the workspace
PrepRootDir "${Env:ROOT_DIR}"
# Prep the workspace
PrepSVN "${Env:UDK_PATH}" "${Env:UDK_URL}" "${Env:RevisionNumber}" -SvnUsername ${Env:SVN_CREDS_USR} -SvnPassword ${Env:SVN_CREDS_PSW}
'''
}
}
stage("Build UDK") {
// Requires: BuildPath, SourceBranch, BuildType, UdkPath
steps {
echo "Building UDK..."
powershell '''
# Source in common.ps1
. "${Env:ROOT_DIR}\\common.ps1"
# Pull config data if type Auto
$BuildType = (GetBuildType "${Env:BUILD_PATH}" "${Env:VersionBranch}" -BuildType "${Env:BuildType}")
# Build UDK
BuildUdk "${Env:UDK_PATH}" "$BuildType"
'''
}
}
stage("Make Patch") {
// Requires: RootDir, UdkPath, BuildType, PatchName, SourceBranch
steps {
echo "Making Patch Data..."
powershell '''
# Source in common.ps1
. "${Env:ROOT_DIR}\\common.ps1"
# Pull config data if type Auto
$BuildType = (GetBuildType "${Env:BUILD_PATH}" "${Env:VersionBranch}" -BuildType "${Env:BuildType}")
# Make patch data
$PatchDataName = (MakePatchData "${Env:ROOT_DIR}" "${Env:UDK_PATH}" "$BuildType" "${Env:VersionName}.${Env:BUILD_NUMBER}" "${Env:VersionBranch}" -DeleteBuild)
echo "$PatchDataName" | Out-File "${Env:ROOT_DIR}\\PatchDataName.txt" -NoNewLine
'''
}
}
stage("Publish Patch") {
// Requires: Env:SSHKey, Env:SSHUsername, RootDir, PatchDataName
steps {
echo "Publishing Patch..."
powershell '''
$PatchDataName = (Get-Content "${Env:ROOT_DIR}\\PatchDataName.txt")
# Source in common.ps1
. "${Env:ROOT_DIR}\\common.ps1"
# Publish patch data
PublishPatchData ${Env:VCS_SSH_KEY} ${Env:VCS_SSH_KEY_USR} "vcs.glitchware.com:/home/renx/patches/data/" "${Env:ROOT_DIR}\\$PatchDataName"
'''
}
}
}
post {
success {
archiveArtifacts 'included_files.txt,changelog.txt'
echo GetJobDescription()
SetJobDescription()
discordSend description: GetSuccessDiscordDescription(), footer: GetJobDescription(), link: env.BUILD_URL, result: currentBuild.currentResult, title: GetJobString(), webhookURL: "${env.DISCORD_WEBHOOK}"
}
failure {
discordSend description: GetFinishedDiscordDescription(), footer: "Build FAILED", link: env.BUILD_URL, result: currentBuild.currentResult, title: GetJobString(), webhookURL: "${env.DISCORD_WEBHOOK}"
}
aborted {
discordSend description: GetFinishedDiscordDescription(), footer: "Build ABORTED", link: env.BUILD_URL, result: currentBuild.currentResult, title: GetJobString(), webhookURL: "${env.DISCORD_WEBHOOK}"
}
cleanup {
// Cleanup build environment
powershell '''
# Remove any lingering builds
Remove-Item "${Env:ROOT_DIR}\\Build*" -Recurse
# Remove any lingering patch data
Remove-Item "${Env:ROOT_DIR}\\Patch*" -Recurse
Remove-Item "${Env:ROOT_DIR}\\TSPatch*" -Recurse
Remove-Item "${Env:ROOT_DIR}\\SDK*" -Recurse
Remove-Item "${Env:ROOT_DIR}\\TSSDK*" -Recurse
'''
}
}
}