CI CD - arnodeco/project GitHub Wiki
CI/CD staat voor Continuous Integration en Continuous Deployment. Deze softwareontwikkeling methoden richten zich op het automatiseren en verbeteren van het proces van softwarelevering. Dankzij CI/CD kunnen ontwikkelaars snel en betrouwbaar nieuwe code integreren, testen en uitrollen naar productieomgevingen.
CI/CD stelt ontwikkelaars in staat om continu code te integreren en te testen, wat snelle feedback mogelijk maakt. Hierdoor kunnen problemen sneller worden opgespoord en opgelost, wat de ontwikkelcyclus versnelt en de kwaliteit van de software verbetert.
Door bouw-, test- en implementatieprocessen te automatiseren, zorgt CI/CD voor een betrouwbare en consistente softwarelevering. Automatisering vermindert de kans op menselijke fouten en zorgt voor herhaalbare processen, wat de betrouwbaarheid verhoogt.
CI/CD bevordert de samenwerking tussen ontwikkelaars via versiebeheer en geautomatiseerde integratie. Dit maakt het voor teams gemakkelijker om samen te werken en codewijzigingen te integreren, ongeacht hun locatie.
Met CI/CD kunnen organisaties vaker en betrouwbaarder nieuwe versies uitbrengen. Hierdoor komen nieuwe functies en verbeteringen sneller bij de eindgebruikers, wat de gebruikerservaring verbetert en een concurrentievoordeel oplevert.
SCM-systemen zoals Git worden gebruikt voor het beheren van broncode en versiebeheer. Ontwikkelaars checken code in en uit SCM-repositories om samen te werken en wijzigingen bij te houden.
CI-servers zoals Jenkins, GitLab en CircleCI bouwen en testen automatisch codewijzigingen. CI stelt ontwikkelaars in staat om hun code continu te integreren en te valideren via geautomatiseerde tests.
CD-tools sturen applicaties automatisch naar verschillende omgevingen (review, staging, productie).
Gebruik dit om een repository naar je lokale machine te klonen.
git clone <repository_url>
Met dit commando kan je wijzigingen vastleggen in je repository en eigen boodschap toevoegen die verduidelijkt wat je precies hebt veranderd.
git commit -m "Commit boodschap"
Met git push stuur je je lokale bestanden/wijzegingen naar je repository. Hiervoor moet je specifiëren op welke branch je het wilt zetten.
git push origin <branch_naam>
Met Docker Build bouw je een image gebaseerd op je configuraties in je Dockerfile.
docker build <image>
%et Docker Push kan je je Docker image gaan pushen/plaatsen in je Docker registry.
docker push <image>
stages:
- build
- test
- deploy
build_job:
stage: build
script:
- echo "Building the application..."
test_job:
stage: test
script:
- echo "Running tests..."
deploy_job:
stage: deploy
script:
- echo "Deploying to production..."
Voor we de applicatie gaan kunnen uitvoeren moeten we natuurlijk de broncode lokaal op onze pc zetten. Dit kan je doen door volgend git commando uit te voeren in bijvoorbeeld Visual Studio Code:
git clone https://github.com/docker/getting-started-app.git
Note
Indien de gekloonde app niet automatisch wordt geopend, kan je deze handmatig openen in VS Code. Je vind de app terug in de directory waar je het git commando uitvoerde. In mijn geval is dat dus in het mapje 'arnod' in de 'Users' map op mijn C-schijf.
Eens je de getting-started-app hebt gekloond en geopend, ga je een Dockerfile
aanmaken ter hoogte van het package.json
bestand. In dit bestand voeg je dan volgende code toe:
# syntax=docker/dockerfile:1
FROM node:18-alpine
WORKDIR /app
COPY . .
RUN yarn install --production
CMD ["node", "src/index.js"]
EXPOSE 3000
Important
Vergeet dit bestand uiteraard niet op te slaan (CTRL + S).
Nu dat je de Dockerfile hebt aangemaakt met de benodigde criteria, check je eerst of de Docker applicatie open staat op je computer (anders kan hij de app niet bouwen). Als dat gebeurt is ga je de image bouwen door het volgende commando uit te voeren in de terminal van Visual Studio Code:
docker build -t getting-started .
Note
Je terminal zou er ongeveer zo moeten uitzien.
Nu dat je afbeelding gebouwd is kan je deze ook gaan uitvoeren in een container. Dit kan je doen met het volgende commando:
docker run -dp 127.0.0.1:3000:3000 getting-started
Note
-dp
voert de container op de achtergond uit (--detach) en creëert een poorttoewijzing tussen de host en de container (--publish). In dit geval publiceert poort 3000
van de container naar 127.0.0.1:3000
oftewel localhost:3000
op de host. Als je geen poorttoewijzing definieert zou je geen toegang hebben tot de app vanaf de host.
Je kan altijd dubbelchecken in de Docker app of de container effectief werd aangemaakt en opgestart:
Nu dat de image werd gebouwd en je deze hebt gestart in een container, kan je deze gebruiken op de poort die je eerder definieerde. In dit geval is dat dus op http://localhost:3000.
Voeg wat items toe om te testen of de app correct werkt:
Nu dat we succesvol een app hebben gebouwd en gestart kunnen we deze gaan toevoegen aan de Github repository zodat we er een Github Actions Workflow mee kunnen maken.
Dit kan je doen door je lokale directory te verbinden met de Github repo met volgende commando:
git remote add origin https://github.com/arnodeco/project.git
Vervolgens ga je je lokale bestanden toevoegen en comitten aan de hand van:
git add .
git commit -m "Bestanden toevoegen aan repo"
Nu kan je dan eindelijk je bestanden gaan pushen naar je repo met dit commando:
git push -u origin main
Als alles goed is gegaan, zal je nu je bestanden in je Github repository zien staan.
Nu zal je eerst een directory moeten aanmaken op Docker Hub waarmee je jouw action zal verbinden. Dit doe je door in te loggen op Docker Hub en vervolgens een nieuwe repository aan te maken. Je hoeft hier niets in te plaatsen, aangezien onze Workflow Action dit automatisch zal doen.
In de stap 10 zullen we een workflow bestand aanmaken, maar die maakt gebruik van je inloggegevens van Docker Hub om te kunnen verbinden. Het is natuurlijk niet zo veilig om je inloggegevens rechtstreeks hier in te plaatsen, daarom zullen we gebruik maken van GitHub secrets om je Docker Hub passwoord en username te definiëren en geheim te houden.
Je doet dit door bovenaan naar de Settings te navigeren en links onder Secrets and Variables op Actions te klikken. Hier kan je dan twee nieuwe repository secrets toevoegen voor zowel je Docker Hub username als je password. Doe dit met de volgende naamgevingen: DOCKER_USERNAME
en DOCKER_PASSWORD
.
Om een Action Workflow te kunnen maken die de Docker image gaat bouwen en pushen, hebben we een workflow bestand nodig. Hiervoor maak je eerst een mapje .github/workflows
in je directory. In dit mapje steek je vervolgens een yml bestand. In dit geval noem ik het docker-image.yml
.
In dit bestand ga vervolgens deze code plakken:
name: Docker image build and push
on:
push:
branches:
- main
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v2
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
- name: Log in to Docker Hub
uses: docker/login-action@v2
with:
username: ${{ secrets.DOCKER_USERNAME }}
password: ${{ secrets.DOCKER_PASSWORD }}
- name: Build and push Docker image
uses: docker/build-push-action@v2
with:
push: true
tags: gebruikersnaam/repo-naam:latest
Important
gebruikersnaam/repo-naam:latest
moet overeen komen met de repository die je aanmaakte op Docker Hub in stap 8. In mijn geval is dat dus arnodeco/docker-image:latest
.
Note
Merk op hoe username
en password
in dit bestand worden gedefinieerd aan de hand van de repository secrets die we in stap 9 toevoegde!
Nu dat je je workflow bestand hebt aangemaakt ga je deze pushen naar je Github repository en dan zal je zien dat de Workflow action wordt toegevoegd bij Actions!
Je workflow bestand pushen doe je aan de hand van deze commando's:
git add .github/workflows/docker-image.yml
git commit -m "Github Actions Workflow bestand toevoegen"
git push origin main
Wacht nu enkele seconden en je zal onder de Actions tab je Action Workflow in actie zien!