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.
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
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
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
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
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
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/
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.