Este artículo es el día 22 del Calendario de Aventuras de Sakura Internet 2024.
Introducción
Puede haber ocasiones en las que desees usar FreeBSD con GitHub Actions.
De hecho, como uso FreeBSD en Sakura Internet, hay ocasiones en las que simplemente necesito usarlo.
Actualmente, estoy utilizando Jenkins y un entorno FreeBSD mediante SSH para realizar compilaciones de una manera bastante laboriosa,
pero si se puede hacer con GitHub Actions, definitivamente preferiría hacerlo a través de GitHub Actions.
Usar Cross-Platform GitHub Action
Usando Cross-Platform GitHub Action, puedes usar FreeBSD.
Esto permite ejecutar otros sistemas operativos como máquinas virtuales utilizando Qemu sobre GitHub Actions.
Aunque es un enfoque bastante rudimentario, es muy útil poder utilizar FreeBSD en GitHub Actions.
Creación de acciones
Primero, crea un repositorio para usar Cross-Platform GitHub Action.
$ git init actions_freebsd
$ cd actions_freebsd
A continuación, crea el directorio .github/workflows
y dentro de este, crea un archivo main.yml
.
$ mkdir -p .github/workflows
$ vi .github/workflows/main.yml
En main.yml
, escribe el siguiente contenido.
name: FreeBSD
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: probar freebsd 13.4
uses: cross-platform-actions/action@v0.26.0
with:
memory: 512M
operating_system: freebsd
version: "13.4"
shell: sh
run: |
uname -a
Haz un git push para ejecutar GitHub Actions.
$ git remote add origin git@github.com:masa23/actions_freebsd.git
$ git add .
$ git commit -m "primer commit"
$ git branch -M main
$ git push origin main
Al ejecutar GitHub Actions, se ejecutará uname -a en FreeBSD 13.4.
Resultado de las acciones primer commit #1
¡Hemos podido usar FreeBSD fácilmente! 🎉
Imágenes personalizadas de FreeBSD
Creación de imágenes personalizadas
Usando freebsd-builder, puedes utilizar imágenes personalizadas de FreeBSD.
En el entorno real, especifico imágenes personalizadas para usarlas.
Avergonzadamente, a veces necesito que se ejecute FreeBSD más antiguo como el 11.2 o necesito una imagen con golang, por lo que
preparo y utilizo imágenes personalizadas.
Esta vez, voy a crear una imagen que instale gcc para usar golang y cgo en FreeBSD 13.4.
Clona el repositorio y crea una imagen personalizada.
$ git clone https://github.com/cross-platform-actions/freebsd-builder.git
$ cd freebsd-builder
- Estoy utilizando custom.sh para crear la imagen personalizada.
Instalo gcc y Go para que se pueda realizar la construcción de CGO.
$ vi resource/custom.sh
#!/bin/sh
set -exu
# Agrega tu aprovisionamiento adicional aquí para imágenes de VM personalizadas.
GOLANG_VERSION=1.23.4
pkg install -y gcc
fetch -o - https://go.dev/dl/go${GOLANG_VERSION}.freebsd-amd64.tar.gz | tar xz -f - -C /usr/local/
ln -s /usr/local/go/bin/go /usr/local/bin/go
Configuración del entorno de construcción
sudo curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install -y qemu-system-x86 packer
packer plugins install github.com/hashicorp/qemu
Construcción de la imagen
PACKER_LOG=1 sudo -E bash ./build.sh 13.4 x86-64 -var headless=true
# ls -lh output/
total 664M
-rw-r--r-- 1 root root 664M Dec 20 16:29 freebsd-13.4-x86-64.qcow2
Lanzamiento
$ gh release create v0.0.1 --title "FreeBSD 13.4 añadir golang" --notes "FreeBSD 13.4" output/freebsd-13.4-x86-64.qcow2
Ejecutar CI usando la imagen
name: FreeBSD
on:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: prueba para freebsd 13.0
uses: cross-platform-actions/action@v0.26.0
with:
memory: 512M
operating_system: freebsd
version: 13.4
image_url: https://github.com/masa23/freebsd-builder/releases/download/v0.0.1/freebsd-13.4-x86-64.qcow2 # aquí especifica la URL de la imagen personalizada
shell: sh
run: |
export CC=gcc
go test -v ./...
Comprobación del resultado de las acciones
Resultado de las acciones prueba golang cgo #3
Se ejecutó correctamente CI usando la imagen personalizada.
Conclusión
- He presentado cómo usar FreeBSD con GitHub Actions.
- Debes tener cuidado si usas mucha memoria con Qemu, pero pude usar FreeBSD fácilmente.
- Dado que el uso de Qemu puede hacer que CI tarde más, parece mejor usarlo limitado a solicitudes de extracción o momentos de lanzamiento.