devStandard/docs/learning/e-git/5-gitea action.md
2025-03-29 14:35:49 +08:00

8.6 KiB
Raw Blame History

6-gitea action

Act Runner | Gitea Documentation

Gitea Actions 搭建 - Seepine's Blog

安装

gitea开启功能

  • gitea开启 功能, 路径data/gitea/conf/app.ini
[actions]  
ENABLED=true

重启

获取令牌

  • 获取令牌
    • 实例级别:管理员设置页面,例如 <your_gitea.com>/admin/actions/runners
    • 组织级别:组织设置页面,例如 <your_gitea.com>/<org>/settings/actions/runners
    • 存储库级别:存储库设置页面,例如 <your_gitea.com>/<owner>/<repo>/settings/actions/runners

安装 act_runner

  • 安装act_runner
# 下载
docker pull gitea/act_runner:latest

# 生成配置文件
docker run --entrypoint="" --rm -it gitea/act_runner:latest act_runner generate-config > config.yaml
services:
  runner:
    image: gitea/act_runner:latest
    container_name: runner
    environment:
      - CONFIG_FILE=/config.yaml
      - GITEA_INSTANCE_URL=http://172.17.0.1:3000/
      - GITEA_RUNNER_REGISTRATION_TOKEN=令牌
      - GITEA_RUNNER_NAME=docker_runner
    restart: unless-stopped
    volumes:
      - ./config.yaml:/config.yaml
      - ./data:/data
      - ./cache:/root/.cache
      - /var/run/docker.sock:/var/run/docker.sock
    ports:
      - 8088:8088

标签

查看 config.yaml 配置文件

  labels:
    - "ubuntu-latest:docker://gitea/runner-images:ubuntu-latest"
    - "ubuntu-latest-slim:docker://gitea/runner-images:ubuntu-latest-slim"
    - "ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04"
    - "ubuntu-20.04:docker://gitea/runner-images:ubuntu-20.04"

这些表示runs-on可以选择的容器以及映射关系, 例如 ubuntu-latest 将在 gitea/runner-images:ubuntu-latest 中运行

最新的镜像为: https://hub.docker.com/r/gitea/runner-images, slim: 未安装python,git似乎也没有

如果要添加, 需要修改上面生成的config.yaml

可以手动下载 对应的镜像, 防止 action 运行时下载失败

docker pull gitea/runner-images:ubuntu-latest-slim # 只有60M
docker pull gitea/runner-images:ubuntu-latest # 400多M

快速使用

  • 储库的设置页面, 启用action, 更新仓库设置
  • 新建.gitea/workflows/文件夹, 新增demo.yaml

这是官方给的案例, 实际需要修改

name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on: [push]

jobs:
  Explore-Gitea-Actions:
    runs-on: ubuntu-latest
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
      - run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
      - name: Check out repository code
        uses: actions/checkout@v4
      - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
      - name: List files in the repository
        run: |
          ls ${{ gitea.workspace }}
      - run: echo "🍏 This job's status is ${{ job.status }}."
  • 需要设置代理env, 不然 action 下载不了
  • 默认的url前缀是github.com, repository github-server-url需要改成gitea的
name: Gitea Actions Demo
run-name: ${{ gitea.actor }} is testing out Gitea Actions 🚀
on: [push]

jobs:
  Explore-Gitea-Actions:
    runs-on: ubuntu-latest
    env:
      http_proxy: http://172.17.0.1:7890
      https_proxy: http://172.17.0.1:7890
    steps:
      - run: echo "🎉 The job was automatically triggered by a ${{ gitea.event_name }} event."
      - run: echo "🐧 This job is now running on a ${{ runner.os }} server hosted by Gitea!"
      - run: echo "🔎 The name of your branch is ${{ gitea.ref }} and your repository is ${{ gitea.repository }}."
      - name: Check out repository code
        uses: actions/checkout@v4
        with:
          repository: ${{ gitea.repository }}
          github-server-url: 'http://172.17.0.1:3000'
      - run: echo "💡 The ${{ gitea.repository }} repository has been cloned to the runner."
      - run: echo "🖥️ The workflow is now ready to test your code on the runner."
      - name: List files in the repository
        run: |
          ls ${{ gitea.workspace }}
      - run: echo "🍏 This job's status is ${{ job.status }}."

