SlideShare una empresa de Scribd logo
1 de 31
Creasoft.dev 2021
Breve introducción práctica al DevOps
Desarrollando rápidamente y robustamente
Young-Suk Ahn Park / MSEng.
Marzo 2021
Creasoft.dev 2021
Young Suk Ahn Park / MSEng
Arquitecto de software.
Con Maestría en ingeniería de software en
Carnegie Mellon University.
Preocupado por la crisis ambiental, actualmente
está aprendiendo sobre sostenibilidad.
2
https://youngsukahn.com
https://creasoft.dev
https://empoderemosmas.com
Creasoft.dev 2021
A cerca del documento
Propósito
Introducción al DevOps con ejemplos
concretos de prácticas y herramientas.
Audiencia
Desarrolladores y líderes técnicos
trabajando en proyectos de desarrollo
de software
Contenido
1. Contexto
2. DevOps y su importancia
3. Proceso y Herramientas
a. Docker y contenedores
b. Kubernetes
c. Helm
d. Prueba funcional
e. Integracion Continua, Despliegue
continuo (CD/CI)
f. Detección de vulnerabilidad
4. Seguridad
3
Creasoft.dev 2021
Desarrollo de software hoy día
¡Constante mejora de servicio sin comprometer calidad!
4
Creasoft.dev 2021
Desarrollo en el pasado...
Ágil sin devops
Antes de ágil
5
Creasoft.dev 2021
Ágil + DevOps
6
Creasoft.dev 2021
Importancia del DevOps
CÓDIGO PRODUCCIÓN USUARIOS
CICLO EN CUESTIÓN DE MESES - MIENTRAS LA COMPETENCIA SE ADELANTA
Pruebas
Unitarias
Proceso
manual de
release
Etiquetado
de la
versión
Verifica
Seguridad
Rollback
manual
Compila-
ción
Pruebas
de
integración
Pruebas
carga
.. manual ...
IDEA
RETROALIMENTACIÓN
7
Creasoft.dev 2021
Aceleración con DevOps
CÓDIGO PRODUCCIÓN USUARIOS
CICLO EN CUESTIÓN DE DÍAS, HASTA HORAS - VALOR LLEGA AL CLIENTE MÁS
RÁPIDO
Compila-
ción
Pruebas
Unitarias
Etiquetado
de
la
versión
Verifica
seguridad
Pruebas
de
carga
IDEA
RETROALIMENTACIÓN
8
Creasoft.dev 2021
AQUEL QUE PUEDE ITERAR MÁS RÁPIDAMENTE
ES EL QUE LIDERA EN EL MERCADO
9
Creasoft.dev 2021
¿Que es DevOps?
Seguri-
dad
10
Creasoft.dev 2021
CALMS Framework
● Cultura - DevOps es un cambio de mentalidad en donde el
equipo trabaja en consona para mantener el producto.
● Automatización - Ciclo de desarrollo más rápido con
mínima intervención humana
● Ligero (Lean) - Eliminación de actividades de poco valor
● Mensurado - Métricas para ayudar al equipo a enfocar
● Compartido (Sharing) - Los conocimientos y cargas de
desarrolladores y operadores se comparten
11
Creasoft.dev 2021
Prácticas de DevOps
1. Desarrollo continuo
2. Automatización de integración y despliegue
3. Retroalimentación continua basados en monitoreo y
métricas
4. Análisis de raíz de la causa
5. Todo bajo control de versión - hasta la infraestructura
Todo trabajo mecánico repetitivo se automatiza y entra en
un ciclo virtuoso de rápido despliegue y validación del
software. El desarrollo y operación se maneja por el mismo
equipo
12
Creasoft.dev 2021
El proceso y las herramientas
PLANEA CODIFICA CONSTRUYE PRUEBA LANZA DESPLIEGA OPERA MONITOREA
Colabo-
ración
ChatOps Calidad de
código
IDE
Empaqueta
miento
Vulnera-
bilidad
Prueba
funcional
Prueba
Unitaria
Nube
bóveda
Roles
Autentic
Logs
Monitoreo
VCS Contenedor Artefactos CI/CD Orquestrador
Admin API
Provisión
Prueba Perf
& Caos
13
Creasoft.dev 2021
Ejemplos concretos
PLANEA CODIFICA CONSTRUYE PRUEBA LANZA DESPLIEGA OPERA MONITOREA
Colabo-
ración
ChatOps
IDE
Empaqueta
miento
Vulnera-
bilidad
Prueba
funcional
Prueba
Unitaria
Nube
bóveda
Roles
Autentica-
cion
Logs
Monitoreo
Git host Docker Artefactos CI/CD Kubernetes
k3s
Admin API
Provisión
(Terraform)
Prueba Perf
Calidad de
código
14
Creasoft.dev 2021
Docker - La plataforma de contenedores
¿Qué problemas resuelve?
● El paquete (imagen) generado include todo el entorno
completo. No más ¿Por que no funciona si funcionó en mi
máquina?
Facilita el empaquetamiento portable de software, los llamados
contenedores.
# Ejemplo: ejecuta el servicio nginx escuchando puerto 8080
$ docker run --rm --name mi-nginx -p 8080:80 nginx
# Ejemplo: ejecuta el servicio nginx escuchando puerto 8080
$ docker build -t miapp:latest -f docker/Dockerfile .
$ docker run miapp 15
Creasoft.dev 2021
Docker - Arquitectura
Fuente: https://docs.docker.com/get-started/overview/
16
Creasoft.dev 2021
Dockerfile
FROM node:12.13-alpine AS build
WORKDIR /usr/src/app
COPY package*.json yarn.lock ./
RUN yarn --frozen-lockfile
COPY . .
RUN yarn build
## Building the prod-only dependencies
FROM node:12.13-alpine AS deps
WORKDIR /usr/src/app
COPY package*.json yarn.lock ./
RUN yarn install --production
## Packaging the prod application
FROM node:12.13-alpine AS packaging
WORKDIR /usr/src/app
COPY --from=deps /usr/src/app/node_modules ./node_modules
COPY --from=build /usr/src/app/dist ./dist
COPY wait-for.sh ./
EXPOSE 3000
USER node
CMD ["node", "dist/main"]
FROM: Imagen base
COPY: Copia los archivos
para trabajar en ellos
RUN: Ejecuta comando, ej.
Compilar los codigos fuentes
FROM: Nuevo stage: ayuda a
reducir el tamaño de la imagen
CMD: ejecuta el comando al
correr la imagen. 17
Creasoft.dev 2021
docker-compose.yml
version: '3.7'
services:
mi-backend:
image: ${IMAGE_TAG}
ports:
- ${SERVER_PORT}:${SERVER_PORT}
command: sh -c "./wait-for.sh kno-db:5432 -- npx db-migrate.sh && node
dist/main"
env_file:
- ../.env.docker
depends_on:
- kno-db
mi-db:
image: postgres:12
container_name: postgres
environment:
POSTGRES_PASSWORD: ${DB_PASSWORD}
POSTGRES_USER: ${DB_USERNAME}
POSTGRES_DB: ${DB_DATABASE_NAME}
PG_DATA: /var/lib/postgresql/data
ports:
- 5432:5432
volumes:
- pgdata:/var/lib/postgresql/data
volumes:
pgdata:
services: lista de servicios
a correr
image: la imagen del docker a
correr
command: comando a ejecutar
depends_on: servicio a que
depende.
port: mapeo del puerto
[host]:[contenedor]
18
Creasoft.dev 2021
Kubernetes - El orquestrador de contenedores
¿Qué problemas resuelve?
● Mantiene el estado del servicio configurado de manera
declarativa
● Se encarga de los fallos automáticamente.
Automatiza el despliegue y escalamiento horizontal de las
aplicaciones.
# Ejemplo: Instala objetos (deployments) e incrementa replicas
$ kubectl apply -f k8-config.yaml
$ kubectl scale --replicas=3 -f k8-config.yaml
19
Creasoft.dev 2021
Kubernetes - Arquitectura
El despliegue en un cluster de Kubernetes Servicios expuestos a la red
Fuente: https://kubernetes.io/docs/tutorials/kubernetes-basics
20
Creasoft.dev 2021
Kubernetes - Ejemplo: k8-config.yaml
# Source: knoesia-backend/templates/deployment.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
name: knoesia-backend
labels:
app.kubernetes.io/name: knoesia-backend
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: knoesia-backend
template:
metadata:
labels:
app.kubernetes.io/name: knoesia-backend
spec:
containers:
- name: knoesia-backend
image: "registry.gitlab.com/betternia/incubation/knoesia/knoesia-
backend:latest"
ports:
- name: http
containerPort: 8080
protocol: TCP
livenessProbe:
httpGet:
path: /info
kind: tipo de objeto
replicas: cantidad procesos
corriendo
matchLabels: selector del
pods a mantener la
especificación
template: plantilla del pod
image: la imagen de docker a
instanciar
livenessProbe: ruta para
probar si el servisio esta vivo
21
Creasoft.dev 2021
Helm - El orquestrador de contenedores
¿Qué problemas resuelve?
● Simplifica la definición de las aplicaciones con
configuraciones complejas
● Maneja las instalaciones de las aplicaciones en k8s.
Administrador de paquetes para kubernetes. Incluye utilidades,
motor de plantilla para declaraciones y registro de paquetes.
# Ejemplo: Instala postgres, luego hace un upgrade (ej. Incr. replica)
$ helm install mi-postgres bitnami/postgresql
$ helm upgrade mi-postgres bitnami/postgresql
22
Creasoft.dev 2021
Playwright - Automatizador de browser
¿Qué problemas resuelve?
● Puede ejecutar pruebas funcionales en diferentes tipos de
browser y grabar errores.
● Aumenta la cobertura de las pruebas.
Automatiza la ejecución del browser usando Nodejs.
# Ejemplo: Ejecuta las pruebas
$ npx folio --param screenshotOnFailure browserName=chromium
23
Creasoft.dev 2021
miprueba.test.ts
import './env';
import { Page } from "playwright";
import { describe, it, expect } from "@playwright/test";
describe("Mi prueba funcional", () => {
it("Login", async ({ page }) => {
await page.goto("http://localhost:8100/");
const loginBtn = await page.waitForSelector('ion-button[data-qa="login-
btn"]');
await loginBtn.click();
const usernameInput = await
page.waitForSelector('input[name="username"]');
await usernameInput.type(process.env.USER_ID);
const passwordInput = await
page.waitForSelector('input[name="password"]');
await passwordInput.type(process.env.USER_PWD);
await passwordInput.press('Enter');
const name = await page.innerText("ion-title");
expect(name).toBe("Daily");
});
Incluir las librerías
Navega hacia una página
Selecciona un objeto DOM
Hace click al objeto (boton en
este caso)
Verifica el resultado: la prueba
en si
24
Creasoft.dev 2021
CI/CD - Integración y Entrega Continua
¿Qué problemas resuelve?
● Minimiza la necesidad de intervención humana para
empaquetamiento, ejecución de pruebas y despliegue
● Reduce el ciclo de lanzamiento
Opciones
● GitHub Actions, GitLab-CI
● Bamboo, CircleCI, Jenkins, TravisCI, TeamCity, GoCD
Ejecuta tareas (ej. scripts) para automatizar el proceso desde
compilación hasta despliegue de la aplicación.
25
Creasoft.dev 2021
GitLab CI
test:e2e:
stage: test
image: docker/compose:latest
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
script:
- cd miapp-backend
- docker-compose --env-file .env.test -f docker-compose.test.yml up -d --build
- docker-compose -f docker-compose.test.yml --env-file .env.test run miapp-backend
yarn test -runInBand
- docker-compose -f docker-compose.test.yml --env-file .env.test down
docker:build:
stage: build
image: docker
variables:
DOCKER_DRIVER: overlay
services:
- docker:dind
before_script:
- docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} $CI_REGISTRY
script:
- cd knoesia-backend
- docker build -t ${CI_REGISTRY}/miapp-backend:${CI_COMMIT_SHORT_SHA} -f
docker/Dockerfile .
- docker push ${CI_REGISTRY}/miapp-backend:${CI_COMMIT_SHORT_SHA}
El script se ejecuta al realizar un
merge a la rama primaria (master)
26
Creasoft.dev 2021
Snyk - Detección de vulnerabilidades
SImplemente registre su repositorio con la clave en
el sitio de Snyk, y el servicio analizará su código.
27
Creasoft.dev 2021
Referencias
● Google, Accelerate State of DevOps 2019
● Google SRE Book
● Accelerate: The Science of Lean Software and DevOps: Building and
Scaling High Performing Technology Organizations
● Neil Ford, Continuous Delivery Workshop, Slide deck 1, deck 2, deck 3, video
● Agile Alliance, Continuous Delivery deck,
● Eliyahu M. Goldratt, The Goal: A Process of Ongoing Improvement
Enlace util:
● https://free-for.dev
28
Creasoft.dev 2021
Colaboracion
● GitHub, GitLab, Jira, PivotalTracker
Codificación
● VSCode, IntelliJ
Calidad de codito
● SonarQube, LGTM, DeepCode, DeepSource
Admin de API
● Swagger, Apigee, Apiary
Manejo de dependencias y paquetes
● Maven, Gradle, yarn, crate, Helm
Detección de Vulnerabilidad
● Snyk
Herramientas
Pruebas
● Unitarias: Cucumber, JUnit, Jest, TL
● Funcional: Playwright, Cypress, Selenium
● Perf: Gatling, k6, JMeter
Repositorio de Artefactos
● DockerHub, Quay, GitHub, GitLab
Provision, IaaC
● Terraform, Ansible, Chef
CICD
● GitHub Actions, GitLab-CI
● Bamboo, CircleCI, Jenkins, TravisCI, GoCD
Monitoreo
● New Relic, DataDog, AppDynamics, ELK,
29
Creasoft.dev 2021
“You build it, you run it”
- Werner Vogels, Amazon CTO
La cultura ágil y colaborativa es el alma de Devops.
El equipo comparte la responsabilidad del desarrollo,
operación y evolución del sistema.
30
Creasoft.dev 2021
http://creasoft.dev/es/
info@creasoft.dev
31

Más contenido relacionado

La actualidad más candente

DevOps introduction
DevOps introductionDevOps introduction
DevOps introductionSridhara T V
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesabhishek chawla
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyTelefónica
 
Devops online training ppt
Devops online training pptDevops online training ppt
Devops online training pptKhalidQureshi31
 
Docker introduction
Docker introductionDocker introduction
Docker introductionPhuc Nguyen
 
Devops Devops Devops
Devops Devops DevopsDevops Devops Devops
Devops Devops DevopsKris Buytaert
 
Container Runtime Security with Falco
Container Runtime Security with FalcoContainer Runtime Security with Falco
Container Runtime Security with FalcoMichael Ducy
 
Getting Started with DevOps
Getting Started with DevOpsGetting Started with DevOps
Getting Started with DevOpsAhmed Misbah
 
Monitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMonitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMartin Etmajer
 
DevOps Introduction
DevOps IntroductionDevOps Introduction
DevOps IntroductionRobert Sell
 

La actualidad más candente (20)

DevOps introduction
DevOps introductionDevOps introduction
DevOps introduction
 
Intro to Azure DevOps
Intro to Azure DevOpsIntro to Azure DevOps
Intro to Azure DevOps
 
Virtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management servicesVirtualization, Containers, Docker and scalable container management services
Virtualization, Containers, Docker and scalable container management services
 
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs AcademyBootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
BootCamp Online en DevOps (and SecDevOps) de GeeksHubs Academy
 
Devops
DevopsDevops
Devops
 
DevOps introduction
DevOps introductionDevOps introduction
DevOps introduction
 
DevOps
DevOps DevOps
DevOps
 
DevOps
DevOpsDevOps
DevOps
 
Devops online training ppt
Devops online training pptDevops online training ppt
Devops online training ppt
 
DevOps culture
DevOps cultureDevOps culture
DevOps culture
 
Welcome to Azure Devops
Welcome to Azure DevopsWelcome to Azure Devops
Welcome to Azure Devops
 
Docker introduction
Docker introductionDocker introduction
Docker introduction
 
Devops Devops Devops
Devops Devops DevopsDevops Devops Devops
Devops Devops Devops
 
Container Runtime Security with Falco
Container Runtime Security with FalcoContainer Runtime Security with Falco
Container Runtime Security with Falco
 
Getting Started with DevOps
Getting Started with DevOpsGetting Started with DevOps
Getting Started with DevOps
 
Monitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on KubernetesMonitoring, Logging and Tracing on Kubernetes
Monitoring, Logging and Tracing on Kubernetes
 
Docker Tutorial.pdf
Docker Tutorial.pdfDocker Tutorial.pdf
Docker Tutorial.pdf
 
Kubernetes workshop
Kubernetes workshopKubernetes workshop
Kubernetes workshop
 
"DevOps > CI+CD "
"DevOps > CI+CD ""DevOps > CI+CD "
"DevOps > CI+CD "
 
DevOps Introduction
DevOps IntroductionDevOps Introduction
DevOps Introduction
 

Similar a Breve introducción práctica al DevOps - (es) 2021_03_18

Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioOsvaldo
 
Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioOsvaldo
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsDavid Calavera
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microserviciosPedro J. Molina
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN StackPedro J. Molina
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackPedro J. Molina
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Micael Gallego
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para DockerAngel Borroy López
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Keopx
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020BelnGonzlezGarca1
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJSBEEVA_es
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando dockerChristian Rodriguez
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLabFIB
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparencytrustparency
 

Similar a Breve introducción práctica al DevOps - (es) 2021_03_18 (20)

Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudio
 
Continuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudioContinuous Delivery Un caso de estudio
Continuous Delivery Un caso de estudio
 
Conferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y RailsConferencia Rails: Integracion Continua Y Rails
Conferencia Rails: Integracion Continua Y Rails
 
Tecnologías para microservicios
Tecnologías para microserviciosTecnologías para microservicios
Tecnologías para microservicios
 
Microservicios sobre MEAN Stack
Microservicios sobre MEAN StackMicroservicios sobre MEAN Stack
Microservicios sobre MEAN Stack
 
Opensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN StackOpensouthcode: Microservicios sobre MEAN Stack
Opensouthcode: Microservicios sobre MEAN Stack
 
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
Herramientas y plugins para el desarrollo de aplicaciones cloud native para K...
 
Desarrollando una Extensión para Docker
Desarrollando una Extensión para DockerDesarrollando una Extensión para Docker
Desarrollando una Extensión para Docker
 
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
Docker - Entorno de trabajo configurado en 1 minuto [WCBilbao]
 
FROM lost to the Docker 2020
FROM lost to the Docker 2020FROM lost to the Docker 2020
FROM lost to the Docker 2020
 
FROM lost to the docker
FROM lost to the dockerFROM lost to the docker
FROM lost to the docker
 
Introducción a NodeJS
Introducción a NodeJSIntroducción a NodeJS
Introducción a NodeJS
 
Meetup V.E.No.M. y docker
Meetup V.E.No.M. y dockerMeetup V.E.No.M. y docker
Meetup V.E.No.M. y docker
 
De desarrollo a producción usando docker
De desarrollo a producción usando dockerDe desarrollo a producción usando docker
De desarrollo a producción usando docker
 
Novedades en CI/CD
Novedades en CI/CDNovedades en CI/CD
Novedades en CI/CD
 
Kubernetes para developers
Kubernetes para developersKubernetes para developers
Kubernetes para developers
 
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+DinLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
inLab FIB MeteorJS workshop by uLab UPC - Telefonica I+D
 
Taller mobile by trustparency
Taller mobile by trustparencyTaller mobile by trustparency
Taller mobile by trustparency
 
Framework Catalyst
Framework CatalystFramework Catalyst
Framework Catalyst
 
Pipelines as code with Drone
Pipelines as code with DronePipelines as code with Drone
Pipelines as code with Drone
 

Breve introducción práctica al DevOps - (es) 2021_03_18

  • 1. Creasoft.dev 2021 Breve introducción práctica al DevOps Desarrollando rápidamente y robustamente Young-Suk Ahn Park / MSEng. Marzo 2021
  • 2. Creasoft.dev 2021 Young Suk Ahn Park / MSEng Arquitecto de software. Con Maestría en ingeniería de software en Carnegie Mellon University. Preocupado por la crisis ambiental, actualmente está aprendiendo sobre sostenibilidad. 2 https://youngsukahn.com https://creasoft.dev https://empoderemosmas.com
  • 3. Creasoft.dev 2021 A cerca del documento Propósito Introducción al DevOps con ejemplos concretos de prácticas y herramientas. Audiencia Desarrolladores y líderes técnicos trabajando en proyectos de desarrollo de software Contenido 1. Contexto 2. DevOps y su importancia 3. Proceso y Herramientas a. Docker y contenedores b. Kubernetes c. Helm d. Prueba funcional e. Integracion Continua, Despliegue continuo (CD/CI) f. Detección de vulnerabilidad 4. Seguridad 3
  • 4. Creasoft.dev 2021 Desarrollo de software hoy día ¡Constante mejora de servicio sin comprometer calidad! 4
  • 5. Creasoft.dev 2021 Desarrollo en el pasado... Ágil sin devops Antes de ágil 5
  • 7. Creasoft.dev 2021 Importancia del DevOps CÓDIGO PRODUCCIÓN USUARIOS CICLO EN CUESTIÓN DE MESES - MIENTRAS LA COMPETENCIA SE ADELANTA Pruebas Unitarias Proceso manual de release Etiquetado de la versión Verifica Seguridad Rollback manual Compila- ción Pruebas de integración Pruebas carga .. manual ... IDEA RETROALIMENTACIÓN 7
  • 8. Creasoft.dev 2021 Aceleración con DevOps CÓDIGO PRODUCCIÓN USUARIOS CICLO EN CUESTIÓN DE DÍAS, HASTA HORAS - VALOR LLEGA AL CLIENTE MÁS RÁPIDO Compila- ción Pruebas Unitarias Etiquetado de la versión Verifica seguridad Pruebas de carga IDEA RETROALIMENTACIÓN 8
  • 9. Creasoft.dev 2021 AQUEL QUE PUEDE ITERAR MÁS RÁPIDAMENTE ES EL QUE LIDERA EN EL MERCADO 9
  • 10. Creasoft.dev 2021 ¿Que es DevOps? Seguri- dad 10
  • 11. Creasoft.dev 2021 CALMS Framework ● Cultura - DevOps es un cambio de mentalidad en donde el equipo trabaja en consona para mantener el producto. ● Automatización - Ciclo de desarrollo más rápido con mínima intervención humana ● Ligero (Lean) - Eliminación de actividades de poco valor ● Mensurado - Métricas para ayudar al equipo a enfocar ● Compartido (Sharing) - Los conocimientos y cargas de desarrolladores y operadores se comparten 11
  • 12. Creasoft.dev 2021 Prácticas de DevOps 1. Desarrollo continuo 2. Automatización de integración y despliegue 3. Retroalimentación continua basados en monitoreo y métricas 4. Análisis de raíz de la causa 5. Todo bajo control de versión - hasta la infraestructura Todo trabajo mecánico repetitivo se automatiza y entra en un ciclo virtuoso de rápido despliegue y validación del software. El desarrollo y operación se maneja por el mismo equipo 12
  • 13. Creasoft.dev 2021 El proceso y las herramientas PLANEA CODIFICA CONSTRUYE PRUEBA LANZA DESPLIEGA OPERA MONITOREA Colabo- ración ChatOps Calidad de código IDE Empaqueta miento Vulnera- bilidad Prueba funcional Prueba Unitaria Nube bóveda Roles Autentic Logs Monitoreo VCS Contenedor Artefactos CI/CD Orquestrador Admin API Provisión Prueba Perf & Caos 13
  • 14. Creasoft.dev 2021 Ejemplos concretos PLANEA CODIFICA CONSTRUYE PRUEBA LANZA DESPLIEGA OPERA MONITOREA Colabo- ración ChatOps IDE Empaqueta miento Vulnera- bilidad Prueba funcional Prueba Unitaria Nube bóveda Roles Autentica- cion Logs Monitoreo Git host Docker Artefactos CI/CD Kubernetes k3s Admin API Provisión (Terraform) Prueba Perf Calidad de código 14
  • 15. Creasoft.dev 2021 Docker - La plataforma de contenedores ¿Qué problemas resuelve? ● El paquete (imagen) generado include todo el entorno completo. No más ¿Por que no funciona si funcionó en mi máquina? Facilita el empaquetamiento portable de software, los llamados contenedores. # Ejemplo: ejecuta el servicio nginx escuchando puerto 8080 $ docker run --rm --name mi-nginx -p 8080:80 nginx # Ejemplo: ejecuta el servicio nginx escuchando puerto 8080 $ docker build -t miapp:latest -f docker/Dockerfile . $ docker run miapp 15
  • 16. Creasoft.dev 2021 Docker - Arquitectura Fuente: https://docs.docker.com/get-started/overview/ 16
  • 17. Creasoft.dev 2021 Dockerfile FROM node:12.13-alpine AS build WORKDIR /usr/src/app COPY package*.json yarn.lock ./ RUN yarn --frozen-lockfile COPY . . RUN yarn build ## Building the prod-only dependencies FROM node:12.13-alpine AS deps WORKDIR /usr/src/app COPY package*.json yarn.lock ./ RUN yarn install --production ## Packaging the prod application FROM node:12.13-alpine AS packaging WORKDIR /usr/src/app COPY --from=deps /usr/src/app/node_modules ./node_modules COPY --from=build /usr/src/app/dist ./dist COPY wait-for.sh ./ EXPOSE 3000 USER node CMD ["node", "dist/main"] FROM: Imagen base COPY: Copia los archivos para trabajar en ellos RUN: Ejecuta comando, ej. Compilar los codigos fuentes FROM: Nuevo stage: ayuda a reducir el tamaño de la imagen CMD: ejecuta el comando al correr la imagen. 17
  • 18. Creasoft.dev 2021 docker-compose.yml version: '3.7' services: mi-backend: image: ${IMAGE_TAG} ports: - ${SERVER_PORT}:${SERVER_PORT} command: sh -c "./wait-for.sh kno-db:5432 -- npx db-migrate.sh && node dist/main" env_file: - ../.env.docker depends_on: - kno-db mi-db: image: postgres:12 container_name: postgres environment: POSTGRES_PASSWORD: ${DB_PASSWORD} POSTGRES_USER: ${DB_USERNAME} POSTGRES_DB: ${DB_DATABASE_NAME} PG_DATA: /var/lib/postgresql/data ports: - 5432:5432 volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata: services: lista de servicios a correr image: la imagen del docker a correr command: comando a ejecutar depends_on: servicio a que depende. port: mapeo del puerto [host]:[contenedor] 18
  • 19. Creasoft.dev 2021 Kubernetes - El orquestrador de contenedores ¿Qué problemas resuelve? ● Mantiene el estado del servicio configurado de manera declarativa ● Se encarga de los fallos automáticamente. Automatiza el despliegue y escalamiento horizontal de las aplicaciones. # Ejemplo: Instala objetos (deployments) e incrementa replicas $ kubectl apply -f k8-config.yaml $ kubectl scale --replicas=3 -f k8-config.yaml 19
  • 20. Creasoft.dev 2021 Kubernetes - Arquitectura El despliegue en un cluster de Kubernetes Servicios expuestos a la red Fuente: https://kubernetes.io/docs/tutorials/kubernetes-basics 20
  • 21. Creasoft.dev 2021 Kubernetes - Ejemplo: k8-config.yaml # Source: knoesia-backend/templates/deployment.yaml apiVersion: apps/v1 kind: Deployment metadata: name: knoesia-backend labels: app.kubernetes.io/name: knoesia-backend spec: replicas: 1 selector: matchLabels: app.kubernetes.io/name: knoesia-backend template: metadata: labels: app.kubernetes.io/name: knoesia-backend spec: containers: - name: knoesia-backend image: "registry.gitlab.com/betternia/incubation/knoesia/knoesia- backend:latest" ports: - name: http containerPort: 8080 protocol: TCP livenessProbe: httpGet: path: /info kind: tipo de objeto replicas: cantidad procesos corriendo matchLabels: selector del pods a mantener la especificación template: plantilla del pod image: la imagen de docker a instanciar livenessProbe: ruta para probar si el servisio esta vivo 21
  • 22. Creasoft.dev 2021 Helm - El orquestrador de contenedores ¿Qué problemas resuelve? ● Simplifica la definición de las aplicaciones con configuraciones complejas ● Maneja las instalaciones de las aplicaciones en k8s. Administrador de paquetes para kubernetes. Incluye utilidades, motor de plantilla para declaraciones y registro de paquetes. # Ejemplo: Instala postgres, luego hace un upgrade (ej. Incr. replica) $ helm install mi-postgres bitnami/postgresql $ helm upgrade mi-postgres bitnami/postgresql 22
  • 23. Creasoft.dev 2021 Playwright - Automatizador de browser ¿Qué problemas resuelve? ● Puede ejecutar pruebas funcionales en diferentes tipos de browser y grabar errores. ● Aumenta la cobertura de las pruebas. Automatiza la ejecución del browser usando Nodejs. # Ejemplo: Ejecuta las pruebas $ npx folio --param screenshotOnFailure browserName=chromium 23
  • 24. Creasoft.dev 2021 miprueba.test.ts import './env'; import { Page } from "playwright"; import { describe, it, expect } from "@playwright/test"; describe("Mi prueba funcional", () => { it("Login", async ({ page }) => { await page.goto("http://localhost:8100/"); const loginBtn = await page.waitForSelector('ion-button[data-qa="login- btn"]'); await loginBtn.click(); const usernameInput = await page.waitForSelector('input[name="username"]'); await usernameInput.type(process.env.USER_ID); const passwordInput = await page.waitForSelector('input[name="password"]'); await passwordInput.type(process.env.USER_PWD); await passwordInput.press('Enter'); const name = await page.innerText("ion-title"); expect(name).toBe("Daily"); }); Incluir las librerías Navega hacia una página Selecciona un objeto DOM Hace click al objeto (boton en este caso) Verifica el resultado: la prueba en si 24
  • 25. Creasoft.dev 2021 CI/CD - Integración y Entrega Continua ¿Qué problemas resuelve? ● Minimiza la necesidad de intervención humana para empaquetamiento, ejecución de pruebas y despliegue ● Reduce el ciclo de lanzamiento Opciones ● GitHub Actions, GitLab-CI ● Bamboo, CircleCI, Jenkins, TravisCI, TeamCity, GoCD Ejecuta tareas (ej. scripts) para automatizar el proceso desde compilación hasta despliegue de la aplicación. 25
  • 26. Creasoft.dev 2021 GitLab CI test:e2e: stage: test image: docker/compose:latest variables: DOCKER_DRIVER: overlay services: - docker:dind script: - cd miapp-backend - docker-compose --env-file .env.test -f docker-compose.test.yml up -d --build - docker-compose -f docker-compose.test.yml --env-file .env.test run miapp-backend yarn test -runInBand - docker-compose -f docker-compose.test.yml --env-file .env.test down docker:build: stage: build image: docker variables: DOCKER_DRIVER: overlay services: - docker:dind before_script: - docker login -u ${CI_REGISTRY_USER} -p ${CI_REGISTRY_PASSWORD} $CI_REGISTRY script: - cd knoesia-backend - docker build -t ${CI_REGISTRY}/miapp-backend:${CI_COMMIT_SHORT_SHA} -f docker/Dockerfile . - docker push ${CI_REGISTRY}/miapp-backend:${CI_COMMIT_SHORT_SHA} El script se ejecuta al realizar un merge a la rama primaria (master) 26
  • 27. Creasoft.dev 2021 Snyk - Detección de vulnerabilidades SImplemente registre su repositorio con la clave en el sitio de Snyk, y el servicio analizará su código. 27
  • 28. Creasoft.dev 2021 Referencias ● Google, Accelerate State of DevOps 2019 ● Google SRE Book ● Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations ● Neil Ford, Continuous Delivery Workshop, Slide deck 1, deck 2, deck 3, video ● Agile Alliance, Continuous Delivery deck, ● Eliyahu M. Goldratt, The Goal: A Process of Ongoing Improvement Enlace util: ● https://free-for.dev 28
  • 29. Creasoft.dev 2021 Colaboracion ● GitHub, GitLab, Jira, PivotalTracker Codificación ● VSCode, IntelliJ Calidad de codito ● SonarQube, LGTM, DeepCode, DeepSource Admin de API ● Swagger, Apigee, Apiary Manejo de dependencias y paquetes ● Maven, Gradle, yarn, crate, Helm Detección de Vulnerabilidad ● Snyk Herramientas Pruebas ● Unitarias: Cucumber, JUnit, Jest, TL ● Funcional: Playwright, Cypress, Selenium ● Perf: Gatling, k6, JMeter Repositorio de Artefactos ● DockerHub, Quay, GitHub, GitLab Provision, IaaC ● Terraform, Ansible, Chef CICD ● GitHub Actions, GitLab-CI ● Bamboo, CircleCI, Jenkins, TravisCI, GoCD Monitoreo ● New Relic, DataDog, AppDynamics, ELK, 29
  • 30. Creasoft.dev 2021 “You build it, you run it” - Werner Vogels, Amazon CTO La cultura ágil y colaborativa es el alma de Devops. El equipo comparte la responsabilidad del desarrollo, operación y evolución del sistema. 30

Notas del editor

  1. Breve introducción práctica al DevOps, ver. 1.0 (es) 2021/03/18 -- DESCRIPCIÓN -- DevOps es un cambio de cultura que acelera el ciclo de desarrollo de software sin comprometer la calidad. Esta diapositiva hace una breve introducción al devops con ejemplos concretos de proceso y herramientas. -- TAGS -- Devops, desarrollo, ciclo de vida de desarrollo, ingeniería de software, docker, kubernetes, helm, seguridad de software, CI/CD, integración continua, despliegue continuo Fotos: https://pixabay.com/illustrations/knot-fixing-connection-torus-242409/
  2. Como las diferentes empresas de tecnología y empresas que ofrecen servicios se adaptan diariamente, haciendo mejoras basados en métricas Estas empresas introducen mejoras a sus productos de software casi diariamente. Sin una cultura agil, tal velocidad no seria posible.
  3. https://www.pexels.com/photo/man-holding-shovel-3285094/
  4. https://www.shutterstock.com/image-photo/mindful-calm-businessman-suit-meditating-office-1289761645
  5. https://en.wiktionary.org/wiki/DevOps https://commons.wikimedia.org/wiki/File:Devops-toolchain.svg https://www.atlassian.com/devops/what-is-devops
  6. https://aws.amazon.com/devops/what-is-devops/ https://www.netapp.com/devops-solutions/what-is-devops/
  7. https://devopedia.org/devops
  8. https://kubernetes.io/docs/reference/kubectl/cheatsheet/
  9. https://kubernetes.io/docs/tutorials/kubernetes-basics/deploy-app/deploy-intro/ https://kubernetes.io/docs/tutorials/kubernetes-basics/expose/expose-intro/
  10. https://martinfowler.com/bliki/DevOpsCulture.html