Migrarse de Travis CI a GitHub Actions

GitHub Actions y Travis CI comparte muchas similitudes, lo cual hace que el migrarse a GitHub Actions sea relativamente fácil.

Nota: Los ejecutores hospedados en GitHub no son compatibles con GitHub Enterprise Server actualmente. Puedes encontrar más información sobre el soporte que se tiene planeado en el futuro en el Itinerario público de GitHub.

Introducción

Esta guía te ayuda a migrar de Travis CI a GitHub Actions. Aquí se comparan sus conceptos y sintaxis, se describen sus similitudes y se demuestran sus acercamientos distintos para las tareas comunes.

Antes de comenzar

Antes de que comiences tu migración a GitHub Actions, sería útil familiarizarse con la forma en la que funciona:

Comparar la ejecución de jobs

Para darte control sobre cuándo se ejecutarán las tareas de IC, un flujo de trabajo de GitHub Actions utiliza jobs que se ejecutan en paralelo predeterminadamente. Cada job contiene pasos que se ejecutan en una secuencia que tú defines. Si necesitas ejecutar acciones de configuración y limpieza para un job, puedes definir pasos en cada job para que esto se lleve a cabo.

Similitudes en las claves

GitHub Actions y Travis CI comparten algunas similitudes y entenderlas con anticipación puede ayudar a agilizar el proceso de migración.

Utilizar la sintaxis de YAML

Tanto Travis CI como GitHub Actions utilizan YAML para crear jobs y flujos de trabajo y estos archivos se almacenan en el repositorio del código. Para obtener más información sobre cómo las GitHub Actions utilizan YAML, consulta la sección "Crear un archivo de flujo de trabajo".

Variables de ambiente personalizadas

Travis CI te permite configurar variables de ambiente y compartirlas entre etapas. De forma similar, las GitHub Actions te permiten definir las variables de ambiente para un paso, job o flujo de trabajo. Para obtener más información, consulta la sección "Variables de ambiente".

Variables de entorno predeterminadas

Tanto Travis CI como GitHub Actions incluyen variables de ambiente predeterminadas que puedes utilizar en tus archivos de YAML. En el caso de las GitHub Actions, puedes encontrarlas listadas en la sección "Variables de ambiente predeterminadas".

Proceso paralelo de jobs

Travis CI puede utilizar stages para ejecutar jobs en paralelo. De forma similar, las GitHub Actions ejecutan jobs en paralelo. Para obtener más información, consulta la sección "Crear jobs dependientes".

Insignias de estado

Tanto Travis CI como GitHub Actions son compatibles con las insignias de estado, lo cual te permite indicar si una compilación pasa o falla. Para obtener más información, consulta la sección "Agregar una insignia de estado de un flujo de trabajo a tu repositorio".

Utilizar una matriz de compilaciones

Tanto Travis CI como GitHub Actions son compatibles con matrices de compilación, lo cual te permite realizar pruebas utilizando combinaciones de sistemas operativos y paquetes de software. Para obtener más información, consulta "Utilizar una matriz de compilaciones".

A continuación podrás encontrar un ejemplo que compara la sintaxis para cada sistema:

Travis CI GitHub Actions
matrix:
  include:
    - rvm: 2.5
    - rvm: 2.6.3
jobs:
  build:
    strategy:
      matrix:
        ruby: [2.5, 2.6.3]

Apuntar a ramas específicas

Tanto Travis CI como GitHub Actions te permiten apuntar tu IC a una rama específica. Para obtener más información, consultala sección "Sintaxis de flujo de trabajo para GitHub Actions".

Puedes encontrar un ejemplo de la sintaxis para cada sistema:

Travis CI GitHub Actions
branches:
  only:
    - main
    - 'mona/octocat'
on:
  push:
    branches:
      - main
      - 'mona/octocat'

Verificar submódulos

Tanto Travis CI como GitHub Actions te permiten controlar si los submódulos se incluirán en los clones de los repositorios.

Puedes encontrar un ejemplo de la sintaxis para cada sistema:

Travis CI GitHub Actions
git:
  submodules: false
- uses: actions/checkout@v2
  with:
    submodules: false

Utilizar variables de ambiente en una matriz

Tanto GitHub Actions como Travis CI pueden agregar variables de ambiente personalizadas a una matriz de pruebas, lo cual te permite referirte a la variable en un paso subsecuente.

En GitHub Actions, puedes utilizar la clave include para agregar variables de ambiente personalizadas a una matriz. En este ejemplo, las entradas de la matriz para node-version se configuran para que cada una utilice valores diferentes para las variables de ambiente site y datacenter. El paso Echo site details utiliza entonces env: ${{ matrix.env }} para referirse a las variables personalizadas:

name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    strategy:
      matrix:
       include:
         - node-version: 10.x
           site: "prod"
           datacenter: "site-a"
         - node-version: 12.x
           site: "dev"
           datacenter: "site-b"
    steps:
      - name: Echo site details
        env:
          SITE: ${{ matrix.site }}
          DATACENTER: ${{ matrix.datacenter }}
        run: echo $SITE $DATACENTER

Características clave en GitHub Actions

Cuando te migres de Travis CI, consider las siguientes características clave en GitHub Actions:

Almacenar secretos

GitHub Actions te permite almacenar secretos y referenciarlos en tus jobs. Las organizaciones de GitHub Actions pueden limitar qué repositorios pueden acceder a sus secretos. Las reglas de protección de ambiente pueden requerir aprobación manual para que un flujo de trabajo acceda a los secretos del ambiente. Para obtener más información, consulta la sección "Secretos cifrados".

