Diferencia entre revisiones de «Integración Continua y Despliegue Continuo 21-22»
(→Prerrequisitos) |
|||
(No se muestran 4 ediciones intermedias del mismo usuario) | |||
Línea 2: | Línea 2: | ||
= Prerrequisitos = | = Prerrequisitos = | ||
− | * [https://videos.us.es/media/ | + | * [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 = | ||
+ | == 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. | ||
+ | |||
+ | <syntaxhighlight lang="YAML"> | ||
+ | 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)}}" | ||
+ | </syntaxhighlight> | ||
+ | |||
+ | 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 [[https://docs.github.com/en/actions/learn-github-actions/expressions link]]. | ||
+ | |||
+ | Para consultar la lista completa de contextos (e.g., github.<>, job.<> o runner.<>), visita este otro [[https://docs.github.com/en/actions/learn-github-actions/contexts link]]. | ||
+ | |||
+ | Para consultar la lista completa de acciones, visita el [[https://github.com/marketplace?type=actions 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 [[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. | ||
+ | --------------- | ||
+ | * 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