Github Actions - Javiermartinf98/mirepositorio GitHub Wiki
GitHub Actions es una herramienta que permite reducir la cadena de acciones necesaria para la ejecución de código, mediante la creación de un de flujo de trabajo encargado del Pipeline. Siendo configurable para que GitHub reaccione a ciertos eventos de forma automática según nuestras preferencias.
Por lo tanto, GitHub Actions permite crear workflows que se puedan utilizar para compilar, testear y desplegar código. Además, da la posibilidad de crear flujos de integración y despliegue continuo dentro de nuestro repositorio. También se puede utilizar para automatizar la gestión de la tareas (issues) de los proyectos.
GitHub Actions no está habilitado para GitHub Enterprise Server de manera predeterminada. Actualmente se encuentra en pruebas dentro de la instancia del Github Empresarial de HPE. Para habilitarlo es necesario enviar un correo solicitando la activación para un repositorio en particular a [email protected]. Una vez habilitadas las Github Actions en tu repositorio puedes habilitar las Github Actions en tu repositorio pero limitando las acciones que un flujo de trabajo puede ejecutar. Para ello accede a los Settings del repositorio a la sección Actions.
Dentro de la instancia de Github de HPE se permiten únicamente la ejecución de acciones locales o creadas por Github.

Migración de Github Actions desde github.com a la instancia de Github Empresarial de HPE
A continuación se explica como utilizar Github Actions existentes en el Marketplace de Github.com de forma local en la instancia de Github Empresarial de HPE, para ello es necesario migrar el repositorio de la Github Action desde github.com a github.hpe.com. Utilizaremos como ejemplo la Github Action GitHub Issue Due Dates Action.
- Descargar el repositorio de la Github Action desde github.com

- Crear un repositorio público en la instancia del Github Empresarial de HPE, en la organización 'HPE'.

- Subir el código de la Github Action descargada de github.com al nuevo repositorio creado en el Github Empresarial de HPE:
cd github-issue-due-dates-action
rm -rf .git
git init
git add *
git commit -m "Init"
git branch -M main
git remote add origin [email protected]:hpe/github-issue-due-date-action.git
git push -u origin main
- Crear una release en el repositorio de la Github Action
Configuración de la Github Action en nuestro repositorio
Puedes configurar un flujo de trabajo de Github Actions para que se active cuando se produzca un evento en tu repositorio, como la apertura de pull request o la creación de un issue. Tu flujo de trabajo contiene uno o más trabajos que pueden ejecutarse en orden secuencial o en paralelo. Debes alojar tus propias máquinas virtuales de Linux, Windows o macOS para ejecutar flujos de trabajo para tu instancia de GitHub Enterprise Server. Los ejecutores autohospedados pueden ser físicos, virtuales, en un contenedor, locales o en una nube. En nuestro caso hemos utilizado la infraestructura de kubernetes del lab para poder usar los runners del repo.
Configuración de un Runner
- Creamos un nuevo "Self-hosted Runner"

- Proporcionamos a la persona del lab que cree el recurso en kubernetes los comandos de instalación del runner, o el token devuelto por Github

Configuración del Workflow
Un flujo de trabajo es un proceso automatizado configurable que ejecutará uno o más jobs. Los flujos de trabajo se definen mediante un archivo de YAML que se verifica en tu repositorio y se ejecutará cuando lo active un evento dentro de este o puede activarse manualmente o en una programación definida.
Los flujos de trabajo se definen en el directorio .github/workflows de un repositorio y un repositorio puede tener varios flujos de trabajo, cada uno de los cuales puede realizar un conjunto diferente de tareas. Por ejemplo, puedes tener un flujo de trabajo para crear y probar las solicitudes de cambio, otro para desplegar tu aplicación cada que se cree un lanzamiento y todavía otro más que agregue una etiqueta cada que alguien abra una propuesta nueva.
Para más información acerca de la sintáxis de los ficheros de Workflows consultar la documentación de Github: Uso de flujos de trabajo
Si una acción está definida en un repositorio diferente al de su archivo de flujo de trabajo, como será nuestro caso, puede hacer referencia a la acción con la sintaxis {propietario}/{repo}@{ref} en su archivo de flujo de trabajo. En nuestro caso, todas las referencias a Github Actions deben de estar vinculadas a la organización 'hpe' (ej. hpe/[email protected]), ya que sera donde se encuentren los repositorios de las Github Actions que utilizaremos.
La acción debe estar almacenada en un repositorio público o en un repositorio interno que esté configurado para permitir el acceso a los flujos de trabajo.
Creamos un fichero YAML dentro del directorio .git/workflows con el nombre identificativo de la Github Action

