Diferencia entre revisiones de «Integración Continua y Despliegue Continuo 21-22»
(No se muestran 2 ediciones intermedias del mismo usuario) | |||
Línea 4: | Línea 4: | ||
* [https://videos.us.es/media/P7-+Integraci%C3%B3n+y+Despligue+continuo/1_20jojo0w Vídeo con los prerrequisitos] | * [https://videos.us.es/media/P7-+Integraci%C3%B3n+y+Despligue+continuo/1_20jojo0w Vídeo con los prerrequisitos] | ||
* El archivo django.yml ha de situarse en la carpeta .github/worklflows y ha de tener este contenido: | * El archivo django.yml ha de situarse en la carpeta .github/worklflows y ha de tener este contenido: | ||
− | < | + | <syntaxhighlight lang="YAML"> |
name: Python application | name: Python application | ||
Línea 56: | Línea 56: | ||
heroku_app_name: " <<your app name>>" | heroku_app_name: " <<your app name>>" | ||
heroku_email: " <<your email>>" | heroku_email: " <<your email>>" | ||
− | </ | + | </syntaxhighlight> |
= GitHub Actions = | = GitHub Actions = | ||
Línea 69: | Línea 69: | ||
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. | 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. | ||
− | < | + | <syntaxhighlight lang="YAML"> |
name: GitHub Actions Demo | name: GitHub Actions Demo | ||
on: [push] | on: [push] | ||
Línea 89: | Línea 89: | ||
- name: Contains expresion in a step | - name: Contains expresion in a step | ||
run: echo "Is this branch master or develop? ${{ contains('refs/heads/master refs/heads/develop',github.ref)}}" | run: echo "Is this branch master or develop? ${{ contains('refs/heads/master refs/heads/develop',github.ref)}}" | ||
− | </ | + | </syntaxhighlight> |
Añade un archivo con este contenido a tu proyecto en GitHub y comprueba su estado en la pestaña Actions: | Añade un archivo con este contenido a tu proyecto en GitHub y comprueba su estado en la pestaña Actions: | ||
Línea 112: | Línea 112: | ||
# Crear una incidencia según las [[Gestión de incidencias | recomendaciones vistas en clase]] para el error que obtenemos al votar en heroku. | # Crear una incidencia según las [[Gestión de incidencias | recomendaciones vistas en clase]] para el error que obtenemos al votar en heroku. | ||
# 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. | # 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. | ||
+ | --------------- | ||
+ | * Transparencias: [[Archivo:07-IntegraciónContinua.pdf]] |
Revisión actual del 07:47 15 dic 2021
Página_Principal -> 2021/2022 -> Prácticas - 21/22
Contenido
Prerrequisitos
- Vídeo con los prerrequisitos
- El archivo django.yml ha de situarse en la carpeta .github/worklflows y ha de tener este contenido:
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:
- workflow el cuál se dispara al recibir un evento de GitHub.
- Estos eventos puede ser desde un push hasta la creación de una issue. Cada workflow permite correr jobs.
- Los 'jobs son secuencias de pasos. Cada uno de estos jobs se ejecutan dentro de un entorno llamado runner.
- 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.
- 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
- Ejercicio 1: CI/CD de decide
- Ejercicio 2: Matriz con diferentes versiones de python
- Ejercicio 3: Badges de workflows
Ejercicios de deploy
- Ejercicio 4: Automatizar creación de superuser
- Ejercicio 5: Condiciones de despligue
- Ejercicio 6. Reutilización de workflows y creación de releases
Ejercicio de gestión de incidencias
- Al probar la app desplega en Heroku vemos un comportamiento anómalo.
- Crear una incidencia según las recomendaciones vistas en clase para el error que obtenemos al votar en heroku.
- 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.
- Transparencias: Archivo:07-IntegraciónContinua.pdf