
Artículo · Auditoría de Redes Informáticas
Implementación y pruebas automatizadas con Github Actions CI/CD
Lo primero que vamos a realizar es entender conceptos básicos como CI/CD, GitHub Actions y cuáles son sus ventajas en la actualidad, además de ver de manera práctica y gratuita como realizar su implementación, vamos con lo primero.
¿Qué es CI/CD?
Según Wikipedia, en ingeniería de software, CI/CD o CI/CD generalmente refiere a las prácticas combinadas de integración continua y entrega continua (también conocida como despliegue continuo).
¿Cuál es la diferencia entre CI y CD (y la otra CD)?
Integración continua:
Los pasos a producción rápidos, frecuentes e iterativos son muy comunes para los servicios en la nube. Esto normalmente impulsa la necesidad de prácticas de DevOps. Esto puede ser tanto una oportunidad como un desafío para la seguridad. El desafío es que un período corto de lanzamientos frecuentes puede no incluir el tiempo suficiente para realizar un ciclo completo de pruebas de seguridad.
El proceso se ejecuta de forma periódica, o bien según ciertos disparadores, y suele ser de la siguiente forma:
- Se descarga del control de versiones las últimas fuentes con los cambios implementados a un directorio de trabajo.
- Se realiza la compilación de estas fuentes.
- Se lanza el análisis estático y de cobertura de las fuentes.
- Se instala en el entorno (compartido) de Desarrollo.
- Se lanzan las pruebas automáticas.
- Se generan los informes.
Entrega continua:
Entrega continua es un enfoque de la ingeniería del software en que los equipos de desarrollo producen software en ciclos cortos, asegurando que el software puede ser liberado en cualquier momento, de forma confiable. Apunta a la construcción, prueba, y liberación del software de forma más rápida y más frecuente. Este enfoque ayuda en la reducción del costo, tiempo, y riesgo de la liberación de versiones a través de la liberación de versiones más incrementales a aplicaciones en producción. Un proceso directo y repetible de liberación es importante para una entrega continua.
Despliegue continuo:
El paradigma tanto de la entrega continua como del despliegue continuo es automatizar lo máximo posible todas las acciones necesarias para implantar una nueva versión de la aplicación y todas las tareas necesarias para validar esa nueva versión. Por lo que cada vez que se obtiene una nueva versión de la aplicación desde la integración continua se validan los criterios de liberación para el siguiente entorno y así sucesivamente.
¿Qué es GitHub Actions?
Automatiza, personaliza y ejecuta tus flujos de trabajo de desarrollo de software directamente en tu repositorio con GitHub Actions. Puedes descubrir, crear y compartir acciones para realizar cualquier trabajo que quieras, incluido CI/CD, y combinar acciones en un flujo de trabajo completamente personalizado.
Los componentes de las acciones de GitHub
Workflows: Los flujos de trabajo se componen de uno o más trabajos y pueden ser programados o activados por un evento
Events: Un evento es una actividad específica que desencadena un flujo de trabajo.
Jobs: Un trabajo es un conjunto de pasos que se ejecutan en el mismo corredor
Steps: Un paso es una tarea individual que puede ejecutar comandos en un trabajo.
Actions: Las acciones son comandos independientes que se combinan en pasos para crear un trabajo.
Runners: Servidor que tiene instalada la aplicación de ejecución de acciones de GitHub.
Documentación oficial: https://docs.github.com/en/actions/learn-github-actions/introduction-to-github-actions
Crea un flujo de trabajo de ejemplo
Vamos con un ejemplo, lo primero dentro de nuestra pestaña nos dirigimos Actions, es en esta sección en donde podremos observar el paso a producción y el estado de como va el paso a producción.
necesitamos crear una carpeta en nuestro proyecto .github/workflows y agregamos nuestro archivo de configuración:
.github/workflows/file.yml
Dentro de nuestra configuración podemos agregar los siguientes puntos; controlar cuándo se ejecutará la acción on. Activa el flujo de trabajo en la solicitud de inserción o extracción.
Un paso a producción se compone de uno o más trabajos que pueden ejecutarse secuencialmente o en paralelo. jobs: Este flujo de trabajo contiene un único trabajo llamado "compilación" job_one: El tipo de contenedor en el que se ejecutará el trabajo.
name: CI OVISOC
# Controls when the action will run. Triggers the workflow on push or pull request
# events but only for the main branch
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
jobs:
# This workflow contains a single job called "build"
job_one:
# The type of runner that the job will run on
name: Deploy
runs-on: ubuntu-latest
steps:
- name: Running ssh connection to contability
uses: appleboy/ssh-action@master
with:
host: ${{ secrets.IP }}
username: deploy
key: ${{ secrets.OMG_SECRET }}
port: 22
script: |
[ command... ]
Además podemos agregar pruebas avanzadas de seguridad, como por ejemplo integrar zap proxy en nuestros pasos a producción:
on: [push]
jobs:
zap_scan:
runs-on: ubuntu-latest
name: Scan the webapplication
steps:
- name: Checkout
uses: actions/checkout@v2
with:
ref: master
- name: ZAP Scan
uses: zaproxy/action-baseline@v0.4.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
docker_name: 'owasp/zap2docker-stable'
target: 'https://www.zaproxy.org'
rules_file_name: '.zap/rules.tsv'
cmd_options: '-a'
Ejemplo: https://github.com/zaproxy/action-baseline
Cabe destacar que podemos configurar nuestras variables de entorno dentro de GitHub, para ello debemos añadir nuestras variables, en mi caso agregaré la key ssh mediante la variable OMG_SECRET y la IP del servidor al cual me quiero conectar, dentro de la configuración la podemos llamar de la siguiente manera ${{ secrets.OMG_SECRET }}
Ejemplo de formulario para la creación de variables:
Bueno, hasta aquí ya tenemos configurado nuestro entorno para realizar los pasos a producción de manera automática, cada vez que realicemos o un commits a nuestra rama master o algún pull request a dicha rama, esto nos ayudara ahorrar una gran cantidad de tiempo.
GitHub nos dispondrá de una interfaz con el resumen de cada paso a producción:
Si entramos a cada uno, podremos visualizar el detalle de cada uno de ellos.
Bueno eso ha sido todo amigos, espero que les ayude en sus pasos a producción, les comparto un proyecto con algunos ejemplos.
https://github.com/fbarriosCL/github-actions
#HappyHacking
¿Quieres aprender estas técnicas en profundidad?
Continúa tu ruta con Wireshark para Pentester.

Escrito por
Felipe BarriosCEO at Backtrack Academy
I'm Felipe Barrios CEO of Backtrack Academy ethical hacking community. entrepreneur and developer ruby on rails, Ror became my preferred language, the basis of all my projects, I consider myself a proactive person and passionate about what he does. Currently working as a software developer in scuit, computer security lover I like to work on projects related to digital enterprise.



