From 5de0f7d9586e2be1de14f451d40a705cbbf12256 Mon Sep 17 00:00:00 2001 From: YIk Teng Hie Date: Mon, 9 Aug 2021 15:55:54 +0800 Subject: [PATCH] add jenkins node setup --- jenkins/jenkins-node.md | 155 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 155 insertions(+) create mode 100644 jenkins/jenkins-node.md diff --git a/jenkins/jenkins-node.md b/jenkins/jenkins-node.md new file mode 100644 index 0000000..198680b --- /dev/null +++ b/jenkins/jenkins-node.md @@ -0,0 +1,155 @@ +# Node Setup Guide + +* Jenkins Plugins + + * pipeline + * node and label + * gradle + * maven + +* Java compiler + + * Java 8 + + ```sh + # install full jdk8 packge + # openjdk-8-jdk-headless exclude some jar file (eg /lib/jconsole.jar) + # which is need by alibaba druid dependencies package + $ apt install openjdk-8-jdk + ``` + + + +* Slave Agent + + * Create a slave VM. Username as `jenkins` + + * Set to sudo user + + ```sh + # add jenkins user + $ adduser jenkins + + # change jenkins to sudo group + $ usermod -aG sudo jenkins + + # check the user group + $ groups jenkins + + # verify sudo access + $ su - jenkins + + + ``` + + * Optional, add `jenkins` as `sudoer` + + * [reference](https://www.maketecheasier.com/edit-sudoers-file-linux/) + + ```sh + # add jenkins as sudoer + $ visudo + + + # User privilege specification + # username hostlist = (userlist) commandlist + # eg. Only allow alex to run apt-get update + # alex ALL=(ALL) /usr/bin/apt-get update + root ALL=(ALL:ALL) ALL + jenkins ALL=(ALL:ALL) ALL + ``` + + * Run jenkins node agent + + ```sh + # download agent.jar file from jenkins server + $ wget https://192.168.0.119/jnlpJars/agent.jar --no-check-certificate + + # run the agent to connect to server + $ sudo java -jar agent.jar -jnlpUrl https://192.168.0.119/computer/jenkins.slave/jenkins-agent.jnlp -noCertificateCheck -secret 39694868bc66890cd5eb6c04b0a51692403ab957ceb1d1b258c353a031334733 -workDir "/home/jenkins" + ``` + + ## Run agent as service + +* [reference](https://www.baeldung.com/linux/run-java-application-as-service) + +* create a script file `startagent.sh` + + ```sh + #!/bin/bash + + JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64 + WORKDIR=/home/jenkins/scripts + APP_OPTIONS=" -jnlpUrl https://192.168.0.119/computer/jenkins.slave/jenkins-agent.jnlp -noCertificateCheck -secret @secret-file -workDir \"/home/jenkins\"" + + "${JAVA_HOME}/bin/java" -jar agent.jar $APP_OPTIONS + + ``` + +* create the `secret-file` + + ```sh + $ echo 39694868bc66890cd5eb6c04b0a51692403ab957ceb1d1b258c353a031334733 > secret-file + ``` + + + +* test the script + + ```sh + $ chmod +x startagent.sh + + # start at background + $ ./startagent.sh & + + # make foreground + $ fg + ``` + +* create a service + + * Create the service unit file `jenkinsagent.service` + + ```ini + [Unit] + Description=Jenkins Agent service + + [Service] + SuccessExitStatus=143 + User=jenkins + Group=sudo + + WorkingDirectory=/home/jenkins/scripts + + ExecStart=/home/jenkins/scripts/startagent.sh + + + [Install] + WantedBy=multi-user.target + ``` + + * copy the service unit file to system `/etc/systemd/system` + + ```sh + $ sudo cp ./jenkinsagent.service /etc/systemd/system/jenkinsagent.service + + # reload unit files + $ sudo systemctl daemon-reload + + # enable the service (after tested ok). service will start upon every PC restart + $ sudo systemctl enable jenkinsagent.service + + Created symlink /etc/systemd/system/multi-user.target.wants/jenkinsagent.service -> /etc/systemd/system/jenkinsagent.service. + + # start the service + $ sudo systemctl start jenkinsagent.service + + # check status o service + $ sudo systemctl status jenkinsagent.service + + # stop the service + $ sudo systemctl stop jenkinsagent.service + + ``` + + \ No newline at end of file