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](https://docs.github.com/en/billing/managing-billing-for-github-actions/about-billing-for-github-actions). 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í](https://docs.github.com/en/actions/hosting-your-own-runners/managing-self-hosted-runners/about-self-hosted-runners). **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 [Link aquí](https://github.com/ahioros/workflow-react-example) b. El repositorio con el código de los manifests para kubernetes. [Link aquí](https://github.com/ahioros/deploy-workflow-react-example) ## 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: ```bash https://github.com/ahioros/deploy-workflow-react-example ``` Para crear un workflow se deben crear unas carpetas en nuestro proyecto de Github. ```bash .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**
No hay comentarios.:
Publicar un comentario