// 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 " ''' } } } } }