Running a jenkins server in DigitalOcean
At work, I started playing with Azure. It is so different to AWS. More on that in subsequent posts.
We are supposed to set up a CI/CD pipeline with Jenkins as the build tool instead of Azure. The reason for that is to deploy Azure functions, the equivalent to AWS Lambda.
So I am not familiar with Jenkins. I then decided to set up Jenkins on DigitalOcean. The reason being is that DigitalOcean is my preferred Cloud prvoider for any hands-on devops work.
The steps assume that you have already followed these instructions and these instructions. The steps that I took are as follows:
-
Upgrade everything. For me, that means running a script. The script, aptly named upgrade.sh is shown below.
#!/bin/bashecho "Upgrading"sudo DEBIAN_FRONTEND=noninteractive apt-get -yq updatesudo DEBIAN_FRONTEND=noninteractive apt-get -yq dist-upgradeecho "Cleaning up"sudo apt-get -yf install &&sudo apt-get -y autoremove &&sudo apt-get -y autoclean &&sudo apt-get -y clean -
Install jenkins key
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add - -
Install the apt repository
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list' -
Run (1)
-
Install jre and jdk. They have to be installed before installing jenkins because jenkins depends on them to run.
sudo apt install default-jresudo apt install default-jdk -
Install jenkins.
sudo apt install jenkins -
Start the jenkins server and allow jenkins into the firewall(ufw). The default port for jenkins is port 8080.
sudo systemctl start jenkinssudo systemctl status jenkinssudo ufw allow 8080sudo ufw status -
Go the browser http://localhost.com:8080. Follow in the instructions in the Setup wizard and Plugins and Admin user. The url for the instance can be found here
grep jenkinsUrl /var/lib/jenkins/*.xml
So Jenkins is setup. But it is on a http endpoint, instead of https. I wanted to set up the jenkins instance on the same droplet that hosts this website and set it up with a https endpoint. To do this, I followed this steps below:
- Set up a different sub-domain by following these instructions. Apparently I thought I needed to add a CNAME record. That is not needed.
-
Create a new domain file.
sudo cp /etc/nginx/sites-available/default /etc/nginx/sites-available/example.com -
Modify the domain file to look like this
server {access_log /var/log/nginx/jenkins.access.log;error_log /var/log/nginx/jenkins.error.log;location / {include /etc/nginx/proxy_params;proxy_pass http://locahost:8080;proxy_read_timeout 90s;proxy_redirect http://localhost:8080 https://example.com;}} -
Run the config test.
sudo nginx -t -
Link the domain file in sites-available to sites-enabled. It needs to be done to allow nginx to load your config
sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled -
Modify the JENKINS_ARGS in /etc/default/jenkins file to look like below:
JENKINS_ARGS="--webroot=/var/cache/$NAME/war --httpPort=$HTTP_PORT --httpListenAddress=127.0.0.1" -
Modify the url for the jenkins instance by modifying the jenkinsUrl in the file /var/lib/jenkins/jenkins.model.JenkinsLocationConfiguration.xml to look like this:
<jenkinsUrl>http://127.0.0.1:8080/</jenkinsUrl> -
Run the certbot program and enter 1 when prompted.
sudo certbox --nginx -d example.com