Compartir archivos entre jobs y flujos de trabajo

GitHub Actions incluye compatibilidad integrada para almacenamiento de artefactos, lo cual te permite compartir archivos entre jobs en un flujo de trabajo. También puedes guardar los archivos resultantes y compartirlos con otros flujos de trabajo. Para obtener más información, consulta la sección "Compartir datos entre jobs".

Alojar tus propios corredores

Si tus jobs requieren de hardware o software específico, GitHub Actions te permite almacenar tus propios ejecutores y enviar tus jobs para que éstos los procesen. GitHub Actions también te permite utilizar políticas para controlar cómo se accede a estos ejecutores, otorgando acceso a nivel de organización o de repositorio. Para obtener más información, consulta la sección "Hospedar tus propios ejecutores".

Tiempo de ejecución y jobs simultáneos

Los jobs simultáneos y los tiempos de ejecución de los flujos de trabajo en GitHub Actions pueden variad dependiendo de tu plan de GitHub. Para obtener más información, consulta la sección "Límites de uso y administración".

Utilizar lenguajes diferentes en GitHub Actions

Cuando trabajas con lenguajes diferentes en GitHub Actions, pueeds crear un paso en tu job para configurar tus dependencias de lenguaje. Para obtener más información acerca de cómo trabajar con un lenguaje en particular, consulta la guía específica:

Ejecutar scripts

GitHub Actions puede utilizar pasos de run para ejecutar scripts o comandos de shell. Para utilizar un shell en particular, puedes especificar el tipo de shell cuando proporciones la ruta al script. Para obtener más información, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions".

Por ejemplo:

steps:
  - name: Run build script
    run: ./.github/scripts/build.sh
    shell: bash

Manejo de errores en GitHub Actions

Cuando te migras a GitHub Actions, hay varios acercamientos al manejo de errores que puede que necesites tener en mente.

Manejo de errores en scripts

GitHub Actions detiene un job inmediatamente si alguno de los pasos regresa un código de error. Para obtener más información, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions".

Manejo de errores en jobs

GitHub Actions utiliza condicionales de tipo if para ejecutar jobs o pasos en ciertas situaciones. Por ejemplo, puedes ejecutar un paso cuando otro paso da failure() como resultado. Para obtener más información, consulta la sección "Sintaxis de flujo de trabajo para GitHub Actions". También puedes utilizar continue-on-error para prevenir que una ejecución de flujo de trabajo se detenga cuando falla un job.

Sintaxis de migración para condicionales y expresiones

Para ejecutar jobs bajo expresiones condicionales, Travis CI y GitHub Actions comparten una sintaxis condicional de tipo if similar. GitHub Actions te permite utilizar la condicional if para prevenir que un paso o un job se ejecuten a menos de que se cumpla con la condición. Para obtener más información, consulta la sección "Expresiones".

Este ejemplo demuestra cómo una condicional de tipo if puede controlar si un paso se ejecuta o no:

jobs:
  conditional:
    runs-on: ubuntu-latest
    steps:
      - run: echo "This step runs with str equals 'ABC' and num equals 123"
        if: env.str == 'ABC' && env.num == 123

Migrar las fases a pasos

Mientras que Travis CI utiliza fases para ejecutar pasos, GitHub Actions tiene pasos que pueden ejecutar acciones. Puedes encontrar acciones preconstruidas en GitHub Marketplace, o puedes crear tus propias acciones. Para obtener más información, consulta la sección "Crear acciones".

Puedes encontrar un ejemplo de la sintaxis para cada sistema:

Travis CI GitHub Actions
language: python
python:
  - "3.7"

script:
  - python script.py
jobs:
  run_python:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/setup-python@v2
        with:
          python-version: '3.7'
          architecture: 'x64'
      - run: python script.py

Almacenar dependencias en caché

Travis CI y GitHub Actions te permiten guardar dependencias en caché manualmente para reutilizarlas posteriormente. Este ejemplo ilustra la sintaxis de caché para cada sistema.

Travis CI GitHub Actions
language: node_js
cache: npm
- name: Cache node modules
  uses: actions/cache@v2
  with:
    path: ~/.npm
    key: v1-npm-deps-${{ hashFiles('**/package-lock.json') }}
    restore-keys: v1-npm-deps-

El almacenamiento en caché de las GitHub Actions solo se aplica a los repositorios que se hospedan en GitHub.com. Para obtener más información, consulta la sección "Almacenar las dependencias en caché para agilizar los flujos de trabajo".

Ejemplos de tareas comunes

Esta sección compara cómo GitHub Actions y Travis CI realizan tareas en común.

Configurar variables de ambiente

Puedes crear variables de ambiente personalizadas en un job de GitHub Actions. Por ejemplo:

Travis CI Flujo de trabajo de GitHub Actions
env:
  - MAVEN_PATH="/usr/local/maven"
jobs:
  maven-build:
    env:
      MAVEN_PATH: '/usr/local/maven'

Compilar con Node.js

Travis CI Flujo de trabajo de GitHub Actions
install:
  - npm install
script:
  - npm run build
  - npm test
name: Node.js CI
on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - name: Use Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '12.x'
      - run: npm install
      - run: npm run build
      - run: npm test

Pasos siguientes

Para seguir aprendiendo sobre las características principales de GitHub Actions, consulta la sección "Aprender sobre GitHub Actions".

¿Te ayudó este documento?

Política de privacidad

¡Ayúdanos a hacer geniales estos documentos!

Todos los documentos de GitHub son de código abierto. ¿Notas algo que esté mal o que no sea claro? Emite una solicitud de cambios.

Haz una contribución

O, aprende cómo contribuir.