CI/CD is an abbreviation for Continuous Integration and Continuous Delivery (or Deployment). This refers to a set of software development practices aimed at improving the efficiency and reliability of the software delivery process.
Continuous Integration (CI) is the practice of regularly integrating code changes into a shared repository to detect and resolve conflicts as early as possible. In this process, every time a developer commits code changes to the repository, an automated build and testing process is triggered to verify that the changes do not break the existing codebase.
Continuous Delivery (CD) or Continuous Deployment (CD) is the practice of automating the software delivery process to release new changes to the production environment quickly, reliably, and frequently. In this process, once the code changes pass the automated build and testing process, they are automatically deployed to a staging or production environment, where they are further tested and reviewed before being released to end users.
The CI/CD pipeline is the entire process of continuous integration and continuous delivery, including all the automated steps, from code, commit to deployment to production. The pipeline includes automated testing, code quality checks, packaging, deployment, and other steps that help ensure that software changes are thoroughly tested and ready for production release.
There are many CI/CD tools available to help software development teams automate and streamline their software delivery processes. Some popular CI/CD tools include; Jenkins, Travis CI, CircleCI, GitLab CI/CD, Bamboo, GitHub Actions, Azure DevOps e.t.c
What is OneDev?
OneDev is a modern, open-source CI/CD platform that provides a complete solution for software development and delivery. It allows software development teams to automate their software delivery process, from code commit to production deployment, with an easy-to-use interface and powerful automation features.
OneDev supports multiple programming languages and frameworks, including Java, JavaScript, Python, and Ruby. It provides built-in support for popular development tools like Git, Jenkins, and Docker, and integrates with other popular tools like JIRA and Slack.
OneDev has a web-based interface that is easy to use and provides a visual representation of the software delivery process, with real-time feedback on the status of builds and deployments. It also provides powerful analytics and reporting features, allowing teams to track their progress, identify bottlenecks, and optimize their software delivery process.
There is a set of features for software development and delivery provided by OneDev. The most popular ones are:
- Code repository management: It provides a built-in Git repository management system, allowing teams to manage their codebase and collaborate on code changes.
- Continuous integration: It allows teams to automate the build and testing of their applications with flexible build pipelines and support for parallel builds.
- Continuous delivery: It supports automated deployment to multiple environments, including Kubernetes and Docker Swarm, with rollbacks and approval workflows.
- Artefact management: It provides a built-in artefact repository, allowing teams to manage and version their binaries and other artefacts.
- Environment management: OneDev allows teams to manage their development, staging, and production environments, with support for infrastructure as code tools like Terraform.
- Release management: OneDev provides a built-in release management system, allowing teams to manage the release of their applications and track their progress.
- Collaboration and communication: It provides support for collaboration and communication tools like JIRA, Slack, and Mattermost, allowing teams to work together more effectively.
- Analytics and reporting: It provides powerful analytics and reporting features, allowing teams to track their progress and optimize their software delivery process.
- Flexibility and customization: OneDev is highly flexible and customizable, with support for plugins, scripts, and custom workflows, allowing teams to tailor the platform to their specific needs.
Today we will learn how to install and use OneDev, the Self-hosted Git Server with Kanban and CI/CD.
System Requirements
For this guide, you need the following:
- Browser requirement:
- Microsoft Edge
- Safari 7.0 or higher
- Chrome 40.0 or higher
- Firefox 40.0 or higher
- At least 2G physical memory
Step 1: Install OneDev on Your System
There are many methods to get OneDev installed and running. The possible installation methods are:
- Run as a Docker container
- Deploy into Kubernetes
- Run on Bare Metal/Virtual Machine
In this guide, we will learn how to install OneDev on Bare Metal/Virtual Machine and Docker containers. So, you are free to choose any of the below methods that fascinate you!
Option 1 – Run OneDev on Bare Metal / Virtual Machine
This method is quite involving, as several dependency packages are required. First, ensure that the following are installed:
- Java 11 or higher: This can be done using any of the guides below:
- Git 2.11.1 or higher. You also need cURL installed. This can be done using the commands:
##On Debian/Ubuntu
sudo apt update && sudo apt install curl git -y
##On Rhel/Rocky Linux/Alma Linux
sudo yum install curl git -y
##On Arch Linux
sudo pacman -S git
On Arch Linux, you need the required fonts installed:
sudo pacman -S fontconfig ttf-dejavu
Once the required packages have been installed, pull the latest OneDev release. You can also pull the desired release, for example, the 8.0.13 version:
mkdir onedev && cd onedev
wget https://code.onedev.io/~downloads/projects/160/builds/3540/artifacts/onedev-8.0.15.tar.gz
Now extract the archive:
tar -xvf onedev-*.tar.gz
Now navigate into the directory:
cd onedev-*/
Now install the service. First, edit conf\wraper.conf and set the value of the wrapper.java.command as the path to the java command if it does not exist in the system path. For example, In my case, I have Java at /opt/jdk-18/
$ vim conf/wrapper.conf
wrapper.java.command=/opt/jdk-18/bin/java
Once the changes have been made, run the below command to install the service:
##On Windows(from the same folder with administrator privilege)
server.bat install
##On Linux/MacOS
sudo bin/server.sh install
The system service for OneDev will be created. Start and enable the service:
sudo systemctl enable --now onedev
Check the status of the service:
$ systemctl status onedev
● onedev.service - OneDev
Loaded: loaded (/etc/systemd/system/onedev.service; enabled; vendor preset: enabled)
Active: active (running) since Tue 2023-03-21 12:47:16 EAT; 12s ago
Process: 23265 ExecStart=/home/ubuntu22/onedev/onedev-8.0.13/bin/server.sh start sysd (code=exited, status=0/SUCCESS)
Main PID: 23350 (wrapper-linux-x)
Tasks: 39 (limit: 4629)
Memory: 185.3M
CPU: 9.441s
CGroup: /system.slice/onedev.service
├─23350 /home/ubuntu22/onedev/onedev-8.0.13/bin/../boot/wrapper-linux-x86-64 /home/ubuntu22/onedev/onedev-8.0.13/bin/../conf/wrapper.conf wrapper.syslog.ident=onedev wrapper.pi>
└─23370 /opt/jdk-18/bin/java -Djava.awt.headless=true --add-opens=java.base/sun.nio.ch=ALL-UNNAMED --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.r>
Mac 21 12:47:12 onedev.geeksforgeeks.org systemd[1]: Starting OneDev...
Mac 21 12:47:13 onedev.geeksforgeeks.org server.sh[23265]: Starting OneDev...
Mac 21 12:47:16 onedev.geeksforgeeks.org server.sh[23265]: Waiting for OneDev......
Mac 21 12:47:16 onedev.geeksforgeeks.org server.sh[23265]: running: PID:23350
Mac 21 12:47:16 onedev.geeksforgeeks.org systemd[1]: Started OneDev.
Option 2 – Run OneDev as a Docker container
This option is best for those who want to avoid the complexity involve when installing the dependencies. Here, all you need is to have the Docker Engine installed and running. This can be done using the aid provide here
Once installed, add your system user to the docker group.
sudo usermod -aG docker $USER
newgrp docker
Now create a storage directory for OneDev
sudo mkdir /onedev
sudo chmod -R 777 /onedev
On Rhel-based systems, configure SELinux for the path to be accessible:
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
Now you can easily spin the container using the command:
docker run -d \
--name onedev \
--restart always \
-v /var/run/docker.sock:/var/run/docker.sock \
-v /onedev:/opt/onedev \
-p 6610:6610 \
-p 6611:6611 \
1dev/server
Check the status of the container:
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
486341cf8a7f 1dev/server "/root/bin/entrypoin…" 17 seconds ago Up 14 seconds 0.0.0.0:6610-6611->6610-6611/tcp, :::6610-6611->6610-6611/tcp onedev
Step 2: Access OneDev Web UI
Once OneDev has been installed, you can now access it using the URL http://domain_name:6610. First, create the admin user.
Set the URL for your site.
Now you are ready to use OneDev.
Step 3: Use OneDev – Git with Kanban and CI/CD
Now we are set to use the OneDev Self-hosted Git Server with Kanban and CI/CD. We will begin by creating a test project from the web UI.
Once created, we will create a react application from the terminal. First, install Node.js 14 or higher on your system before you proceed.
### On RHEL, CentOS or Fedora, for Node.js LTS ###
sudo yum install gcc-c++ make
curl --silent --location https://rpm.nodesource.com/setup_16.x | sudo bash -
sudo yum -y install nodejs
### Debian / Ubuntu ###
curl -sL https://deb.nodesource.com/setup_16.x | sudo -E bash -
sudo apt install -y nodejs
Now create the application.
npx create-react-app myapp
After this, you will have a directory my-app created in the current directory. To push this code to OneDev, navigate into the directory:
cd myapp
Now push the code to OneDev
git remote add origin http://localhost:6610/myapp
git push origin master:master
Sample output:
Now you should have your code pushed as shown in the web UI.
Now click on “adding onedev buildspec” to bring up the GUI and add a build specification
Here, we will use the default template. Save this spec and commit the changes.
Now you will see the CI build in progress here.
To view the progress, click on it.
Once complete, you should have one build as shown
Closing Thoughts
That marks the end of this guide. We have only covered a simple quickstart on OneDev, there are many other practical examples which I believe you can try on your own. I hope this was informative.
See more:
- Run GitLab in Docker Containers using Docker Compose
- Scan for Docker Image and Git vulnerabilities using Trivy