This article covers installation of Jenkins on Ubuntu server and its usage to continuously integrate a Laravel application. Besides LAMP/LEMP stack we need to install Java, Git, Composer, and Node to successfully use Jenkins. Before starting to install this software, let’s take care of miscellaneous stuff.
Miscellaneous (can skip this).
Create mysql user and database.
mysql -u root -p
mysql> CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
mysql> CREATE DATABASE test
mysql> GRANT ALL PRIVILEGES ON test . * TO 'newuser'@'localhost';
mysql> FLUSH PRIVILEGES;
Allocate swap file (if needed)
If your server/instance has less than 2G of RAM, you may want to allocate a swap file to handle composer’s memory intensive downloads.
sudo fallocate -l 1G /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
sudo chmod 600 /swapfile
Prerequisites (depending on your server configuration you may not need to install everything).
sudo apt-get install git –y
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
curl --silent --location https://deb.nodesource.com/setup_8.x | bash -
apt-get install nodejs –y
/usr/bin/npm install -g npm
sudo apt-get install default-jre -y
Add the key:
wget -q -O - https://pkg.jenkins.io/debian-stable/jenkins.io.key | sudo apt-key add -
Add Jenkins package source to your package manager sources list by amending /etc/apt/sources.list with the following line:
deb https://pkg.jenkins.io/debian-stable binary/
Install and start Jenkins
sudo apt-get update
sudo apt-get install jenkins -y
sudo service jenkins start
Jenkins run on port 8080. If you have your instance on AWS, you need to add port 8080 to your security group. If you have Ubuntu firewall enabled (UFW), you need to add port 8080 to firewall rules. To check if UFW is enabled type
sudo ufw status verbose
If Status: active run
sudo ufw allow 8080
Both web server user (www-data) and jenkins user will have to have access to the project files. Let’s add jenkins to www-data (or your web server user)
usermod -aG www-data jenkins
We also will need jenkins user to run sudo commands. On its own Jenkins will not be able to enter root password.
Add the following line to the file:
jenkins ALL=(ALL) NOPASSWD:ALL
Create a new project by clicking on New Item
Fill out name and description. If you wish, you can set to discard old builds.
Source Code Management
In source code management check Git and fill in your repository. If your repository is public, you don’t have to do anything else. If you have a private repository, you can use Jenkins credential manager or authenticate Jenkins with ssh.
Check Build periodically and put @daily
Check Poll SCM and put @hourly
These settings will build your project daily and check for changes in your repo every hour. If there are changes in repo, the project will get rebuilt.
From Add build step drop down menu choose Execute shell. In the command input area I have the following:
npm run production
cp /var/lib/jenkins/.env .
php artisan migrate --force
sudo chown www-data:www-data -R .
sudo chmod 770 -R .
In this window put commands that are applicable to your Laravel project. For example if you do not wish to run any tests, you don’t need to put line that runs phpunit. Then you can also change composer install to composer install –no-dev. You can also cache your routes and config files. What you do here to deploy your project is up to you.
After saving your changes, you can run your build by clicking Build Now