Gitea使用工作流部署Vue程序

Sylphia 发布于 19 小时前 17 次阅读


今天偶然发现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文件,在项目中点击工作流就会看到有任务触发了,今后只要提交一次代码,就会创建一次工作流。

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

此作者没有提供个人介绍。
最后更新于 2026-08-23