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

322 lines
8.6 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 6-gitea action
[Act Runner | Gitea Documentation](https://docs.gitea.cn/usage/actions/act-runner)
[Gitea Actions 搭建 - Seepine's Blog](https://seepine.com/git/gitea/actions/)
## 安装
### 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
```sh
# 下载
docker pull gitea/act_runner:latest
# 生成配置文件
docker run --entrypoint="" --rm -it gitea/act_runner:latest act_runner generate-config > config.yaml
```
```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` 配置文件
```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 运行时下载失败
```sh
docker pull gitea/runner-images:ubuntu-latest-slim # 只有60M
docker pull gitea/runner-images:ubuntu-latest # 400多M
```
## 快速使用
* 储库的设置页面, 启用action, 更新仓库设置
* 新建`.gitea/workflows/`文件夹, 新增`demo.yaml`
这是官方给的案例, 实际需要修改
```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的
```yaml
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
```yaml
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
修改配置文件
```sh
cache:
enabled: true
dir: ""
# 使用步骤 1. 获取的 LAN IP
host: "172.17.0.1"
# 使用步骤 2. 使用空闲的端口
port: 8088
```
这里的设置了8088, 所以前面端口映射就是8088
## 默认上下文
在编写步骤文件时,可以直接使用默认的变量来实现想要的功能,语法为 `${{ xxx }}`,具体有哪些变量可查看[Github Actions Context Docs](https://docs.github.com/zh/actions/learn-github-actions/contexts#github-context)
```sh
- run: echo ${{ github.ref }}
- run: echo ${{ github.repository }}
```
```sh
refs/heads/main
seepine/actions-demo
```
## 环境变量
环境变量分为默认环境变量和自定义环境变量,语法为 `${{ env.xxx }}`,具体请查看[Github Actions Variables Docs](https://docs.github.com/zh/actions/learn-github-actions/variables#default-environment-variables)
```sh
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 }}
```
```sh
seepine/actions-demo
custom env value
asdf1234
```
## Secrets变量
一般用于定义密码等敏感变量,此变量输出时会变成*,但不影响使用,在设置-Secrets中添加Key-Value即可
```
- run: echo ${{ secrets.CUSTOM_KEY }}
```
## output
许多时候我们会需要输出一些特定内容供他人获取若输出到环境变量我们很难随心定义key因为有可能会与其他步骤的环境变量冲突而覆盖它因此出现了output这个用法最常见的即 [Docker metadata](https://github.com/docker/metadata-action)
```sh
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
```sh
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`配置,改为从相应的仓库下载
```sh
[actions]
# 1.19 可直接填写任意url如https://github.com
# 1.20起,不填默认从 github填self表示从自建仓库下载
DEFAULT_ACTIONS_URL = self
```
## 指定运行容器的镜像
`gitea act_runner` 默认运行镜像是 `node:16-bullseye` ,并没有 docker 环境
```yaml
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
```yaml
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
```
## 并行任务
```yaml
runner:
# 修改此数字4表示同时支持4个任务并行数量最好根据你机器性能和所跑任务负载统一决定并不是越高越好
capacity: 4
```