本文是樱花互联网 Advent Calendar 2024的第22篇文章。
引言
有时可能希望在GitHub Actions中使用FreeBSD。
实际上,由于樱花互联网使用FreeBSD,因此确实有希望使用它的需求。
目前我通过SSH到Jenkins和FreeBSD环境进行构建,虽然有些费力,
但如果能在GitHub Actions中完成,当然希望使用GitHub Actions。
使用Cross-Platform GitHub Action
通过使用Cross-Platform GitHub Action,可以使用FreeBSD。
这个工具可以在GitHub Actions上利用Qemu作为虚拟机运行其他操作系统。
这是一种相对费力的方式,但能够在GitHub Actions中使用FreeBSD还是非常感谢的。
创建Actions
首先,创建一个用于使用Cross-Platform GitHub Action的仓库。
$ git init actions_freebsd
$ cd actions_freebsd
接下来,创建.github/workflows
目录,并在其中创建main.yml
。
$ mkdir -p .github/workflows
$ vi .github/workflows/main.yml
在main.yml
中输入以下内容。
name: FreeBSD
on: push
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 测试 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
执行git push以运行GitHub Actions。
$ git remote add origin git@github.com:masa23/actions_freebsd.git
$ git add .
$ git commit -m "第一次提交"
$ git branch -M main
$ git push origin main
当GitHub Actions执行时,将执行FreeBSD 13.4的uname -a。
Actions的结果 第一次提交 #1
轻松地使用了FreeBSD🎉
FreeBSD的自定义镜像
创建自定义镜像
通过使用freebsd-builder,可以使用FreeBSD的自定义镜像。
在实际环境中,我指定了自定义镜像的使用。
因为有时需要运行像11.2这样旧的FreeBSD,或者需要安装golang的镜像,所以
我准备了自定义镜像供使用。
这次我将创建一个在FreeBSD 13.4上使用golang和cgo的镜像,并安装gcc。
克隆仓库并创建自定义镜像。
$ git clone https://github.com/cross-platform-actions/freebsd-builder.git
$ cd freebsd-builder
- 使用custom.sh创建自定义镜像。
安装gcc和Go以便进行CGO构建。
$ vi resource/custom.sh
#!/bin/sh
set -exu
# 在这里添加你的自定义虚拟机镜像的附加配置。
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
构建环境的搭建
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
镜像的构建
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
发布
$ gh release create v0.0.1 --title "FreeBSD 13.4 添加 golang" --notes "FreeBSD 13.4" output/freebsd-13.4-x86-64.qcow2
使用镜像执行CI
name: FreeBSD
on:
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- name: 测试 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 # 在这里指定自定义镜像的URL
shell: sh
run: |
export CC=gcc
go test -v ./...
查看Actions的结果
Actions的结果 golang 测试 cgo #3
成功使用自定义镜像执行了CI。
结束语
- 本文介绍了如何在GitHub Actions中使用FreeBSD。
- 由于使用Qemu,如果消耗大量内存,需要注意,但总的来说,使用FreeBSD变得简单了。
- 由于使用Qemu,CI可能需要花费较长时间,因此建议在Pull Request或Release时使用。