# ¡Desata el Poder de la Seguridad con DevSecOps! 🔐

**Jenkins** lidera el camino por ser ***open source*** en el universo **CI/CD**, mientras desplegamos nuestra aplicación y conquistamos los contenedores.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703892072198/c1ed9b04-8505-45e4-a46e-0f3eebe15edf.png align="center")

**<mark>Este blog es el fuego para tu próxima odisea tecnológica.</mark>**

*¡Prepárate para romper barreras y dejar huella!*

Encuentra el poder en nuestro Repositorio en GitHub: \[[game-cicd-2048](https://github.com/roxsross/game-cicd-2048)\] 💥🚀

### Sobre el Juego

Su renombre resuena en todos los [rincones](https://play2048.co/), y lo fascinante es que incluso la documentación de [AWS](https://docs.aws.amazon.com/eks/latest/userguide/alb-ingress.html), lo destaca en diversos casos de uso ([https://docs.aws.amazon.com/](https://docs.aws.amazon.com/)). <mark>¡La magia no termina ahí!</mark>

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703892173834/891d6fdb-a549-4968-87b8-5b1890c015b2.png align="center")

Utiliza esta imagen desde el <mark>Repositorio público de AWS </mark> `public.ecr.aws/l6m2t8p7/docker-2048:latest`

### En nuestra búsqueda del código, surge la pregunta crucial: <mark>¿es vulnerable o no?</mark>

La seguridad es la piedra angular de nuestra misión, y es por eso que incorporamos DevSecOps en todo el ciclo de vida del software. <mark>Más que solo código, estamos forjando seguridad en cada línea de código.</mark>

![Is my code vulnerable? - Skillfield](https://skillfield.com.au/wp-content/uploads/2022/09/code-vulnerable-blog.png align="left")

### Sobre Jenkins

Jenkins es una plataforma de automatización de código abierto que facilita la implementación continua (CI) y la entrega continua (CD) en el desarrollo de software.

Ofrece una interfaz fácil de usar para la creación, prueba y despliegue automatizado de aplicaciones. Jenkins integra diversas herramientas y plugins, permitiendo la automatización de tareas repetitivas, la gestión de flujos de trabajo y la generación de informes detallados.

Su flexibilidad y extensibilidad hacen de Jenkins una herramienta central en entornos de desarrollo ágiles y colaborativos, impulsando la eficiencia y calidad en el ciclo de vida del software.

Oficial \[[https://www.jenkins.io/](https://www.jenkins.io/)\]

Documentación \[[https://www.jenkins.io/doc/](https://www.jenkins.io/doc/)\]

### Adopción de DevSecOps

La integración de la seguridad en DevSecOps es esencial para lograr un desarrollo rápido, seguro y eficiente. Esta metodología se adapta al entorno actual, donde la seguridad ya no puede ser considerada como una fase separada, sino que debe ser un componente integral de todo el proceso de desarrollo de software.

![What is DevSecOps and What Are Its Business Benefits?](https://www.orientsoftware.com/Themes/OrientSoftwareTheme/Content/Images/blog/2021-11-03/what-is-devsecops-and-its-business-benefits.jpg align="center")

> DevSecOps no es simplemente una práctica, es una mentalidad transformadora que coloca a la seguridad en el corazón mismo del desarrollo, asegurando que cada línea de código sea una barrera infranqueable contra las amenazas digitales. by Roxs

### Algunos pasos clave para lograr esta integración

1. **Análisis estático del código (SAST)**
    
2. **Pruebas de seguridad dinámica (DAST)**
    
3. **Análisis de composición de software (SCA)**
    
4. **Escaneo de contenedores**
    
5. **Automatización de políticas de seguridad**
    
6. **Gestión de secretos y credenciales**
    
7. **Monitorización y registro de seguridad**
    
8. **Capacitación y concienciación**
    

> Al integrar estas prácticas en tus pipelines de Jenkins, puedes fortalecer la seguridad en todas las etapas del desarrollo de software y garantizar la entrega continua de aplicaciones más seguras.

#### **Entonces qué hacemos??**

## 🔥🔥 Roxs al rescate 🔥🔥🔥

¡Vamos a sumergirnos en el recorrido práctico, exploraremos cómo instalar Jenkins y potenciar nuestro proceso de CI/CD con herramientas de seguridad, todo en el marco de DevSecOps. Garantizando despliegues seguros y eficientes en cada paso del camino.

### 🛠️ Los Pasos.

Estaremos usando contenedores🐳🐳 🔥

* Paso 1 — 🚀 Instalar Jenkins
    
* Paso 2 — 🛠️ Repositorio del juego 2048
    
* Paso 3 — 🔐 Asegurar los Secretos en la Bóveda de Jenkins
    
* Paso 4 — 🔒 Herramientas de Seguridad.
    
* Paso 5 — 🛠️ Crear un Proyecto de "Pipeline" en Jenkins
    
* Paso 6 — 🧩 Integrando las Herramientas de Seguridad.
    
* Paso 7 — 🐳 Construir y Publicar la Imagen de Docker \[DockerHub\].
    
* Paso 8 — 🚀 Integración End to End.
    
* Paso 9 — 🛑 CleanUP.
    

### PASO-1: ¡Despliega Jenkins con Estilo! 🚀

Descubre cómo simplificar la instalación de Jenkins utilizando Docker Compose.

%[https://gist.github.com/roxsross/c3265c42b2c5ebed7c04e16fea0b5398] 

***Simples comandos...*** `docker-compose up -d` información [extra](https://docs.docker.com/compose/)

<mark>Si quieres tener personalizado la imagen de Jenkins e instalar el cliente de docker puedes usar este </mark> **<mark>Dockerfile</mark>**

%[https://gist.github.com/roxsross/3ad202574cf240e1e1a0ef4f39aedc60] 

**Te dejo esta imagen si no quieres construir una propia** `roxsross12/jenkins:v2`

### ¿Pero...? hay que desbloquear

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703795623902/93954899-9cea-4e00-86cf-18da632050ff.png align="center")

`docker logs jenkins`

```bash
ubuntu $ docker logs jenkins
Jenkins initial setup is required. An admin user has been created and a 
password generated.
Please use the following password to proceed to installation:
caacbbce1f66475dacafea4f03b4f2ce
```

<mark>Alternativa</mark> usando `docker exec` entramos en el contenedor

```bash
docker exec -it jenkins /bin/bash -c 'cat /var/jenkins_home/secrets/initialAdminPassword'
```

> si quieres saber más sobre la instalación y que cosas podemos customizar, recuerda que tienes la documentación oficial [https://www.jenkins.io/doc/book/installing/docker/](https://www.jenkins.io/doc/book/installing/docker/)

<mark>Para acceder desde el Navegador</mark>: [http://localhost:8080/](http://localhost:8080/) ó [http://IP:8080/](http://localhost:8080/)

Algo que identifica a **Jenkins** es el uso de <mark>complementos/plugins</mark>

Para comenzar te recomiendo estos, el [**<mark>blue-ocean</mark>**](https://www.jenkins.io/doc/book/blueocean/) tiene una linda experiencia visual.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703796017830/a3355073-cb58-4d81-bed3-ad319134f141.png align="center")

### PASO-2: ¡Prepara el Repositorio! 🚀

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703874340222/34279339-5d9c-460d-b456-8883dafa892a.png align="center")

Clonar el repositorio \[GITHUB\]([https://github.com/roxsross/game-cicd-2048](https://github.com/roxsross/game-cicd-2048))

> 🔔 Recuerda darle una estrella al repo, también podrías folkearlo

### PASO-3: ¡Protege los secretos en Jenkins! 🚀

Proteger datos sensibles en la bóveda de Jenkins es crucial para garantizar la seguridad de tus proyectos y la información confidencial.

La Bóveda de Jenkins, o "Jenkins Credential Store", es un sistema integrado que permite almacenar de forma segura credenciales, claves y otros datos sensibles que son necesarios para la ejecución de trabajos en Jenkins.

**¿Que datos proteger?**

* Claves de Accesos a DockerHub
    
* Claves de Accesos a Github \[Repositorios Privados\]
    
* Cualquier otro datos que consideren sensibles, llaves, token etc.
    

**¿Como Configurarlo?**

* Ve a "Manage Jenkins" -&gt; "Manage Credentials" en el menú principal.
    
* Haz clic en "(global)" si deseas que la credencial sea global o selecciona un elemento específico donde aplicará esta credencial.
    
* En el menú de la izquierda, selecciona "Credentials" y haz clic en "Global credentials (unrestricted)".
    
* Haz clic en "Add Credentials" en el menú izquierdo.
    

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703874587675/4db981ad-6649-4967-be95-3a10ee39fd6e.png align="center")

1. **Selecciona el Tipo de Credencial:**
    
    * Elige el tipo de credencial adecuado para tu caso (por ejemplo, Usuario y Contraseña, Clave Secreta, Token, etc.).
        
2. **Proporciona los Detalles de la Credencial:**
    
    * Completa los campos requeridos según el tipo de credencial seleccionado.
        
3. **Guardar la Credencial:**
    
    * Haz clic en "OK" o "Save" para guardar la nueva credencial.
        

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703874600117/ad232824-82e3-415c-bc67-e22cc00283ff.png align="center")

**¿Como Usarlo?**

```java
pipeline {
    agent any

    environment {
        MI_CREDENCIAL = credentials('ID_DE_TU_CREDENCIAL')
    }

    stages {
        stage('Ejemplo de Build') {
            steps {
                    echo "Credencial como variable: ${MI_CREDENCIAL}"
                }
            }
        }
    }
}
```

### PASO-4: ¡🔒 Sobre Herramientas de Seguridad.! 🚀

La combinación de **SAST, SCA y DAST** en un enfoque de DevSecOps y CI/CD contribuye a un desarrollo más seguro y una entrega continua libre de vulnerabilidades críticas.

**Análisis Estático de Seguridad (SAST):**

Identificar vulnerabilidades en el código fuente antes de la ejecución.

**Análisis de Composición de Software (SCA):**

Identificar y gestionar las dependencias y componentes de terceros para evitar vulnerabilidades conocidas.

**Seguridad Dinámica (DAST):**

Evaluar la seguridad de las aplicaciones en tiempo de ejecución mediante pruebas activas.

🚨\*\*<mark>DAST lo vamos a ver en una próxima entrada del blog </mark> \*\* <mark>*</mark>

### Herramientas... un montón...

Es importante conocer que integrar, por ello te recomiendo este [listado](https://owasp.org/www-community/Source_Code_Analysis_Tools)

Todas estas herramientas la usaremos **desde MODO contenedor**

**<mark>SECRETS: </mark>** [Gitleaks](https://github.com/gitleaks/gitleaks)

**<mark>SAST</mark>**<mark>:</mark>[Semgrep](https://semgrep.dev/) , [Horusec](https://github.com/ZupIT/horusec)

**<mark>SCA:</mark>** [Snyk](https://snyk.io/), [NPM Audit](https://docs.npmjs.com/cli/v10/commands/npm-audit)

**<mark>Container Security Tools:</mark>** [Trivy](https://trivy.dev/)

Es importante usar herramientas que nos generen reportes, ya que sin ellas, no podemos evaluar las vulnerabilidades

### PASO-5: ¡Crear un Proyecto "Pipeline" en Jenkins! 🚀

Documentación de referencia: [https://www.jenkins.io/doc/book/pipeline/jenkinsfile/](https://www.jenkins.io/doc/book/pipeline/jenkinsfile/)

**Breves Pasos:**

Un **Jenkinsfile** es un archivo de texto que define el flujo de trabajo de tu pipeline en Jenkins.

1. **Accede al Repositorio:**
    
    * Clona o accede al repositorio para el cual deseas crear el Jenkinsfile.
        
2. **Crea un Nuevo Archivo:**
    
    * Crea un nuevo archivo en la raíz del repositorio y nómbralo `Jenkinsfile`. Puedes hacerlo a través de la interfaz web del servicio de control de versiones (por ejemplo, GitHub, GitLab, Bitbucket).
        
3. **Edita el Jenkinsfile:**
    
    * Abre el archivo `Jenkinsfile` con un editor de texto o un IDE y comienza a definir tu pipeline. Puedes utilizar la sintaxis Declarative o Scripted de Jenkins Pipeline, según tus preferencias y necesidades. Aquí hay un ejemplo simple en sintaxis Declarative:
        
4. **Guarda y Comitea el Archivo:**
    
    * Guarda los cambios y realiza un commit en tu repositorio con el nuevo archivo Jenkinsfile.
        
5. **Configura Jenkins:**
    
    * Asegúrate de que tienes un servidor Jenkins configurado y accesible.
        
    * Crea un nuevo proyecto o actualiza un proyecto existente en Jenkins para que apunte al repositorio que contiene el Jenkinsfile. En la configuración del proyecto, selecciona la opción de "Pipeline script from SCM" y elige el sistema de control de versiones que estás utilizando (Git, por ejemplo).
        
6. **Especifica la Ruta al Jenkinsfile:**
    
    * Indica la ruta al **Jenkinsfile** en la configuración del proyecto.
        
7. **Guarda la configuración del proyecto en Jenkins y ejecútalo.**
    
    * Jenkins leerá automáticamente el Jenkinsfile desde el repositorio y ejecutará el pipeline según la definición proporcionada en el archivo.
        

%[https://gist.github.com/roxsross/de2515249561218a92047f1ab0978514] 

### PASO-6: ¡🔒 Integrando las Tools de Seguridad en el Jenkinsfile.! 🚀

%[https://gist.github.com/roxsross/1f6b5f16bd66a0f0172f3f83a639a597] 

<mark>Le damos </mark> **<mark>Run al Pipeline</mark>**<mark>, en mi caso al Pipeline [</mark>**<mark>game-cicd-2048</mark>**<mark>]</mark>

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703892862008/c93e15e4-475d-4488-a675-9ed94c57a53a.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703892837659/845069f5-b68f-4cd1-803e-27f19bd5d75e.png align="center")

### PASO-7: ¡Construir y Publicar la Imagen de Docker \[DockerHub\]! 🚀

Nos enfocamos en principio en las herramientas de seguridad, pero también debemos manejar lo que es la construcción de la imagen, publicación y escaneo.

%[https://gist.github.com/roxsross/a1b060ce421201460c48d480e567b270] 

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703878501936/7b3cbec7-6cbd-4d76-a968-c4d3342ff63e.png align="center")

### PASO-8: ¡Ahora si vamos con el End to End! 🚀

%[https://gist.github.com/roxsross/bb5e39832f301ea602ded68bbfefd94f] 

**<mark>Saltaron las Vulnerabilidades</mark>**, pero te dejo avanzar, gracias a esto... ⚠️ `catchError(buildResult: 'SUCCESS', stageResult: 'FAILURE')`

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703879536718/fd17635f-9f24-415c-ade9-7ab43202a00b.png align="center")

### Vamos a inyectarle 🐛🐛 algo para que explote por todos lados.

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703879688268/4e7263c7-e317-45f5-8761-dc1e43745e72.png align="center")

### Vamos a correr de vuelta el pipeline

Están apareciendo cosillas 🤔 xD

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703880587978/cbb4a575-810b-4c77-8332-9e1468d42a57.png align="center")

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703884041914/02ff4e7d-e008-4de2-9ebb-453a3dbed7b2.png align="center")

### ¿Qué deberíamos hacer con los reportes? <mark>¿Los guardamos y...?</mark>

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1703884023596/8ba6bba9-3ae4-43f0-b3e1-35dabe945568.png align="center")

> Mantente atento para descubrirlo en nuestra próxima entrada del blog. ¡Prepárate que se viene mas devsecops! **🚀**

### Video Tutorial

%[https://youtu.be/ezyDXLhlXoo] 

Gracias por sumergirte en este **viaje de conocimiento**.

**Si este blog encendió una chispa de inspiración**, ¡ilumina tu día con un aplauso 👏 y sígueme en **LinkedIn y GitHub** para más destellos de aprendizaje y colaboración emocionante!

Conéctate en LinkedIn:[https://www.linkedin.com/in/roxsross/](https://www.linkedin.com/in/roxsross/)

Descubre más en GitHub: [https://github.com/roxsross](https://github.com/roxsross)

Mi Web: https://roxs.295devops.com

**¡Hasta la próxima ola del conocimiento!**
