left4dead2-server-ci-cd/example.Jenkinsfile
2025-08-16 14:07:26 +07:00

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