Breve introducción práctica al DevOps - (es) 2021_03_18
El documento es una introducción práctica al DevOps, dirigida a desarrolladores y líderes técnicos, que aborda su importancia, procesos y herramientas clave como Docker, Kubernetes y CI/CD. Se destacan las prácticas de DevOps que fomentan la automatización y mejora continua en el desarrollo de software, así como ejemplos concretos y referencias. Además, se enfatiza la cultura colaborativa y compartida que caracteriza a DevOps, sugiriendo que la rapidez en la iteración es crucial para liderar en el mercado.
Creasoft.dev presenta una introducción al DevOps por Young-Suk Ahn Park, abordando su propósito y objetivo, centrándose en desarrolladores y líderes técnicos.
Se describe la evolución del desarrollo de software, destacando la mejora constante que permite DevOps, comparándolo con enfoques anteriores.
DevOps aumenta la agilidad en procesos de desarrollo, enfatizando la importancia de la colaboración, automatización y retroalimentación continua.
Se presentan herramientas y procesos clave en DevOps, como planificación, codificación, pruebas y despliegue, resaltando la colaboración y monitoreo.
Se explora Docker como plataforma de contenedores, sus ventajas, arquitectura y ejemplos de configuraciones como Dockerfile y docker-compose.
Kubernetes se presenta como orquestador de contenedores, abordando su funcionalidad para el despliegue, escalamiento y mantenimiento de servicios.
Helm se describe como un administrador de paquetes para Kubernetes, facilitando la gestión de aplicaciones en entornos de contenedores.
Playwright se introduce como una herramienta para automatizar pruebas de navegador, aumentando la cobertura a través de scripts funcionales.
CI/CD se destaca como una práctica esencial en DevOps, minimizando la intervención humana y acelerando los ciclos de lanzamiento.
Snyk se menciona como una herramienta para la detección de vulnerabilidades en el código, brindando protección adicional en el desarrollo.
Se enumeran referencias y herramientas clave para DevOps, abarcando aspectos de colaboración, administración de API y pruebas.
Se destaca la importancia de la cultura ágil y colaborativa en DevOps, enfatizando la responsabilidad compartida del equipo en el desarrollo.
Información de contacto y recursos del sitio web de Creasoft.dev, finalizando la presentación.
Creasoft.dev 2021
Young SukAhn 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 cercadel 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
Importancia delDevOps
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 conDevOps
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
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 deDevOps
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 procesoy 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
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
Dockerfile
FROM node:12.13-alpineAS 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 buildit, 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
#2 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/
#5 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.