Introducción a DevOps: Conceptos básicos y principios

Introducción a DevOps: Conceptos básicos y principios

DevOps es una cultura de desarrollo de software que tiene como objetivo integrar equipos de desarrollo y operaciones, automatizar los procesos de entrega y monitoreo y garantizar la calidad y confiabilidad del producto.

En este artículo explicaremos qué es DevOps, cuáles son sus beneficios, cómo implementarlo en la práctica y cuáles son los principios fundamentales que guían este enfoque.


¿Qué es DevOps?

DevOps es una contracción de las palabras "desarrollo" y "operaciones". El término surgió en 2009, cuando Patrick Debois organizó un evento llamado DevOpsDays para discutir las dificultades de la colaboración entre los equipos de operaciones y desarrollo de software. Desde entonces, el concepto se ha vuelto popular y se ha convertido en una referencia para las empresas que buscan entregar software de manera rápida, eficiente y continua.

DevOps no es una metodología, una herramienta o un rol. DevOps es una cultura, una forma de pensar y actuar que involucra personas, procesos y tecnologías. El objetivo de DevOps es crear un entorno de trabajo colaborativo donde los equipos de desarrollo y operaciones trabajen juntos desde el inicio del proyecto hasta la entrega y la atención al cliente. De esta forma, es posible reducir conflictos, errores, retrasos y costes, además de aumentar la satisfacción del usuario.

Un ejemplo de DevOps en la práctica es el caso de Netflix, empresa que ofrece servicios de streaming de películas y series. Netflix utiliza DevOps para ofrecer nuevas funciones y actualizaciones a sus millones de usuarios en todo el mundo. Para lograr esto, Netflix cuenta con un equipo integrado de desarrolladores e ingenieros que trabajan juntos para planificar, probar, implementar y monitorear el software. Netflix también utiliza herramientas como Jenkins, Spinnaker y Chaos Monkey para automatizar los procesos de Integración Continua (CI), Entrega Continua (CD) y pruebas de resiliencia del software.

Un código de ejemplo de cómo usar Jenkins para crear una canalización de integración continua (CI) que ejecute pruebas automatizadas con cada confirmación en el repositorio de código es:

pipeline {
    agent any
    stages {
        stage('Build') {
            steps {
                sh 'mvn clean package'
            }
        }
        stage('Test') {
            steps {
                sh 'mvn test'
            }
        }
        stage('Deploy') {
            steps {
                sh 'scp target/my-app.jar user@server:/opt/my-app/'
            }
        }
    }
}


¿Cuáles son los beneficios de DevOps?

DevOps aporta una serie de beneficios a las empresas que adoptan esta cultura. Algunos de los principales son:

  • Mejora de la calidad de software: Al integrar los equipos de desarrollo y operaciones, puede garantizar que el software cumpla con los requisitos funcionales y no funcionales, como rendimiento, seguridad y escalabilidad. Además, al automatizar las pruebas y la implementación del software, puede reducir los errores humanos y aumentar la confianza en el producto.
  • Aumento de la velocidad de entrega: Al adoptar prácticas ágiles y continuas, como la integración continua (CI) y la entrega continua (CD), es posible acelerar el ciclo de vida del software, desde la planificación hasta la producción. Esto le permite ofrecer valor a los usuarios con más frecuencia y responder a los cambios del mercado más rápidamente.
  • Reducción de costos: Al optimizar los procesos operativos y de desarrollo de software, es posible eliminar desperdicios, retrabajos y cuellos de botella. Esto se traduce en una mayor eficiencia y productividad del equipo, así como en una menor necesidad de recursos materiales y humanos.
  • Aumento de la satisfacción de los clientes: Al ofrecer software de calidad, rápido y confiable, es posible satisfacer las expectativas y necesidades de los usuarios. Además, al monitorear el comportamiento y los comentarios de los usuarios, puede obtener información para mejorar continuamente el producto.

