Automated builds with Jenkins
Prerequisites
1. Install Jenkins on a RaspberryPi
Look for the lastest version mathcing your OS version (source used for this: https://orcacore.com/jenkins-server-installation-debian12/)
Add Jenkins to Debian:
Add the official Jenkins repository to your Debian 12. Add the GPG key repo with the following wget command:
sudo wget -O /usr/share/keyrings/jenkins-keyring.asc \
https://pkg.jenkins.io/debian/jenkins.io-2023.key
Then, add the long-term support version of the Jenkins repo with the command below:
echo deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc] \
https://pkg.jenkins.io/debian binary/ | sudo tee \
/etc/apt/sources.list.d/jenkins.list > /dev/null
Jenkins server installation on Debian
1. Create a shell script to start the agent (optional if using master with an executor)
create a new agent, add name and description
install the same java version (used for the server) on the agent
copy the snipet from the jenkins agent configuration page
save it in a new file on the agent and make it executable
3. Create credentials to be used for checkout of Git repositories
Create a new Job
Set up Git as SCM and enter the right Repository URL to the github repo.
Use the credentials created before.
Specify the correct Branch to Build, main not master.
Select “GitHub hook trigger for GITScm polling” in Build Triggers.
Select “Delete workspace before build starts” in Build Environment
Create a new Build Step “Execute shell” with the following content:
#!/bin/bash echo starting build cd /home/user/virtEnv source Website/bin/activate echo activated virtualenv sphinx-build /home/user/ws/workspace/build_sphinx_and_replace_html/source /home/user/myApp/_build echo built website
Save and Build to test.
Webhooks for github
Configure a new webhook for the concerned repo. Provide URL to the Jenkins server and append “/github-webhook/”. It will work as soon as the server is reachable remotely.
Common pitfalls
Issues encountered and how they have been fixed.
Invalid X-Instance-Identity
~ $ sudo ./start_agent.sh
Jun 01, 2024 6:59:39 AM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /home/user/ws/remoting as a remoting work directory
Jun 01, 2024 6:59:40 AM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
INFO: Both error and output logs will be printed to /home/user/ws/remoting
Jun 01, 2024 6:59:40 AM hudson.remoting.Launcher createEngine
INFO: Setting up agent: agent_name
Jun 01, 2024 6:59:40 AM hudson.remoting.Engine startEngine
INFO: Using Remoting version: 3206.vb_15dcf73f6a_9
Jun 01, 2024 6:59:40 AM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /home/user/ws/remoting as a remoting work directory
Jun 01, 2024 6:59:41 AM hudson.remoting.Launcher$CuiListener status
INFO: Locating server among [http://192.168.xxx.xxx:xxxx/]
Jun 01, 2024 6:59:41 AM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
Jun 01, 2024 6:59:41 AM hudson.remoting.Launcher$CuiListener status
INFO: Could not locate server among [http://192.168.xxx.xxx:xxxx/]; waiting 10 seconds before retry
java.io.IOException: http://192.168.xxx.xxx:xxxx/tcpSlaveAgentListener/ appears to be publishing an invalid X-Instance-Identity.
at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:277)
at hudson.remoting.Engine.innerRun(Engine.java:809)
at hudson.remoting.Engine.run(Engine.java:563)
Solution: Installing plugin “Instance Identity”
Provided port:xxxxx is not reachable on host 192.168.xxx.xxx
~ $ sudo ./start_agent.sh
Jun 01, 2024 7:17:44 AM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /home/user/ws/remoting as a remoting work directory
Jun 01, 2024 7:17:44 AM org.jenkinsci.remoting.engine.WorkDirManager setupLogging
INFO: Both error and output logs will be printed to /home/user/ws/remoting
Jun 01, 2024 7:17:44 AM hudson.remoting.Launcher createEngine
INFO: Setting up agent: agent_name
Jun 01, 2024 7:17:45 AM hudson.remoting.Engine startEngine
INFO: Using Remoting version: 3206.vb_15dcf73f6a_9
Jun 01, 2024 7:17:45 AM org.jenkinsci.remoting.engine.WorkDirManager initializeWorkDir
INFO: Using /home/user/ws/remoting as a remoting work directory
Jun 01, 2024 7:17:45 AM hudson.remoting.Launcher$CuiListener status
INFO: Locating server among [http://192.168.xxx.xxx:xxxx/]
Jun 01, 2024 7:17:54 AM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver resolve
INFO: Remoting server accepts the following protocols: [JNLP4-connect, Ping]
Jun 01, 2024 7:17:59 AM org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver isPortVisible
WARNING: Connect timed out
Jun 01, 2024 7:17:59 AM hudson.remoting.Launcher$CuiListener status
INFO: Could not locate server among [http://192.168.xxx.xxx:xxxx/]; waiting 10 seconds before retry
java.io.IOException: http://192.168.xxx.xxx:xxxx/ provided port:xxxxx is not reachable on host 192.168.xxx.xxx
at org.jenkinsci.remoting.engine.JnlpAgentEndpointResolver.resolve(JnlpAgentEndpointResolver.java:304)
at hudson.remoting.Engine.innerRun(Engine.java:809)
at hudson.remoting.Engine.run(Engine.java:563)
Solution: adjust iptables on master:
$ sudo iptables -I INPUT -p tcp -m tcp --dport port_number -j ACCEPT