A containerised CI/CD pipeline for OpenShift applications using Github Actions containerised using Podman.
Develop a persistent application that consists of a front-end component.
Set up a CI/CD pipeline to BUILD, BAKE and DEPLOY your application to a container platform using GitOps methodologies and approaches (fully automated deployment).
Include scanning of code, container images and production environments for best practices and security purposes in your automated process.
This project is of a two-part project.
-
Pipeline
-
Application
For application related documentation, refer to theDEVELOP.MDin.\covid-vue-appRead more on containerisation in
CONTAINER.mdin.\docker.
There are two different pipelines.
-
Continuous Integration
-
Continuous Deployment (And Continuous Delivery which we do not implement here)
A team normally has to choose between Deployment or Delivery.
Continuous Delivery is Continuous Deployment with an extra step of needing deployment approval.
An example of a Continuous Integration pipeline is this.
We will be explaining using this branch where we have test and linting outside of a container.
In Github Actions, we define the pipeline in a YAML file (indentation strict), which is also supported by other pipelining solutions.
We first define the name of this pipeline (or workflow in Github Actions),
name: Node.js CIThen, we define the trigger condition, this would trigger on push,
on: [push]configure triggers on multiple events, (list of events here)
on: [push, pull_request]We could also restrict the workflow to trigger on certain branches, this triggers on push and pull_request to the main branch.
on:
push:
branches:
- main
pull_request:
branches:
- mainThen we specify the job (or actions), we first make a job called build.
We specify the runner environment (where the code would be running), we have it running on ubuntu-latest.
jobs:
build:
runs-on: ubuntu-latestDue to the structure of our code, we have our application in Covid-Application, so we need to move to the correct directory.
defaults:
run:
working-directory: ./Covid-ApplicationI was led to believe that a step running cd Covid-Application/ would also work.
Now that we're in the correct directory, let's start to do something.
We define steps (actions) here, which would mimic someone typing this into the terminal of this runner environment.
We could name our actions with name: <name> for clarity, and our actions would usually be in the form of
uses: <some actions>run: <some command>
Find premadeactionshere
This is part checkouts the code of our repo to this runner environment.
steps:
- uses: actions/checkout@v2This part here declare the Node.js version (12.x) and install it into the current runner environment.
We named this action "Use Node.js".
- name: Use Node.js
uses: actions/setup-node@v1
with:
node-version: "12.x"This part here declare the actions (commands to run), in which we execute these commands respectively.
Yarn is supported out of the box with Node.js
Read more here (also includes boilerplate).
yarn # npm install
yarn lint # npm run lint
yarn build # npm run build
yarn test # npm test- name: Install dependencies with Yarn
run: yarn
- name: Lint with ESLint
run: yarn lint
- name: Build with Webpack
run: yarn build
- name: Run tests
run: yarn testIf there were any errors from these steps, the pipeline will fail and the developers would be notified.
| Author | Current Year | Course |
|---|---|---|
| Cormac Madden | 3rd year | Computer science and business |
| Dabreadman | 3rd year | Computer science |
| Neil Shevlin | 2nd year | Computer science and business |
| Prathamesh Sai | 2nd year | Computer science |
| Emer Murphy | 2nd year | Computer science |
| Tom Roberts | 2nd year | Computer science |