Un ejemplo de aumento de la satisfacción del cliente con DevOps es el caso de Amazon, empresa que ofrece servicios de comercio electrónico y computación en la nube. Amazon utiliza DevOps para ofrecer nuevas funciones y correcciones a sus millones de clientes en todo el mundo. Para lograr esto, Amazon cuenta con un equipo integrado de desarrolladores y operadores que trabajan juntos para planificar, probar, implementar y monitorear el software.

Amazon también utiliza herramientas como AWS CodePipeline, AWS CodeDeploy y AWS CloudFormation para automatizar los procesos de integración continua (CI), entrega continua (CD) y gestión de infraestructura del software. Como resultado, Amazon puede entregar nuevas versiones del software cada 11,6 segundos, en promedio, y lograr un alto nivel de satisfacción del cliente.

Un código de ejemplo de cómo utilizar AWS CodePipeline para crear un pipeline de entrega continua (CD) que implemente software en diferentes entornos (desarrollo, pruebas, producción, etc.) de forma automatizada y controlada es:

Resources:
  MyFirstPipeline:
    Type: AWS::CodePipeline::Pipeline
    Properties:
      RoleArn: arn:aws:iam::123456789012:role/CodePipelineServiceRole
      Stages:
        - Name: Source
          Actions:
            - Name: SourceAction
              ActionTypeId:
                Category: Source
                Owner: ThirdParty
                Provider: GitHub
                Version: 1
              Configuration:
                Owner: my-github-username
                Repo: my-repo
                Branch: main
                OAuthToken: *****
              OutputArtifacts:
                - Name: MyApp
              RunOrder: 1
        - Name: Deploy
          Actions:
            - Name: DeployAction
              ActionTypeId:
                Category: Deploy
                Owner: AWS
                Provider: CodeDeploy
                Version: 1
              Configuration:
                ApplicationName: MyApp
                DeploymentGroupName: MyDeploymentGroup
              InputArtifacts:
                - Name: MyApp
              RunOrder: 1


¿Cómo implementar DevOps en la práctica?

No existe una receta única para implementar DevOps en la práctica. Cada empresa debe adaptar la cultura DevOps a su realidad, teniendo en cuenta su contexto, sus objetivos, sus desafíos y sus limitaciones. Sin embargo, hay algunos pasos que pueden ayudar en este viaje:

  • Definir una visión compartida: El primer paso es alinear las expectativas y objetivos de los equipos de desarrollo y operaciones en relación con el proyecto. Es importante definir una visión compartida de lo que se quiere lograr con el producto, cuáles son los criterios de éxito y cómo medir los resultados.
  • Establecer una comunicación efectiva: El segundo paso es establecer una comunicación efectiva entre los equipos de desarrollo y operaciones. Es fundamental que exista transparencia, confianza y retroalimentación constante entre las partes involucradas. Para ello se recomienda utilizar herramientas que faciliten la comunicación, como chats, videoconferencias, tableros kanban, etc.
  • Automatizar los procesos: El tercer paso es automatizar los procesos de desarrollo y operación del software. Esto incluye la automatización de pruebas (unitarias, integradas, funcionales, etc.), integración (CI), entrega (CD), implementación (CD), monitoreo (observabilidad), etc. Para ello es necesario utilizar herramientas que soporten estas prácticas, como Jenkins, GitLab CI/CD, Docker, Kubernetes, etc. Estas herramientas le permiten crear canales de software que realizan tareas de forma automatizada y estandarizada, garantizando la calidad y coherencia del producto.

Un ejemplo de automatización de procesos con DevOps es el caso de Spotify, empresa que ofrece servicios de streaming de música y podcasts. Spotify utiliza DevOps para ofrecer nuevas funciones y correcciones a sus millones de usuarios en todo el mundo. Para lograr esto, Spotify cuenta con un equipo integrado de desarrolladores y operadores que trabajan juntos para planificar, probar, implementar y monitorear el software.

