Vamos a pasar el pipeline que hicimos en Azure Devops a Github Actions.
¿Qué es Github Actions?
Es una plataforma de integración continua (CI) y Continuous Delivery (CD) para el desarrollo de código.
Este servicio que proporciona GitHub tiene costo, pero cuenta con una versión gratis.
A la escritura de este post el plan gratis te da lo siguiente:
- Storage: 500 MB
- 2,000 Minutos (per month)
Tip, al igual que Azure DevOps (agent pools), en GitHub Actions puedes configurar self-hosted runners para que se ejecuten en tu propio servidor/equipo y esto es libre de los minutos que te dan gratis. Hay ciertos requisitos por ejemplo: si vas a usar docker, debe ser en un equipo con Linux, te dejo toda la información aquí.
Nota Si quieres saber cómo hacer un self-hosted runner, deja tu comentario y te enseñaré a hacerlo.
Mientras que en Azure DevOps se llaman pipelines, en Github Actions se llaman workflows.
Nota: El ejemplo que estoy mostrándo consta de dos repositorios:
a. El repositorio con el código de la aplicación. Este repositorio es en el que realizamos las configuraciones del workflow
b. El repositorio con el código de los manifests para kubernetes.
Configuración de Github Actions Workflows
Prerequisitos
En el ejemplo que vamos a desarrollar tenemos que hacer unas configuraciones:
1. Configurar permisos de GitHub Actions workflow:
Ve a repo settings -> Actions -> General -> Workflow Permissions:
2. Crear PAT (Personal Access Token):
Ve a tu GitHub perfil -> Settings -> Developer settings -> Personal access tokens -> Tokens(classic):
3. Crear secrets para el repositorio:
Ve a tu repo settings -> Secrets and variables -> Actions -> Repository Secrets:
Nota: Donde puedes ver que tengo el usuario y el password con el que me voy a conectar hacia mi docker registry, en este caso es dockerhub.com. El API_TOKEN_GITHUB es el Personal Access Token que creamos en el paso 2.
4. Tener un repositorio donde están los manifest de kubernetes, ejemplo:
https://github.com/ahioros/deploy-workflow-react-example
Para crear un workflow se deben crear unas carpetas en nuestro proyecto de Github.
.github/workflows/workflow-react-example.yml
El contenido de nuestro archivo yaml es el siguiente:
---
name: workflow-react-example
on:
push:
branches:
- master
jobs:
CI:
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4.1.0
- name: Install Node.js
uses: actions/setup-node@v4.0.0
with:
node-version: 15.x
- name: npm install
run: npm install
- name: npm lint
run: npm run lint
- name: npm prettier
run: npm install prettier && npx prettier . --write && npm run prettier
- name: npm test
run: CI=true npm run test
- name: npm build
run: npm run build
Build_Docker_Image_ReactApp:
needs:
- CI
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4.1.0
- name: BuildAndPush
uses: docker/login-action@v3.3.0
with:
username: "${{ secrets.DOCKERHUBCONNECTION_DOCKER_USERNAME }}"
password: "${{ secrets.DOCKERHUBCONNECTION_DOCKER_PASSWORD }}"
- name: Build the Docker image
run: docker build . --file "Dockerfile" -t ahioros/rdicidr:${{ github.run_id }}
- name: Create latest image as well
run: docker tag ahioros/rdicidr:${{ github.run_id }} ahioros/rdicidr:latest
- name: Push Docker image with the version number
run: docker push ahioros/rdicidr:${{ github.run_id }}
- name: Push the latest tag
run: docker push ahioros/rdicidr:latest
- name: Logout
run: docker logout
Deployment:
needs:
- Build_Docker_Image_ReactApp
runs-on: ubuntu-latest
steps:
- name: checkout
uses: actions/checkout@v4.1.0
with:
token: ${{ secrets.GITHUB_TOKEN }}
repository: ahioros/deploy-workflow-react-example
fetch-depth: 0
persist-credentials: false
- name: Deploy
run: |-
TAG=${{ github.run_id }}
EXP="image: ahioros/rdicidr:[0-9]+"
REP="image: ahioros/rdicidr:$TAG"
sed -E -i "s|$EXP|$REP|g" k8s/02-deployment.yaml
git config user.name "Argo CD"
git config user.email "ArgoCD@example.com"
git checkout master --
git add --all
git commit -m "Deployment ID: ${{ github.run_id }}"
shell: bash
- name: Push changes
uses: ad-m/github-push-action@master
with:
repository: ahioros/deploy-workflow-react-example
GITHUB_TOKEN: ${{ secrets.API_TOKEN_GITHUB }}
---
El workflow es el mismo que el pipeline que se hizo en Azure Devops
Azure:
CodeValidation -> Containerized -> Deploy
Github Actions:
CI -> Build_Docker_Image_ReactApp -> Deployment
Aquí te dejo el repositorio de Azure para que lo compares:
https://dev.azure.com/guillermogarcialedezma/DockerHub%20Test/
Cada vez que hagas un cambio en el código y lo subas/empujes (push) al branch de master, el workflow se ejecutará.
Recuerda que esto es solo un ejemplo y no es recomendable subir/empujar directamente a tu rama/branch principal main/master.
En nuestro siguiente post haremos la configuración de Argo CD, para automatizar el despliegue en kubernetes con Github Actions.
NOTA: Mira el Dockerfile ya que ahora lo hice multi-stage para que tenga un menor peso.
Antes la imagen pesaba 1.09GB
Ahora la imagen pesa: 188MB
Top comments (0)