#devcon openfaas & gitlab ci-cd...> .gitlab-ci.yml définit un ensemble de jobs (commandes)...

29
OpenFaaS & GitLab CI-CD Édition 2018 #DevCon

Upload: others

Post on 26-May-2020

19 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

OpenFaaS & GitLab CI-CD Édition 2018

#DevCon

Page 2: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

TAM - SA @ GitLab

🐦 @k33g_org 🦊 @k33g | [email protected]

https://gitlab.com/k33g/q/issues

📷 @GDGLyon - 🏨 @ScalaIO_FR - 📝 @BlendWebMix

#devcon2018 @k33g_orgDevCon

Page 3: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�3

FaaS - OpenFaaS

1ère fonction

GitLab Runners - CI-CD

OpenFaaS & GitLab CI

Déploiement / Review App / Multi pipelines

Agenda

#devcon2018 @k33g_orgDevCon

Page 4: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�4

FaaS “ServerLess 🤪”

#devcon2018 @k33g_orgDevCon

Page 5: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�5

Développer (Tester) - Exécuter (Déployer…) - Gérer

les fonctionnalités d’une application

Sans la complexité

de l’infrastructure

FaaS

Page 6: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�6

“Une” architecture FaaS

Function Platform (FaaS)

Container Platform (CaaS)

Infrastructure Platform (IaaS)

Page 7: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�7

OpenFaaS Framework ❤

#devcon2018 @k33g_orgDevCon

Page 8: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

1 framework faas on-premises

no vendor lock-in

facile à utiliser

multi langages

une communauté sympathique

�8

OpenFaaS?

https://www.openfaas.com

Alex Ellis @alexellisuk

Page 9: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�9

Une architecture OpenFaaS

Function Platform (FaaS)

Docker Swarm

My Laptop

Page 10: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�10

Une autre architecture OpenFaaS

Function Platform (FaaS)

K8S

Your servers

Page 11: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

apt-get install -y docker-ce # Add entries to hosts file: echo "" >> /etc/hosts echo '#{REGISTRY_IP} #{REGISTRY_DOMAIN}' >> /etc/hosts echo "" >> /etc/hosts docker swarm init --advertise-addr #{OPENFAAS_IP} # Add unsecure registry echo "" >> /etc/docker/daemon.json echo '{' >> /etc/docker/daemon.json echo ' "insecure-registries" : ["#{REGISTRY}"]' >> /etc/docker/daemon.json echo '}' >> /etc/docker/daemon.json echo "" >> /etc/docker/daemon.json

service docker restart

git clone https://github.com/openfaas/faas && \ cd faas && \ ./deploy_stack.sh

#devcon2018 @k33g_orgDevCon

Installation d’OpenFaaS (version Docker Swarm)

Page 12: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

apt-get install -y docker-ce

curl -sSL https://cli.openfaas.com | sudo -E sh

#devcon2018 @k33g_orgDevCon

Installation de la CLI OpenFaaS

Page 13: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�13

Demo Time - 1st f(x)

#devcon2018 @k33g_orgDevCon

Page 14: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque
Page 15: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�15

GitLab + GitLab CI Cycle de vie projet

#devcon2018 @k33g_orgDevCon

Page 16: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�16

Plan Create

#devcon2018 @k33g_orgDevCon

Page 17: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�17

Manage Plan Create Verify Package Release Configure Monitor Secure

#devcon2018 @k33g_orgDevCon

😍 😍Continuous Integration Continuous Delivery

Review Apps

Page 18: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

Project life cycle

#devcon2018 @k33g_orgDevCon

Page 19: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

Feature Flow

#devcon2018 @k33g_orgDevCon

Page 20: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�20

GitLab Runners

#devcon2018 @k33g_orgDevCon

Page 21: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

GitLab Server

Runner Server 0..n Runner process Even your Laptop

0..n Runner process

#devcon2018 @k33g_orgDevCon

Page 22: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

> Ajouter un fichier .gitlab-ci.yml à la racine du projet

> .gitlab-ci.yml définit un ensemble de jobs (commandes) et

de contraintes par stages ( {} == pipeline)

> Le pipeline est déclenché à chaque commit ou push et

s’exécute dans le runner

> Et .gitlab-ci.yml explique au(x) Runner(s) ce qu’il faut faire

.gitlab-ci.yml

#devcon2018 @k33g_orgDevCon

Page 23: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

stages: - ▶play - 🦄tests - 📦generate

-addition: only: - master stage: ▶play tags: - mini-runner script: - npm start add 40 2

✅🆘tests: stage: 🦄tests tags: - mini-runner script: - npm test

#devcon2018 @k33g_orgDevCon

Page 24: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

Commit / push / merge

GitLab Server

Runner Server 0..n Runner process

Poll

Read .gitlab-ci.yml

Execute

Test

Build

Deploy

etc…

1

2

3

4

5

#devcon2018 @k33g_orgDevCon

Page 25: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

# Install GitLab Runner curl -L https://packages.gitlab.com/install/repositories/runner/gitlab-runner/script.deb.sh | sudo bash apt-get install -y gitlab-runner

# Add entries to hosts file: echo "" >> /etc/hosts echo '#{GITLAB_IP} #{GITLAB_DOMAIN}' >> /etc/hosts echo "" >> /etc/hosts

# Registering GitLab Runner gitlab-runner register --non-interactive \ --url "http://#{GITLAB_DOMAIN}/" \ --name "shell_runner_tests_nodejs" \ --registration-token #{CI_REGISTRATION_TOKEN} \ --tag-list “#{OPENFAAS_RUNNER_TAG}" \ --executor shell

#devcon2018 @k33g_orgDevCon

Installation d’un Runner

Page 26: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

GitLab Server VM

Runner VM 1 shell runner

Runner VM 1 shell runner

+ Docker CLI + OpenFaas CLI

OpenFaaS Server VM Docker Swarm

Docker Registry

https://gitlab.com/tanuki-tools/vagrant-files

#devcon2018 @k33g_orgDevCon

Page 27: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�27

https://www.openfaas.com

Demo(s) Time CI-CD with OpenFaaS

#devcon2018 @k33g_orgDevCon

Page 28: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque
Page 29: #DevCon OpenFaaS & GitLab CI-CD...> .gitlab-ci.yml définit un ensemble de jobs (commandes) et de contraintes par stages ( {} == pipeline) > Le pipeline est déclenché à chaque

�29

Merci 😍 & Questions

#devcon2018 @k33g_orgDevCon