Spotify también utiliza herramientas como Jenkins, Docker y Kubernetes para automatizar los procesos de integración continua (CI), entrega continua (CD) y gestión de infraestructura del software. Con esto, Spotify puede entregar alrededor de 200 actualizaciones por día, en promedio, y obtener un alto nivel de calidad y confiabilidad del producto.

  • Entrega continua: El cuarto paso es entregar el software a los usuarios con la mayor frecuencia posible sin comprometer la calidad y la seguridad. Esto implica adoptar un ciclo de vida del software ágil e iterativo, donde los cambios se realizan en pequeños incrementos y se validan constantemente. Esto le permite ofrecer valor a los usuarios con más frecuencia y responder a los cambios del mercado más rápidamente.

Un ejemplo de entrega continua con DevOps es el caso de Facebook, una empresa que ofrece servicios de redes sociales y redes sociales. Facebook utiliza DevOps para ofrecer nuevas funciones y correcciones a sus miles de millones de usuarios en todo el mundo. Para lograr esto, Facebook cuenta con un equipo integrado de desarrolladores y operadores que trabajan juntos para planificar, probar, implementar y monitorear el software.

Facebook también utiliza herramientas como Phabricator, Buck y Mercurial para automatizar los procesos de integración continua (CI), entrega continua (CD) y gestión de lanzamientos de software. Con esto, Facebook puede entregar alrededor de 50.000 actualizaciones por día, en promedio, y lograr un alto nivel de innovación y experimentación de productos.

Un código de ejemplo de cómo usar Phabricator para crear una canalización de integración continua (CI) que ejecute pruebas automatizadas con cada confirmación en el repositorio de código es:

<?php

// This is an example of a Phabricator build plan for PHP projects.
// It uses Arcanist to run unit tests and lint checks on every commit.

$build_plan = new HarbormasterBuildPlan();
$build_plan->setName('PHP Build Plan');

// Step 1: Checkout the code from the repository
$step1 = new HarbormasterBuildStep();
$step1->setName('Checkout');
$step1->setImplementation('HarbormasterBuildStepImplementationSource');
$step1->setSetting('source.ref', 'refs/heads/master');
$build_plan->addStep($step1);

// Step 2: Run unit tests with Arcanist
$step2 = new HarbormasterBuildStep();
$step2->setName('Unit Tests');
$step2->setImplementation('HarbormasterBuildStepImplementationShellCommand');
$step2->setSetting('command', 'arc unit --everything');
$build_plan->addStep($step2);

// Step 3: Run lint checks with Arcanist
$step3 = new HarbormasterBuildStep();
$step3->setName('Lint Checks');
$step3->setImplementation('HarbormasterBuildStepImplementationShellCommand');
$step3->setSetting('command', 'arc lint --everything');
$build_plan->addStep($step3);

// Save the build plan
$id = $build_plan->save();

echo "Build plan created with ID {$id}.\n";

  • Feedback: El quinto paso es obtener y proporcionar retroalimentación continua sobre el software, tanto interna como externamente. Se trata de recoger y analizar datos sobre el rendimiento, disponibilidad, usabilidad y satisfacción del software, así como incorporar sugerencias y quejas de los usuarios. Esto le permite mejorar el producto según las necesidades y preferencias de los usuarios, así como solucionar problemas rápidamente.

Un ejemplo de retroalimentación con DevOps es el caso de Airbnb, empresa que ofrece servicios de alojamiento y turismo. Airbnb utiliza DevOps para ofrecer nuevas funciones y soluciones a sus millones de usuarios en todo el mundo. Para lograrlo, Airbnb cuenta con un equipo integrado de desarrolladores y operadores que trabajan juntos para planificar, probar, implementar y monitorear el software.

Airbnb también utiliza herramientas como Datadog, Sentry y New Relic para recopilar y analizar datos sobre el rendimiento, la disponibilidad, la usabilidad y la satisfacción del software. Con esto, Airbnb puede obtener comentarios de los usuarios en tiempo real y mejorar continuamente el producto.

Un código de ejemplo sobre cómo utilizar Datadog para recopilar y visualizar datos sobre el rendimiento del software es:

# This is an example of a Python script that uses the Datadog API to collect and visualize metrics about the response time of a web application.

# Import the Datadog library
from datadog import initialize, api

# Initialize the Datadog API with your API key and app key
options = {
    'api_key': 'YOUR_API_KEY',
    'app_key': 'YOUR_APP_KEY'
}