使用代理

设置 env

name: Example Workflow

on: [push]

jobs:
  build:
    runs-on: ubuntu-latest

    env:
      http_proxy: http://your-proxy-server:port
      https_proxy: http://your-proxy-server:port

    steps:
    - name: Checkout repository
      uses: actions/checkout@v4

    - name: Run a multi-line script
      run: echo "This is a multi-line script"

设置cache

修改配置文件

cache:
  enabled: true
  dir: ""
  # 使用步骤 1. 获取的 LAN IP
  host: "172.17.0.1"
  # 使用步骤 2. 使用空闲的端口
  port: 8088

这里的设置了8088, 所以前面端口映射就是8088

默认上下文

在编写步骤文件时,可以直接使用默认的变量来实现想要的功能,语法为 ${{ xxx }},具体有哪些变量可查看Github Actions Context Docs

- run: echo ${{ github.ref }}
- run: echo ${{ github.repository }}
refs/heads/main
seepine/actions-demo

环境变量

环境变量分为默认环境变量和自定义环境变量,语法为 ${{ env.xxx }},具体请查看Github Actions Variables Docs

jobs:
  My-Gitea-Actions:
    runs-on: ubuntu-latest
    # 自定义方式一
    env:
      CUSTOM_KEY: custom env value
    steps:
      # 自定义方式二
      - run: echo CUSTOM_TOKEN=asdf1234 >> $GITHUB_ENV

      - run: echo ${{ env.GITHUB_ACTION_REPOSITORY }}
      - run: echo ${{ env.CUSTOM_KEY }}
      - run: echo ${{ env.CUSTOM_TOKEN }}
seepine/actions-demo
custom env value
asdf1234

Secrets变量

一般用于定义密码等敏感变量,此变量输出时会变成*,但不影响使用,在设置-Secrets中添加Key-Value即可

- run: echo ${{ secrets.CUSTOM_KEY }}

output

许多时候我们会需要输出一些特定内容供他人获取若输出到环境变量我们很难随心定义key因为有可能会与其他步骤的环境变量冲突而覆盖它因此出现了output这个用法最常见的即 Docker metadata

jobs:
  My-Gitea-Actions:
    runs-on: ubuntu-latest
    steps:
      - name: Gen Meta
        id: my_meta # 指定一个id
        run: echo CUSTOM_TOKEN=asdf1234 >> $GITHUB_OUTPUT

      - run: echo ${{ steps.my_meta.outputs.CUSTOM_TOKEN }}

指定runner

jobs:
  My-Gitea-Actions:
    runs-on: linux_runner
    runs-on: windows_runner

指定action的地址

默认是github仓库, 但可能连不上

uses: https://github.com/my_custom/other-action@v2

也可以通过修改gitea的app.ini配置,改为从相应的仓库下载

[actions]
# 1.19 可直接填写任意url如https://github.com
# 1.20起,不填默认从 github填self表示从自建仓库下载
DEFAULT_ACTIONS_URL = self

指定运行容器的镜像

gitea act_runner 默认运行镜像是 node:16-bullseye ,并没有 docker 环境

jobs:  
  My-Gitea-Actions:  
    runs-on: ubuntu-latest  
    # 此容器可使用docker可查看 https://github.com/catthehacker/docker_images  
    container: catthehacker/ubuntu:act-latest  
    steps:  
      - run: docker version

使用缓存

似乎前面的设置cache没效果? 每次都是重新clone action

jobs:
  My-Gitea-Actions:
    runs-on: ubuntu-latest
    container: 
      image: catthehacker/ubuntu:act-latest
      # 方法二,手动指定持久化目录
      volumes:
        - ubuntu_hostedtoolcache:/opt/hostedtoolcache
    env:
      # 方法一,指定容器将工具缓存路径存放到 /toolcache 该目录actRunner会默认持久化它
      RUNNER_TOOL_CACHE: /toolcache
    steps:
      - name: Setup Java
        uses: actions/setup-java@v3
        with:
          distribution: 'zulu'
          java-version: '17'

      - run: java -version

并行任务

runner:
  # 修改此数字4表示同时支持4个任务并行数量最好根据你机器性能和所跑任务负载统一决定并不是越高越好
  capacity: 4