Integración Continua y Despliegue Continuo 21-22

De Wiki de EGC
Saltar a: navegación, buscar

Página_Principal -> 2021/2022 -> Prácticas - 21/22

Prerrequisitos

name: Python application

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    services:
      postgres:
        image: postgres:10.8
        env:
          POSTGRES_USER: decide
          POSTGRES_PASSWORD: decide
          POSTGRES_DB: decide
        ports:
          - 5432:5432
        # needed because the postgres container does not provide a healthcheck
        options: --health-cmd pg_isready --health-interval 10s --health-timeout 5s --health-retries 5

    steps:
    - uses: actions/checkout@v1
    - name: Set up Python 3.8
      uses: actions/setup-python@v1
      with:
        python-version: 3.8
    - name: psycopg2 prerequisites
      run: sudo apt-get install libpq-dev
    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        pip install codacy-coverage
    - name: Run migrations
      run: cd decide;python manage.py migrate
    - name: Run tests     
      run: cd decide;coverage run --branch --source=. ./manage.py test census --keepdb; coverage xml;
    - name: Codacy Coverage Reporter
      uses: codacy/codacy-coverage-reporter-action@v1.1.0
      with:
          project-token: ${{ secrets.CODACY_PROJECT_TOKEN }}
          coverage-reports: decide/coverage.xml
  deploy:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - uses: akhileshns/heroku-deploy@v3.12.12 # This is the action
      with:
          heroku_api_key: ${{secrets.HEROKU_API_KEY}}
          heroku_app_name: " <<your app name>>"
          heroku_email: " <<your email>>"

GitHub Actions

Nociones básicas sobre GitHub Actions

Dentro de cada .yml de la carpeta .github/worflows se define un:

  1. workflow el cuál se dispara al recibir un evento de GitHub.
  2. Estos eventos puede ser desde un push hasta la creación de una issue. Cada workflow permite correr jobs.
  3. Los 'jobs son secuencias de pasos. Cada uno de estos jobs se ejecutan dentro de un entorno llamado runner.
  4. Los runners son máquinas virtuales que se levantan para cada job. Todos los pasos de un job se ejecutan dentro del mismo runner, por lo que comparten recursos como los archivos y las carpetas.
  5. Los pasos de un job pueden ser simples instrucciones de shell, o utilizar funciones más concretas llamadas actions como, por ejemplo, hacer un clone.

El siguiente workflow tiene como nombre 'GitHub Actions Demo' y se dispara al hacer un push. Únicamente define un job llamado 'Explore-GitHub-Actions' dentro de un runner de tipo ubuntu-latest. Casi todos los pasos son de tipo shell salvo uno que utiliza la acción actions/checkout@v1.

name: GitHub Actions Demo
on: [push]
jobs:
  Explore-GitHub-Actions:
    runs-on: ubuntu-latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ github.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by GitHub!"
      - run: echo "🔎 The name of your branch is ${{ github.ref }} and your repository is ${{ github.repository }}."
      - name: Check out repository code
        uses: actions/checkout@v1
      - run: echo "💡 The ${{ github.repository }} repository has been cloned to the runner."
      - run: echo "🖥️  The workflow is now ready to test your code on the runner."
      - name: List files in the repository
        run: |
          ls ${{ github.workspace }}
      - run: echo "🍏 This job's status is ${{ job.status }}."
      - name: Contains expresion in a step
        run: echo "Is this branch master or develop? ${{ contains('refs/heads/master refs/heads/develop',github.ref)}}"

Añade un archivo con este contenido a tu proyecto en GitHub y comprueba su estado en la pestaña Actions:

  • ¿Cuántos Worflows, jobs, steps se lanzan?
  • ¿Entiendes todo lo que hacen las expresiones ${{ <expresion> }}?

Para consultar la lista completa de expressiones, visita este [link].

Para consultar la lista completa de contextos (e.g., github.<>, job.<> o runner.<>), visita este otro [link].

Para consultar la lista completa de acciones, visita el [link].

Ejercicios de build

Ejercicios de deploy

Ejercicio de gestión de incidencias

  1. Al probar la app desplega en Heroku vemos un comportamiento anómalo.
  2. Crear una incidencia según las recomendaciones vistas en clase para el error que obtenemos al votar en heroku.
  3. Asegurarse que la incidencia creada incluye, al menos, un título descriptivo, información de qué es lo que ocurre y cómo puede reproducirse el error.