initialize(**options)

# Define a query to get the average response time of the web application in the last hour
query = "avg:webapp.response_time{*}"

# Get the result of the query as a JSON object
result = api.Metric.query(start=int(time.time()) - 3600, end=int(time.time()), query=query)

# Print the result
print(result)

# Create a time series graph to visualize the result
graph = {
    "title": "Web Application Response Time",
    "definition": {
        "requests": [
            {"q": query}
        ],
        "viz": "timeseries"
    }
}

# Save the graph to your Datadog dashboard
api.Graph.create(**graph)

  • Mejora continua: El sexto paso es buscar constantemente mejorar el software y los procesos involucrados en su creación y mantenimiento. Esto implica adoptar una mentalidad de aprendizaje y experimentación, donde los problemas se vean como oportunidades de mejora y los errores se corrijan rápidamente. Esto permite mejorar el producto de forma incremental y adaptativa, además de aumentar la eficiencia y productividad de los equipos.

Un ejemplo de mejora continua con DevOps es el caso de Google, empresa que ofrece búsquedas, publicidad, computación en la nube y otros servicios. Google utiliza DevOps para ofrecer nuevas funciones y correcciones a sus miles de millones de usuarios en todo el mundo. Para lograrlo, Google cuenta con un equipo integrado de desarrolladores y operadores que trabajan juntos para planificar, probar, implementar y monitorear el software.

Google también utiliza herramientas como Bazel, Kubernetes y TensorFlow para automatizar los procesos de integración continua (CI), entrega continua (CD) y aprendizaje automático (ML) del software. Con esto, Google es capaz de realizar miles de experimentos al día, de media, además de mejorar continuamente el producto.

El código de ejemplo sobre cómo usar TensorFlow para entrenar y ejecutar modelos de aprendizaje automático (ML) que mejoran su producto en función de los datos del usuario es:

# This is an example of a Python script that uses the TensorFlow library to train and run a neural network model for image classification.

# Import the TensorFlow library
import tensorflow as tf

# Load the MNIST dataset of handwritten digits
mnist = tf.keras.datasets.mnist
(x_train, y_train), (x_test, y_test) = mnist.load_data()

# Normalize the pixel values from 0-255 to 0-1
x_train, x_test = x_train / 255.0, x_test / 255.0

# Define the neural network model with two hidden layers and one output layer
model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(128, activation='relu'),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10)
])

# Define the loss function and the optimizer
loss_fn = tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True)
optimizer = tf.keras.optimizers.Adam()

# Compile the model with the loss function and the optimizer
model.compile(loss=loss_fn, optimizer=optimizer, metrics=['accuracy'])

# Train the model with the training data for 5 epochs
model.fit(x_train, y_train, epochs=5)

# Evaluate the model with the test data
model.evaluate(x_test, y_test)

# Save the model to a file
model.save('my_model.h5')

# Load the model from the file
model = tf.keras.models.load_model('my_model.h5')

# Make predictions with the model on new images
predictions = model.predict(new_images)

# Print the predictions
print(predictions)

Conclusión

DevOps es una cultura de desarrollo de software que tiene como objetivo integrar equipos de desarrollo y operaciones, automatizar los procesos de entrega y monitoreo y garantizar la calidad y confiabilidad del producto. DevOps aporta beneficios como mejorar la calidad del software, aumentar la velocidad de entrega, reducir costos y aumentar la satisfacción del cliente.

Para implementar DevOps en la práctica, es necesario definir una visión compartida, establecer una comunicación efectiva, automatizar procesos y seguir los principios de colaboración, automatización, entrega continua, retroalimentación y mejora continua.

Referencias bibliográficas

💡
Las opiniones y comentarios emitidos en este artículo son propiedad única de su autor y no necesariamente representan el punto de vista de Listopro.

Listopro Community da la bienvenida a todas las razas, etnias, nacionalidades, credos, géneros, orientaciones, puntos de vista e ideologías, siempre y cuando promuevan la diversidad, la equidad, la inclusión y el crecimiento profesional de los profesionales en tecnología.