Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions cursos/git/01_git/03_practica_guiada.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ A continuación imos a instalar Git nos diferentes tipos de SO. Temos varios mod
Para instalar Git en Windows temos dous opcións principalmente:
1. **mysisGit**: debemos ir ó seguinte enlace [Git para Windows](https://git-scm.com/download/win), escoller a noso instalador ou tipo de instalador e proceder ca descarga.

2. **Github para Windows** é outra forma de instalar Git no noso equipo Windows. Este instalador a maiores do CLI inclúe unha interfaz de usuario moi completa e intuitiva, que pode facilitar moito o traballo.
2. **GitHub para Windows** é outra forma de instalar Git no noso equipo Windows. Este instalador a maiores do CLI inclúe unha interfaz de usuario moi completa e intuitiva, que pode facilitar moito o traballo.

> Para comezar e mellor empezar co CLI de Git para familiarizarnos cos comandos.

Expand Down Expand Up @@ -67,7 +67,7 @@ Vamos a ver as formas máis comúns:
$ sudo port install git
```

4. Instalador de Git en OS X no sitio web de [Github Desktop](https://desktop.github.com/).
4. Instalador de Git en OS X no sitio web de [GitHub Desktop](https://desktop.github.com/).

### 1.4 Instalaión en VSCode

Expand Down
4 changes: 2 additions & 2 deletions cursos/git/02_hands_on/03_remote_repo.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@ Algunhas das forxas de código aberto máis coñecidas son:

- **[Gitea](https://gitea.io/en-us/)**: oferta servizos de aloxamento de repositorios Git, xestión de proxectos e control de versións. Tamén é compatible con outros sistemas de control de versións, coma Mercurial ou Subversion.

Nós ímonos centrar en Github, xa que é a máis utilizada e a que vamos a usar durante o curso. Faremos un recorrido pola documentación que si ou si tes que ler para o bo uso da plataforma.
Nós ímonos centrar en GitHub, xa que é a máis utilizada e a que vamos a usar durante o curso. Faremos un recorrido pola documentación que si ou si tes que ler para o bo uso da plataforma.

## Github
## GitHub

<div style="text-align: center;">
<div style="margin: 0 auto;max-width:280px;">
Expand Down
4 changes: 2 additions & 2 deletions cursos/git/03_prefapp_methodology/02_merge_strategy.md
Original file line number Diff line number Diff line change
Expand Up @@ -78,7 +78,7 @@ Para realizar un squash en Prefapp, seguimos estes pasos básicos:

2. **Fusionar a rama**: cando estea todo listo e os cambios confirmados na rama, fusiónase a rama de característica á rama principal usando `git merge --squash`, o que crea un único commit con tódolos cambios.

En github, pódese realizar un squash merge directamente dende a interface gráfica dunha Pull request ó fusionar unha rama de característica na rama principal.
En GitHub, pódese realizar un squash merge directamente dende a interface gráfica dunha Pull request ó fusionar unha rama de característica na rama principal.

<div style="text-align: center;">
<div style="margin: 0 auto;">
Expand All @@ -88,4 +88,4 @@ En github, pódese realizar un squash merge directamente dende a interface gráf
</div>
</div>

Documentación de Github sobre as fusións nas PRs: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges
Documentación de GitHub sobre as fusións nas PRs: https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/incorporating-changes-from-a-pull-request/about-pull-request-merges
288 changes: 288 additions & 0 deletions cursos/git/04_workflow/01_what_is_workflow.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,288 @@

# Que é un workflow?

Un workflow é unha secuencia automatizada de tarefas ou procesos que se executan de xeito sistemático para completar unha operación específica. Os workflows son esenciais en DevOps e CI/CD (Integración Continua/Entrega Continua), xa que permiten a automatización de procesos repetitivos e aseguran a consistencia e eficiencia no desenvolvemento e despregamento de software.
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Rephrase definition Github Action in spanish:

GitHub Actions es un servicio de integración continua y entrega continua (CI/CD) que automatiza tareas en repositorios de GitHub mediante la ejecución de **workflows**, definidos en archivos YAML en el directorio `.github/workflows`. 

Un **workflow** es un **DAG (Directed Acyclic Graph)**, donde los pasos se ejecutan en un orden específico, garantizando que las tareas se completen sin ciclos de dependencia. Para más detalles sobre DAGs, consulta [este artículo](https://www.linkedin.com/pulse/directed-acyclic-graphs-its-application-workflow-management-wrba?utm_source=share&utm_medium=member_ios&utm_campaign=share_via).

GitHub Actions es gratuito para repositorios públicos y tiene un límite de 2000 minutos de ejecución al mes para repositorios privados. Los workflows pueden ejecutarse en respuesta a eventos en GitHub (como pull requests o commits), de forma manual o programada.

Ofrece acciones predefinidas y la opción de crear acciones personalizadas. Además, puedes configurar **runners** en servidores propios o en la nube, además de los runners alojados por GitHub.


O concepto de workflow non é novo e evolucionou de xeito significativo ó longo do tempo. Na súa orixe, os workflows utilizábanse en contextos empresariais e administrativos para describir o fluxo de traballo entre distintos departamentos ou etapas dun proceso de negocio. Coa revolución dixital e a evolución do software, os workflows comezaron a ser utilizados no ámbito da tecnoloxía da información para describir a secuencia de tarefas en sistemas informáticos.

Na década de 1990, coa auxe da metodoloxía de desenvolvemento áxil e a necesidade de entregar software de xeito máis rápido e eficiente, os workflows comezaron a ser adoptados no desenvolvemento de software. Esta adopción incrementouse coa chegada de DevOps e CI/CD, onde a automatización de procesos é crucial para a entrega continua de software de alta calidade.


## Conceptos xerais

Para comprender mellor os workflows no contexto de DevOps e CI/CD é importante coñecer os seus elementos, parámetros e características principais.


### Elementos dun Workflow

1. **Tarefas (Tasks)**: unidades básicas de traballo nun workflow. Cada tarefa representa unha acción específica que debe ser completada. Por exemplo: compilar código, executar probas ou despregar unha aplicación.

2. **Accións (Actions)**: operacións específicas realizadas dentro dunha tarefa. Por exemplo, nunha tarefa de compilación, unha acción podería ser executar un comando de compilación.

3. **Eventos (Events)**: desencadeantes que inician un workflow. Os eventos poden ser internos (por exemplo, un commit do código) ou externos (por exemplo, unha solicitude de pull noutro repositorio).

4. **Condicións (Conditions)**: regras que determinan se unha tarefa ou acción debe ser executada. Poden basearse no estado de tarefas anteriores ou en parámetros específicos.

5. **Parámetros (Parameters)**: valores que se pasan a tarefas ou accións para personalizar o seu comportamento. Por exemplo, o nome dunha rama de código ou unha configuración específica.

6. **Artefactos (Artifacts)**: resultados xerados por unha tarefa que poden ser utilizados en tarefas posteriores. Por exemplo, arquivos binarios xerados por unha tarefa de compilación.


### Características dun Workflow

1. **Automatización**: os workflows automatizan tarefas repetitivas, reducindo o esforzo manual e minimizando erros.

2. **Secuencialidade**: os workflows seguen unha secuencia definida de tarefas, asegurando que os procesos se executen na orde correcta.

3. **Paralelismo**: nalgúns casos, os workflows permiten a execución de tarefas en paralelo para mellorar a eficiencia e reducir o tempo total de execución.

4. **Modularidade**: os workflows poden ser deseñados de xeito modular, permitindo reutilizar tarefas ou seccións dun workflow en distintos contextos.

5. **Vixilancia**: os workflows adoitan incluír mecanismos de vixilancia e rexistro (logging) para rastrear o progreso e detectar problemas.

6. **Escalabilidade**: os workflows deben ser capaces de escalar para manexar un maior volume de tarefas a medida que crecen as necesidades do proxecto.

7. **Integración**: os workflows intégranse con outras ferramentas e servizos no ecosistema DevOps, coma sistemas de control de versións, servidores de integración continua e plataformas de despregamento.


### Elementos clave en Workflows de CI/CD

1. **Branches**: as ramas de código nas que se executan os workflows, permitindo a integración e proba de características novas sen afectar ó código principal.

2. **Triggers**: os eventos que inician o workflow, coma commits, pull requests, ou despregamentos programados.

3. **Environment Variables**: variables de entorno que proporcionan configuracións específicas ós workflows, coma credenciais de acceso ou rutas de arquivos.

4. **Stages**: fases do workflow que agrupan tarefas relacionadas, coma 'build', 'test', e 'deploy'.

5. **Dependencies**: as dependencias entre tarefas, asegurando que certas tarefas se completen antes de que outras comecen.

Comprender estes conceptos é crucial para deseñar e xestionar workflows eficaces que melloren a eficiencia e calidade no desenvolvemento de software. A correcta implantación de workflows pode supor a diferenza entre un proceso de desenvolvemento áxil e eficiente e un lento e propenso a erros.


## Servidores para a automatización

Existen distintos servidores que permiten a automatización de tarefas. Este curso vaise centrar en GitHub Actions, xa que é o máis usado en Prefapp, pero vexamos unha táboa comparativa con outros servidores que tamén usamos.


<table style="width:100%; max-width:1200px; margin:0 auto; border-collapse:collapse; overflow-x:auto; display:block;">
<thead>
<tr>
<th>Característica</th>
<th>GitHub Actions</th>
<th>Gitlab CI/CD</th>
<th>Jenkins</th>
<th>Apache Airflow</th>
<th>Azure DevOps</th>
<th>AWS CodePipeline</th>
<th>Google Cloud Build</th>
<th>Bitbucket Pipelines</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Empresa propietaria</strong></td>
<td>GitHub (Microsoft)</td>
<td>Gitlab Inc.</td>
<td>Comunidade Open Source</td>
<td>Apache Software Foundation</td>
<td>Microsoft</td>
<td>Amazon Web Services</td>
<td>Google</td>
<td>Atlassian</td>
</tr>
<tr>
<td><strong>Primeira release</strong></td>
<td>2018</td>
<td>2015</td>
<td>2011</td>
<td>2014</td>
<td>2018</td>
<td>2015</td>
<td>2018</td>
<td>2016</td>
</tr>
<tr>
<td><strong>Tipo de software</strong></td>
<td>Freemium</td>
<td>Freemium</td>
<td>Open Source</td>
<td>Open Source</td>
<td>Freemium</td>
<td>Privativo</td>
<td>Privativo</td>
<td>Freemium</td>
</tr>
<tr>
<td><strong>Licenza</strong></td>
<td>Copyright</td>
<td>Licenza MIT</td>
<td>Licenza MIT</td>
<td>Apache License 2.0</td>
<td>Copyright</td>
<td>Copyright</td>
<td>Copyright</td>
<td>Proprietary</td>
</tr>
<tr>
<td><strong>Hosting</strong></td>
<td>Cloud</td>
<td>Cloud o self-hosted</td>
<td>Self-hosted</td>
<td>Self-hosted</td>
<td>Cloud</td>
<td>Cloud</td>
<td>Cloud</td>
<td>Cloud</td>
</tr>
<tr>
<td><strong>Instalación</strong></td>
<td>Non require instalación</td>
<td>Opción de instalación self-hosted</td>
<td>Require instalación</td>
<td>Require instalación</td>
<td>Non require instalación</td>
<td>Non require instalación</td>
<td>Non require instalación</td>
<td>Non require instalación</td>
</tr>
<tr>
<td><strong>Requerimentos</strong></td>
<td>Conta de GitHub</td>
<td>Conta de Gitlab</td>
<td>Servidor propio (1 CPU, 1GB RAM)</td>
<td>Servidor propio (4 CPU, 8GB RAM)</td>
<td>Conta de Azure</td>
<td>Conta de AWS</td>
<td>Conta de Google Cloud</td>
<td>Conta de Bitbucket</td>
</tr>
<tr>
<td><strong>Bases de datos</strong></td>
<td>Non require</td>
<td>Non require</td>
<td>Opcional</td>
<td>Opcional</td>
<td>Non require</td>
<td>Non require</td>
<td>Non require</td>
<td>Non require</td>
</tr>
<tr>
<td><strong>Escalabilidade</strong></td>
<td>Alta</td>
<td>Alta</td>
<td>Alta</td>
<td>Alta</td>
<td>Alta</td>
<td>Alta</td>
<td>Alta</td>
<td>Alta</td>
</tr>
<tr>
<td><strong>Control</strong></td>
<td>Medio</td>
<td>Alto</td>
<td>Alto</td>
<td>Alto</td>
<td>Medio</td>
<td>Medio</td>
<td>Medio</td>
<td>Medio</td>
</tr>
<tr>
<td><strong>Dificultade de uso</strong></td>
<td>Media</td>
<td>Media</td>
<td>Alta</td>
<td>Media</td>
<td>Media</td>
<td>Media</td>
<td>Media</td>
<td>Media</td>
</tr>
<tr>
<td><strong>Comunidade</strong></td>
<td>Ampla</td>
<td>Ampla</td>
<td>Moi ampla</td>
<td>Ampla</td>
<td>Ampla</td>
<td>Ampla</td>
<td>Ampla</td>
<td>Ampla</td>
</tr>
<tr>
<td><strong>Integracións</strong></td>
<td>Nativo con GitHub</td>
<td>Nativo con Gitlab, múltiples integracións</td>
<td>Ampla gama de integracións a través de plugins</td>
<td>Ampla gama de integracións a través de operadores</td>
<td>Nativo con Azure, múltiples integracións</td>
<td>Nativo con AWS, múltiples integracións</td>
<td>Nativo con Google Cloud, múltiples integracións</td>
<td>Nativo con Bitbucket, múltiples integracións</td>
</tr>
<tr>
<td><strong>Prezo e plans</strong></td>
<td><a href="https://github.com/pricing" target="_blank">GitHub Pricing</a></td>
<td><a href="https://about.gitlab.com/pricing/" target="_blank">GitLab Pricing</a></td>
<td><a href="https://jenkins.io/download/" target="_blank">Jenkins Pricing</a></td>
<td><a href="https://airflow.apache.org/docs/" target="_blank">Airflow Pricing</a></td>
<td><a href="https://azure.microsoft.com/en-us/pricing/details/devops/azure-devops-services/" target="_blank">Azure DevOps Pricing</a></td>
<td><a href="https://aws.amazon.com/codepipeline/pricing/" target="_blank">AWS CodePipeline Pricing</a></td>
<td><a href="https://cloud.google.com/cloud-build/pricing" target="_blank">Google Cloud Build Pricing</a></td>
<td><a href="https://bitbucket.org/product/pricing" target="_blank">Bitbucket Pipelines Pricing</a></td>
</tr>
<tr>
<td><strong>Doc oficial</strong></td>
<td><a href="https://docs.github.com/en/actions" target="_blank">GitHub Actions Docs</a></td>
<td><a href="https://docs.gitlab.com/ee/ci/" target="_blank">GitLab CI/CD Docs</a></td>
<td><a href="https://www.jenkins.io/doc/" target="_blank">Jenkins Docs</a></td>
<td><a href="https://airflow.apache.org/docs/" target="_blank">Airflow Docs</a></td>
<td><a href="https://docs.microsoft.com/en-us/azure/devops/?view=azure-devops" target="_blank">Azure DevOps Docs</a></td>
<td><a href="https://docs.aws.amazon.com/codepipeline/" target="_blank">AWS CodePipeline Docs</a></td>
<td><a href="https://cloud.google.com/cloud-build/docs" target="_blank">Google Cloud Build Docs</a></td>
<td><a href="https://support.atlassian.com/bitbucket-cloud/docs/get-started-with-bitbucket-pipelines/" target="_blank">Bitbucket Pipelines Docs</a></td>
</tr>
</tbody>
</table>


### Outros

- CircleCI: https://circleci.com/
- Travis CI: https://travis-ci.org/
- Heroku CI: https://www.heroku.com/continuous-integration
- TeamCity: https://www.jetbrains.com/teamcity/
- Bamboo: https://www.atlassian.com/software/bamboo
- Buddy: https://buddy.works/
- Codefresh: https://codefresh.io/
- Concourse: https://concourse-ci.org/
- Drone: https://drone.io/
- GoCD: https://www.gocd.org/
- Spinnaker: https://www.spinnaker.io/
- Tekton: https://tekton.dev/

Máis info: https://en.wikipedia.org/wiki/Comparison_of_source-code-hosting_facilities


### GitHub Actions

Agora, centrándonos en GitHub Actions, imos ver unha descrición básica. Como comentamos, é un servizo de integración continua e entrega continua (CI/CD) que permite automatizar tarefas nun repositorio de GitHub. Baséase na execución de workflows, que son conxuntos de tarefas que se executan nun servidor de GitHub. Os workflows defínense nun arquivo YAML que se almacena no directorio `.github/workflows` do repositorio.

É un servizo gratuíto para repositorios públicos e privados, cun límite de 2000 minutos de execución ó mes para os repositorios privados. Para os repositorios públicos non hai límite de tempo de execución.

GitHub Actions intégrase con GitHub, o que lle permite executar workflows en resposta a eventos de GitHub, como a creación dun pull request, o push dun commit, a creación dun tag, etc. Tamén se poden executar workflows de xeito manual ou programado.

Proporciona un conxunto de accións predefinidas que se poden utilizar nos workflows, así como a posibilidade de crear accións personalizadas.

Tamén existe a posibilidade de crear runners nun servidor propio. Os runners de GitHub son máquinas virtuais aloxadas por GitHub que executan os workflows, pero a posibilidade de configuralos en servidores propio ou na nube pode aportar vantaxes.

No seguinte capítulo imos ver máis en detalle como funcionan os workflows de GitHub Actions e como pode facilitarnos a vida o CI/CD para o desenvolvemento de software propio ou dos nosos clientes.

Enlaces de interés:
- [GitHub Pricing](https://github.com/pricing)
- [GitHub Actions Docs](https://docs.github.com/en/actions)
- [GitHub Marketplace](https://github.com/marketplace?type=actions)
- [GitHub Runners](https://docs.github.com/en/actions/using-github-hosted-runners/about-larger-runners/about-larger-runners)
Loading