将托管在CodeBerg上的博客使用CI在Vercel上部署博客
近期GitHub宣布要拿项目去练ai了。虽然我对这种行为也不是很抵触,但巨硬默认开启这个选项,关闭说明写的又不明不白。我打算搬家搬去CodeBerg。今天研究了一天跑通了CodeBerg + Forgejo Runner。记录下。
近期GitHub宣布要拿项目去练ai了。虽然我对这种行为也不是很抵触,但巨硬默认开启这个选项,关闭说明写的又不明不白。我打算搬家搬去CodeBerg。今天研究了一天跑通了CodeBerg + Forgejo Runner。记录下。
非常遗憾,Vercel并不支持CodeBerg,所以我们无法像在GitHub上那样推送完就傻瓜式部署了。
不过我们可以通过Vercel cli手动将代码推送到Vercel上,再在CI中使用改cli,就可以和以前一样自动部署。
首先,我们需要去申请一个Vercel Token,vercel cli的指令都需要它来执行。
申请完Vercel Token后,我们就可以在本地安装Vercel cli了。安装方法很简单,直接使用安装即可:npm install -g vercel
安装完后,我们可以一下命令将代码推送到预览环境:
vercel --token=你的Token
但在CI中,我们是不可能手动确认项目的,所以我们需要加上--yes。
也不想占用宝贵的CI时间,来等待Vercel编译完成,所以我们还需要加上--no-wait。
vercel --yes --no-wait --token=你的Token
WARNING
你需要确保你的项目文件夹名称和你在Vercel上创建的项目名称一致,否则会部署失败。可能需要手动编写vercel.json来指定项目名称。
如果没有问题的话,我们就可以在CI中使用这个命令了。当然,在CI中我们需要加上--prod参数来部署到生产环境。最终的命令长这个样子。
vercel --no-wait --prod --yes --token=你的Token
相对于GitHub,CodeBerg支持自托管运行环境,但并没有内置的运行环境,所谓的官方运行环境也是官方自己部署的。
CodeBerg支持Forgejo Runner和Woodpecker两种CI工具。
要使用Woodpecker需要像官方发出申请,而Forgejo Runner则有三种免费的运行环境。
我并没有怎么研究Woodpecker,这里主要讲Forgejo Runner。
CodeBerg是一个非营利组织,主要为了支持开源软件。如果你的软件是闭源的,你可能就不符合CodeBerg的CI使用条件了,需要自行部署了。
目前CodeBerg提供了三种无需申请的运行环境:
| 名称 | CPU | 内存 | 时间限制 |
|---|---|---|---|
| codeberg-tiny | 1 | 2G | 2分钟 |
| codeberg-small | 2 | 4G | 5分钟 |
| codeberg-medium | 4 | 8G | 10分钟 |
架构都是X86的,环境应该是Linux。可以满足博客打包上传了。
如果你的任务不是很紧急,可以加上-lazy后缀,如codeberg-tiny-lazy,它会在1天内的空闲时间执行,减轻服务器的压力。
官方原文如下:
Forgejo Runner的配置文件在.forgejo/workflows目录下,格式和GitHub Actions的配置文件基本一样,都是YAML格式的。
下面是我的博客部署到Vercel的CI配置文件:
name: Deploy Nuxt4 to Vercel
on:
push:
branches:
- v2
workflow_dispatch:
jobs:
deploy:
runs-on: codeberg-tiny
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Setup Node.js environment
uses: pnpm/action-setup@v5
- name: Install Vercel CLI
run: pnpm i vercel
- name: Push To Vercel
run: pnpx vercel --no-wait --prod --yes --token=${{ secrets.VERCEL_TOKEN }}
需要注意的是,runs-on填写的是codeberg-tiny、codeberg-small或codeberg-medium等运行环境名称。如果你有自部署的,也可以填写自部署的环境名称。
我采用了Docker来配合Forgejo Runner使用。但怀疑是我科学上网环境变量配置的有问题,导致网速奇差无比,基本上不能使用。因此我并没有在正文中介绍它。
Forgejo Runner的文档说的十分详细。但有人和我一样英语不好,或者有些大聪明根本不看文档...我还是简单介绍一下部署方法吧。
我是搭配Docker使用的,所以要先安装Docker。至于Docker如何安装,这里不展开赘述。
在科学上网+root环境下执行以下命令,完成Forgejo Runner的下载和验证:
export ARCH=$(uname -m | sed 's/x86_64/amd64/;s/aarch64/arm64/')
export RUNNER_VERSION=$(curl -X 'GET' https://data.forgejo.org/api/v1/repos/forgejo/runner/releases/latest | jq .name -r | cut -c 2-)
export FORGEJO_URL="https://code.forgejo.org/forgejo/runner/releases/download/v${RUNNER_VERSION}/forgejo-runner-${RUNNER_VERSION}-linux-${ARCH}"
wget -O forgejo-runner ${FORGEJO_URL} || curl -o forgejo-runner ${FORGEJO_URL}
chmod +x forgejo-runner
wget -O forgejo-runner.asc ${FORGEJO_URL}.asc || curl -o forgejo-runner.asc ${FORGEJO_URL}.asc
gpg --keyserver hkps://keys.openpgp.org --recv EB114F5E6C0DC2BCDD183550A4B61A2DC5923710
gpg --verify forgejo-runner.asc forgejo-runner && echo "✓ Verified" || echo "✗ Failed"
接着将forgejo-runner移动到软件目录下,并设置相应权限:
cp forgejo-runner /usr/local/bin/forgejo-runner
chmod 755 /usr/local/bin/forgejo-runner
完成上述操作后,你可以输入来验证安装是否成功,正确的话它会输出版本号。forgejo-runner -v
裸root运行是十分不安全的,官方推荐创建一个runner用户来运行Forgejo Runner,官方的systemd也是以runner用户身份来运行的。
所以我们也来创建一个runner用户:
useradd --create-home runner
usermod -aG docker runner
完成以下操作后,我们通过切换到su runnerrunner用户,并切换到~目录,来配置环境。
我们通过下面的步骤来创建默认配置文件:
forgejo-runner generate-config > config.yml
配置文件的注释很详细,请根据自己的需求进行修改
WARNING
我使用时,配置文件最下面的connections不需要填写,后面有专门的命令来注册链接。
完成这之后,我们可以通过下面命令来启动Forgejo Runner了。
forgejo-runner daemon -c ./runner-config.yml
它在启动后会输出Starting runner daemon,之后马上会因为没有连接而报错退出。
要连接到CodeBerg,我们首先拿到一个Token。在设置 -> Actions -> 运行器 -> 创建新运行器 可以找到你的Token。
之后执行下面的命令来添加连接:
forgejo-runner register
接着按要求填入Git托管平台url,token就可以完成注册。
这时再执行下面的命令,则不会收到报错,并且可以在CodeBerg上看到你的运行器。
如果上述步骤没有问题的话,可以将 官方的systemd单元格文件
复制到/etc/systemd/system/forgejo-runner.service,然后systemctl enable --now forgejo-runner来启动了。不要忘记看日志它是否正常工作。
CodeBerg有全中文,不用再和GitHub一样啃生肉了。 你都做程序员了,还看不懂English?
而且CodeBerg可以为你的项目设置头像,之前一直都觉得项目都顶着一个用户的头像...非常奇怪。
CodeBerg支持从GitHub快速迁移,输入url就能进行克隆,非常方便。项目主题,issue什么的一个都不缺。
同时CodeBerg的API是完全没有任何速率限制的,不用像GitHub一样要自行申请一个API Token。
但在Actions上,CodeBerg相对于GitHub还是非常脆弱的。
上文讲述的官方Forgejo Runner也才刚上线一年左右。之前的环境都要向官方申请才能使用CI。
同时codeberg-medium也才10分钟的运行时长,我的Stapxs-QQ-Lite-X编译Electron平均时长都在10分钟以上,根本不可能够用。
而且仅有疑似Linux的环境,相对于能同时提供Win,Win Arm,MacOS的GitHub而言,十分孱弱了。
如果真的想承担软件编译,还是自行部署吧。
GitHub被巨硬收购后,已经变得越来越糟糕了。之前GitHub的拿它的新UI乱推Copilot已经搞得我想写个新主页了。
作为一个Git托管平台,GitHub主页的一半篇幅是AI聊天框,另一半是你最近的Issue与Fork。
我是无法理解,你收不到回应通知,光点开Issue看看就有人搭理你了吗?将用户已经知道的信息放在主页上,完全就是在浪费空间。
更加糟糕的是,在Issue和Fork上,是由Copilot的处理按钮的。
前段时间matplotlib,AI乱发Fork还攻击开发者,闹得沸沸扬扬的。过度往开源社区里塞AI,让AI占领Issue和Fork,并非是正确的事情。
将AI聊天框和不知有何意义的Issue与Fork拼合在一起,就得到了现在的GitHub主页了。不知道的看到这占大头的聊天框还以为是个AI聊天平台了。
现在GitHub又要拿开源项目乱练AI。往日最大的开源社区——GitHub正在转变为巨硬手下售卖Token的打工人。真是悲哀——!
INFO


