...
- This agent can be running on a server next to your Jenkins controller/master or in the internal network(s)
- agent service(s) with service auto-start to assure automatic re-connect to Jenkins controller at any time even after server reboot
- Install dependencies
CentOS 7
Code Block yum install java-11-openjdk-devel git -y # you can install also other dependencies that will be required for your jobs
CentOS 8/9
Code Block yum install java-17-openjdk-devel git -y # you can install also other dependencies that will be required for your jobs
Ubuntu
Code Block apt-get update; apt-get install openjdk-11-jdk git -y # you can install also other dependencies that will be required for your jobs
- Installing agent
Prepare a folder for config
Code Block mkdir -p /data/configs mkdir -p /opt/jenkins-agent
Create service file /opt/jenkins-agent/jenkins-agent.service
Code Block title jenkinsope.service [Unit] Description=Jenkins Agent - On Premise Executor Wants=network.target After=network.target [Service] # EnvironmentFile cannnot be used on Debian/Ubuntu anymore - Reference: https://github.com/varnishcache/pkg-varnish-cache/issues/24 # So we are using drop-in config /etc/systemd/system/jenkins-agent.service.d/local.conf ExecStart=/usr/bin/java -Xms${JAVA_MEMORY} -Xmx${JAVA_MEMORY} -jar /opt/jenkins-agent/agent.jar -jnlpUrl ${CONTROLLER_URL}/computer/${NODE_NAME}/jenkins-agent.jnlp -secret ${SECRET} -workDir "${WORK_DIR}" User=jenkins-agent Restart=always RestartSec=10 StartLimitInterval=0 [Install] WantedBy=multi-user.target
Create config file /data/configs/jenkins-agent.conf
Code Block JAVA_MEMORY=512m CONTROLLER_URL=https://jenkins.xxx.tds.customerx.com NODE_NAME=XXX SECRET=8b2911d98400bad5d45635b812b5f2e8e7c1d216bbbae9422a3ba57c691bf762 WORK_DIR=/data/jenkins-agent
Create script /opt/jenkins-agent/jenkins-agent-install
Code Block #!/bin/bash set -e AGENT_APP_HOME=/opt/jenkins-agent SRV_USER_NAME=jenkins-agent SRV_USER_ID="900" SRV_GROUP_NAME=jenkins-agent SRV_GROUP_ID="900" WORK_DIR_DEFAULT="/data/jenkins-agent" AGENT_SERVICE_NAME="jenkins-agent" AGENT_SERVICE_FILE="/usr/lib/systemd/system/$AGENT_SERVICE_NAME.service" AGENT_SERVICE_CFG_FOLDER="/etc/systemd/system/$AGENT_SERVICE_NAME.service.d" MAINCONFIG=/data/configs/jenkins-agent.conf # Making sure obsolete jenkinsope config is migrated when found OPE_OLD_MAINCONFIG=/data/configs/jenkinsope.conf [ -f $OPE_OLD_MAINCONFIG ] && mv -f $OPE_OLD_MAINCONFIG $MAINCONFIG # Loading configuration source $MAINCONFIG # Detecting and migrating obsolete jenkinsope account and data OPE_OLD_USER=jenkinsope OPE_OLD_HOME=/home/$OPE_OLD_USER if [ -d $OPE_OLD_HOME ];then sed -i "s#^WORK_DIR.*#WORK_DIR=$WORK_DIR_DEFAULT#g" $MAINCONFIG sed -i 's#^MASTER_URL#CONTROLLER_URL#g' $MAINCONFIG # Re-loading configuration with new values source $MAINCONFIG systemctl stop jenkinsope sleep 10 rm -rf /etc/systemd/system/jenkinsope.service.d rm -f /usr/lib/systemd/system/jenkinsope.service mv $OPE_OLD_HOME $WORK_DIR userdel -rf $OPE_OLD_USER fi # Detecting and migrating obsolete jenkins-agent account and data from /home to /data JA_OLD_HOME=/home/$SRV_USER_NAME if [ -d $JA_OLD_HOME ] && [ $JA_OLD_HOME != $WORK_DIR ];then sed -i "s#^WORK_DIR.*#WORK_DIR=$WORK_DIR_DEFAULT#g" $MAINCONFIG # Re-loading configuration with new values source $MAINCONFIG systemctl stop $AGENT_SERVICE_NAME sleep 10 rm -rf $AGENT_SERVICE_CFG_FOLDER rm -f $AGENT_SERVICE_FILE mv $JA_OLD_HOME $WORK_DIR fi echo "Preparing basic home folder structure" mkdir -p $WORK_DIR/.ssh chmod 700 $WORK_DIR/.ssh touch $WORK_DIR/.ssh/config chmod 600 $WORK_DIR/.ssh/* ls -lah $WORK_DIR echo "Preparing group" getent group $SRV_GROUP_NAME || groupadd --gid $SRV_GROUP_ID $SRV_GROUP_NAME getent group $SRV_GROUP_ID || groupmod -g $SRV_GROUP_ID $SRV_GROUP_NAME echo "Preparing user" getent passwd $SRV_USER_NAME || useradd --shell /bin/bash --uid $SRV_USER_ID --gid $SRV_GROUP_ID --create-home --home-dir /data/jenkins-agent $SRV_USER_NAME getent passwd $SRV_USER_NAME && usermod --shell /bin/bash --uid $SRV_USER_ID --gid $SRV_GROUP_ID --home /data/jenkins-agent $SRV_USER_NAME getent passwd $SRV_USER_NAME echo "Changing ownership of home/work folder ($WORK_DIR) and its content (can take long time with many files)..." chown $SRV_USER_NAME:$SRV_USER_NAME -R $WORK_DIR ls -lah $WORK_DIR echo "Installing agent" if [ -f $AGENT_SERVICE_FILE ];then echo "Previous service found, making sure it is stopped..." systemctl stop $AGENT_SERVICE_NAME sleep 5 fi rm -f $AGENT_APP_HOME/agent.jar curl -s ${CONTROLLER_URL}/jnlpJars/agent.jar -o $AGENT_APP_HOME/agent.jar chmod 644 $AGENT_APP_HOME/agent.jar install -D -m 644 $AGENT_APP_HOME/$AGENT_SERVICE_NAME.service $AGENT_SERVICE_FILE # Check existence of JDK 11/17 and hard code it into service unit, otherwise attempt to use generic java JDK11="/usr/lib/jvm/java-11/bin/java" JDK17="/usr/lib/jvm/java-17/bin/java" if [ -f "$JDK17" ];then echo "Setting discovered OpenJDK 17 to be used by Jenkins agent." sed -i "s#/usr/bin/java#$JDK17#" $AGENT_SERVICE_FILE else if [ -f "$JDK11" ];then echo "Setting discovered OpenJDK 11 to be used by Jenkins agent as alternative." sed -i "s#/usr/bin/java#$JDK11#" $AGENT_SERVICE_FILE fi # Otherwise using generic java fi mkdir -p $AGENT_SERVICE_CFG_FOLDER echo "[Service]" > $AGENT_SERVICE_CFG_FOLDER/local.conf sed 's#^#Environment=#g' $MAINCONFIG >> $AGENT_SERVICE_CFG_FOLDER/local.conf systemctl daemon-reload systemctl restart $AGENT_SERVICE_NAME systemctl enable $AGENT_SERVICE_NAME # Using mandatory sleep otherwise checking status too early ends with error sleep 10 systemctl status $AGENT_SERVICE_NAME echo "0 4 * * * root $AGENT_APP_HOME/jenkins-agent-install" > /etc/cron.d/jenkins-agent-update
Run install script
Code Block chmod +x /opt/jenkins-agent/jenkins-agent-install /opt/jenkins-agent/jenkins-agent-install
- Uninstalling agent (for cleanup purposes or if you messed up something)
Create script /opt/jenkins-agent/jenkins-agent-uninstall
Code Block systemctl disable jenkins-agent systemctl stop jenkins-agent rm -f /usr/lib/systemd/system/jenkins-agent.service rm -rf /etc/systemd/system/jenkins-agent.service.d systemctl daemon-reload userdel -r jenkins-agent rm -rf /data/jenkins-agent
Run install script
Code Block chmod +x /opt/jenkins-agent/jenkins-agent-uninstall /opt/jenkins-agent/jenkins-agent-uninstall
- Install dependencies
...