今天偶然发现Gitea也能用工作流,之前都是用Jenkins来部署测试程序的,遂更换为Gitea自带的工作流部署吧,而且也能省一些内存,本来我的腾讯云的小主机配置就不高,多开一个Jenkis还占用我的内存😭。
一、检查Gitea工作流是否开启
官方文档说明1.19.0版本之后都可以使用工作流,但是1.19.0<=>1.21.0之间的版本的话,需要手动修改配置文件开启。>=1.21.0版本的话,默认是开启的。
如果在设置里面,有工作流这个选项,就说明开启了。

二、开启工作流功能
有的话就可以跳过这一步了
如果没有的话,就需要修改配置文件手动开启了。当时还看了一下gitea版本,gitea version后面是空的,很疑惑。
./gitea --version
gitea version built with GNU Make 4.3, go1.25.5 X:jsonv2 : bindata
既然没有版本,那就看下官方文档手动开启一下这个功能吧,我当时是二进制编译运行的gitea,配置文件正常在编译目录下面的custom/conf/app.ini,在后面追加下面的代码。
[actions]
ENABLED=true
修改后保存,然后重启gitea,我这边是交给了systemctl来托管了
sudo systemctl restart gitea
三、创建Gitea Runner运行器
开启之后,正常是没有工作流滴,咱需要手动配置。
首先要在Gitea中注册一个gitea-runner,这个可以理解为是CI/CD的执行器,负责调度流水线任务。
我这边用docker来对gitea-runner进行部署。
root@VM-0-2-ubuntu:~# docker pull gitea/runner:latest
查找一下容器中的可执行文件,根据这个可执行文件来生成config.yaml文件
docker run --rm \
--entrypoint sh \
gitea/runner:latest \
-c 'find / -type f -perm -111 2>/dev/null | grep -E "gitea-runner|runner|act_runner"'
- docker run --rm:容器运行结束后,自动把这个容器删除
- --entrypoint sh:使用shell方式进入
- gitea/runner:latest:指定镜像文件
- -c:在容器中执行某行命令
如果输入如下所示:
/usr/local/bin/gitea-runner
执行如下命令:
# 这里我放在了runner-data目录,目录是自定义的,根据你的想法来就行。
cd /home/git/gitea-main/runner-data
# 在当前目录,生成config.yaml
docker run --rm \
--entrypoint "" \
gitea/runner:latest \
/usr/local/bin/gitea-runner generate-config > config.yaml
然后创建并启动gitea-runner的docker容器:
docker run -d \
--name gitea-runner \
--restart=always \
-e GITEA_INSTANCE_URL=http://10.0.0.2:8998 \
-e GITEA_RUNNER_REGISTRATION_TOKEN=zf0ExxxxxxxxxxxxxxxxxxxxTx8 \
-e GITEA_RUNNER_NAME=runner-01 \
-e CONFIG_FILE=/data/config.yaml \
-v /home/git/gitea-main/runner-data:/data \
-v /var/run/docker.sock:/var/run/docker.sock \
gitea/runner:latest
命令解释:
- docker run -d 创建并运行一个容器
- --name gitea-runne 定义容器名字,名字不可重复
- --restart=always 设置容器自动重启策略
- -e 给容器设置环境变量用的
- GITEA_INSTANCE_URL:Gitea的套接字信息
- GITEA_RUNNER_REGISTRATION_TOKEN:在gitea用户设置里面,点击工作流->运行器,点击右上角的创建运行器就会找到Token密钥
- GITEA_RUNNER_NAME:给runner起个名
- CONFIG_FILE:指定加载哪个配置文件,后面会讲为什么要用到这个yaml文件。
- -v [宿主机目录]:[docker容器内的目录] 目录映射,如果在/data目录下写入文件,那么宿主机上的/home/git/gitea-main/runner-data目录下也会看到
- -v /var/run/docker.sock:/var/run/docker.sock 挂载后可以与宿主机上的docker进行通信,控制宿主机上的docker程序
不出意外的话,你会在用户设置里面看到这个运行器

四、创建工作流
随便选择一个项目,在项目的代码里面,创建目录和yml工作流文件。目录层级为.gitea/workflows/test.yml
test.yml文件内容如下:
name: test
# 表示在dev分支内触发
on:
push:
branches:
- dev
jobs:
deploy:
runs-on: ubuntu-latest
# 创建并运行一个node22版本的docker容器,
# 并把宿主机目录/home/git/deploy-test/jxpjpt/front/admin挂载到node22版本的docker容器内的/depoly目录中
container:
image: node:22
volumes:
- /home/git/deploy-test/jxpjpt/front/admin:/deploy
# 步骤列表
steps:
- name: 拉取代码
run: |
git clone \
--branch dev \
--single-branch \
http://${{ secrets.CI_USERNAME }}:${{ secrets.CI_TOKEN }}@10.0.0.2:8998/Sylphia/jxpjpt-frontend-admin.git .
# 这里我使用的是pnpm
- name: 启用 pnpm
run: corepack enable
- name: 查看版本
run: |
node -v
pnpm -v
- name: 安装依赖
run: pnpm install --frozen-lockfile
- name: 构建
run: pnpm run build:dev
- name: 查看构建结果
run: |
ls -lah
ls -lah dist
# 我这里最终是要把构建之后的Vue静态文件放到宿主机的/home/git/deploy-test/jxpjpt/front/admin目录中去
# 这里可以看成操作/deploy文件夹与操作宿主机的文件夹是等价的
- name: 部署到宿主机
run: |
rm -rf /deploy/*
cp -r dist/* /deploy/
- name: 查看部署结果
run: |
ls -lah /deploy
- secrets.CI_USERNAME:在项目设置->工作流->密钥里面,点击创建密钥;名称填写CI_USERNAME,值的话填写可以访问当前项目的用户名。
- secrets.CI_TOKEN:在用户设置->应用,创建新的令牌,给予仓库读取权限,并记下;在项目设置->工作流->密钥里面,点击创建密钥,名称填写CI_TOKEN,值填写刚才创建的令牌信息。
提交刚才创建的test.yml文件,在项目中点击工作流就会看到有任务触发了,今后只要提交一次代码,就会创建一次工作流。

到此为止,工作流就创建完毕了😄


Comments NOTHING