Pegamos el contenido del fichero workflow perteneciente a la Github Action que queramos configurar, en nuestro caso es el siguiente:
name: Issue Due Dates Action
on:
schedule:
- cron: '0 0 * * *'
workflow_dispatch:
env:
GH_TOKEN: "${{ secrets.GH_TOKEN }}"
jobs:
Ubuntu:
name: Add labels to issues
runs-on: self-hosted
steps:
- name: GitHub Issue Due Dates Action
uses: hpe/[email protected]
with:
GH_TOKEN: "${{ secrets.GH_TOKEN }}"
En este caso la Github Action se ejecutará una vez al día a la 00:00:
schedule:
- cron: '0 0 * * *'
o de forma manual
workflow_dispatch:
Creación de secrets
En el caso de la Github action utilizada de ejemplo es necesario configurar un secret token. Los secrets son variables de entorno encriptadas que creas en una organización, repositorio o entorno de repositorio. Las secrets que creas están disponibles para su uso en los flujos de trabajo de las Github Actions.
- En GitHub, navega a la página principal del repositorio.
- Bajo el nombre de tu repositorio, haz clic en la pestaña "Settings".
- En la barra lateral izquierda, haz clic en "Secrets".
- En la barra de la derecha, haz clic en "New Repository secret"

- Escribe un nombre del secret en la caja de entrada "Nombre". Para nuestra Github Action se llamará
GH_TOKEN - Escribe el valor del secret. En nuestro caso el valor del secret será un token de acceso personal
Gestión de las ejecuciones de los Workflows
Con los pasos anteriores ya estaría configurada y lista para su ejecución la Github Action. Para ver las diferentes ejecuciones de los Workflows configurados o lanzarlos manualmente (en el caso de que estén configurados de forma manual) seguiremos los siguientes pasos:
-
En GitHub.com, navega a la página principal del repositorio.
-
En el nombre del repositorio, haga clic en "Actions".

- En la barra lateral izquierda, haga clic en el Workflows que deses ver o ejecutar.

-
Sobre la lista de ejecuciones del workflow, selecciona "Run workflow".
-
Utiliza el desplegable Rama para seleccionar la rama del flujo de trabajo. Haga clic en "Run workflow".

TIPS
Api Github
En algunos casos, desde el código de la action se invoca el api de github.com. En este caso es necesario realizar un análisis de código para identificar donde se invoca al api de github, y modificarlo por el api de la instancia empresarial de Github HPE.
Referencias a otras Github Actions
Algunas Actions hacen referencias a otras Actions. Es el caso de las Action hpe/cleanup-disabled-workflows, esta action se encarga de eliminar las ejecuciones de los Workflows en deshabilitados.
Esta action desde el fichero action.yml invoca la action actions/github-script@v6 alojada en github.com.
...
runs:
using: "composite"
steps:
- uses: actions/github-script@v6
with:
github-token: ${{ inputs.github-token }}
script: |
const githubContext = {
owner: context.repo.owner,
repo: context.repo.repo,
}
...
Como ya hemos indicado, la instancia empresarial de Github HPE solamente permite las action alojadas localmente en la instancia empresarial de HPE. Deberemos de migrar a la instancia empresaria toda action a la cual haga referencia la Github Action la action que queremos ejecutar, y cambiar la referencia interna a la action a la organización HPE.
...
runs:
using: "composite"
steps:
- uses: hpe/github-script@v6
with:
github-token: ${{ inputs.github-token }}
script: |
const githubContext = {
owner: context.repo.owner,
repo: context.repo.repo,
}
...