129 lines
4.8 KiB
Plaintext
129 lines
4.8 KiB
Plaintext
// We use example so that you can create a new pipeline and modify it
|
|
|
|
pipeline {
|
|
agent any
|
|
|
|
environment {
|
|
NODE_USER = "steam"
|
|
NODE_HOST = "10.0.0.40"
|
|
DIR_WINE = "/wine"
|
|
DIR_STEAMCMD = "/wine/drive_c/SteamCMD"
|
|
DIR_SERVER = "/wine/drive_c/l4d2server"
|
|
|
|
DOWNLOAD_URL_SOURCEMOD = "https://sm.alliedmods.net/smdrop/1.12/sourcemod-1.12.0-git7210-windows.zip"
|
|
DOWNLOAD_URL_METAMOD = "https://mms.alliedmods.net/mmsdrop/1.12/mmsource-1.12.0-git1219-windows.zip"
|
|
|
|
L4D2_MAP = "c8m1_apartment"
|
|
L4D2_MAX_PLAYERS = 8
|
|
}
|
|
|
|
stages {
|
|
stage('Test Connection') {
|
|
steps {
|
|
sshagent(['l4d2-server']) {
|
|
sh '''
|
|
ssh ${NODE_USER}@${NODE_HOST} echo "Test Connection"
|
|
mkdir ~/.ssh || true
|
|
rm ~/.ssh/known_hosts || true
|
|
ssh-keyscan ${NODE_HOST} >> ~/.ssh/known_hosts
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
stage('Test Installation') {
|
|
steps {
|
|
sshagent(['l4d2-server']) {
|
|
sh '''
|
|
ssh ${NODE_USER}@${NODE_HOST} 'bash -s' < ./scripts/checkwine.sh
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
stage('Compiling addons') {
|
|
agent {
|
|
docker {
|
|
image 'debian:bookworm'
|
|
args '-u root'
|
|
}
|
|
}
|
|
environment {
|
|
DIR_WORKDIR = "/dependencies"
|
|
DIR_ADDONS = "${DIR_WORKDIR}/addons"
|
|
DIR_SOURCEMOD = "${DIR_ADDONS}/sourcemod"
|
|
DIR_SCRIPTING = "${DIR_SOURCEMOD}/scripting"
|
|
DIR_WORKSPACE_SCRIPTING = "${WORKSPACE}/app/left4dead2/addons/sourcemod/scripting"
|
|
}
|
|
steps {
|
|
sh '''
|
|
apt update && apt install -y wget git curl libarchive-tools lib32stdc++6
|
|
mkdir $DIR_WORKDIR
|
|
bash ./scripts/getbuildtools.sh
|
|
'''
|
|
sh '''
|
|
for scrs in ./scripts/addons/*.sh; do bash "$scrs"; done
|
|
if [ -d "$DIR_WORKSPACE_SCRIPTING" ]; then
|
|
cp -v "$DIR_WORKSPACE_SCRIPTING"/*.sp $DIR_SCRIPTING || true
|
|
fi
|
|
bash $DIR_SCRIPTING/compile.sh
|
|
bash ./scripts/cleantools.sh
|
|
'''
|
|
}
|
|
}
|
|
stage('Install and check the game server') {
|
|
when {
|
|
expression { !params.SKIP_UPDATE }
|
|
}
|
|
steps {
|
|
sshagent(['l4d2-server']) {
|
|
sh '''
|
|
echo "Cleaning configuration"
|
|
ssh ${NODE_USER}@${NODE_HOST} "
|
|
rm -r ${DIR_SERVER}/left4dead2/cfg/sourcemod || true
|
|
"
|
|
ssh ${NODE_USER}@${NODE_HOST} 'bash -s' < ./scripts/getgame.sh
|
|
echo "Cleaning Addons"
|
|
ssh ${NODE_USER}@${NODE_HOST} "
|
|
rm -r ${DIR_SERVER}/left4dead2/addons/metam* || true
|
|
rm -r ${DIR_SERVER}/left4dead2/addons/sourcemod || true
|
|
curl -sL ${DOWNLOAD_URL_SOURCEMOD} | bsdtar -xf - -C ${DIR_SERVER}/left4dead2
|
|
curl -sL ${DOWNLOAD_URL_METAMOD} | bsdtar -xf - -C ${DIR_SERVER}/left4dead2
|
|
"
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
stage('Ship the configuration') {
|
|
steps {
|
|
sshagent(['l4d2-server']) {
|
|
sh '''
|
|
tar czf - -C ./app left4dead2 | ssh ${NODE_USER}@${NODE_HOST} "tar xzf - -C ${DIR_SERVER}"
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
stage('Run the game') {
|
|
steps {
|
|
sshagent(['l4d2-server']) {
|
|
sh '''
|
|
ssh ${NODE_USER}@${NODE_HOST} "
|
|
source /home/${NODE_USER}/.bashrc
|
|
source /home/${NODE_USER}/.game.env
|
|
pm2 start 'xvfb-run -a \
|
|
wine $DIR_SERVER/srcds.exe \
|
|
-console \
|
|
-game left4dead2 \
|
|
-usercon \
|
|
+map ${L4D2_MAP} \
|
|
+exec server.cfg \
|
|
+maxplayers ${L4D2_MAX_PLAYERS}' \
|
|
--name l4d2server
|
|
sleep 5
|
|
pm2 logs --nostream l4d2-server
|
|
"
|
|
'''
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|