gitea action 的配置实践
- Published on
前言
本文主要是关于gite action的一些使用和配置记录。我的博客改动以后基于gitea action
构建镜像,再使用docker compose
部署新的服务。
一、背景
原本博客使用k3s
和argocd
部署,经历一年的运行后,出现网络崩溃的情况。由于我的技术比较菜,花了一个月才把原本的服务全都部署回去。经过深思熟虑,决定还是使用最简单一点方式进行部署。我决定基于gitea action
构建镜像,在使用docker compose
部署新的服务。
二、使用gitea action步骤
gitea 只是一个仓库,提供构建功能的是另外的容器,叫做gitea runner
。
1.设置runner 配置文件config.yaml
https://docs.gitea.com/zh-cn/usage/actions/act-runner 这个也是在官方文档上有的,当然如果你和我一样使用
docker compose
部署的话,可以参考我的写法。
首先使用act_runner
生成config.yaml(这个如果是用docker的话,要用docker镜像内的生成)。如以下配置。
log:
level: info
runner:
file: .runner
capacity: 1
envs:
A_TEST_ENV_NAME_1: a_test_env_value_1
A_TEST_ENV_NAME_2: a_test_env_value_2
env_file: .env
timeout: 3h
shutdown_timeout: 0s
insecure: false
fetch_timeout: 5s
fetch_interval: 2s
labels:
- "ubuntu-latest:docker://gitea/runner-images:ubuntu-latest"
- "ubuntu-22.04:docker://gitea/runner-images:ubuntu-22.04"
- "ubuntu-20.04:docker://gitea/runner-images:ubuntu-20.04"
# 开启构建镜像的缓存设置
cache:
enabled: true
dir: ""
# 这里很重要 这个对应的是本机ip,比如我的docker所在的本机ip是192.xxx.xxx.xxx
host: "192.xxx.xxx.xxx"
# 本机端口
port: 18088
external_server: ""
container:
network: ""
privileged: false
options:
workdir_parent:
valid_volumes: []
docker_host: ""
force_pull: true
force_rebuild: false
host:
workdir_parent:
2.使用运行gitea-runner
docker-compose.yaml 如下,其中GITEA_RUNNER_REGISTRATION_TOKEN
在目标gitea的管理后台-Actions-Runners
中,只要创建Runner就会分配一个。
services:
runner:
image: gitea/act_runner:nightly
environment:
CONFIG_FILE: /config.yaml
GITEA_INSTANCE_URL: "https://gitea.xxx.cc"
GITEA_RUNNER_REGISTRATION_TOKEN: "token"
GITEA_RUNNER_NAME: "nas-runner"
GITEA_RUNNER_LABELS: "nas-worker-runner"
volumes:
- ./config.yaml:/config.yaml
- /root/app/gitea-runner/act_cache:/root/.cache
- /root/app/gitea-runner/data:/data
- /var/run/docker.sock:/var/run/docker.sock
restart: unless-stopped
ports:
- "18088:8088"
官方例子中其实没有将ports导出,这里加上其实是为了让缓存生效,这里的端口其实就是runner的端口。
# 开启构建镜像的缓存设置
cache:
enabled: true
dir: ""
# 这里很重要 这个对应的是本机ip,比如我的docker所在的本机ip是192.xxx.xxx.xxx
host: "192.xxx.xxx.xxx"
# runner端口
port: 18088
external_server: ""
运行runner以后,如果联通成功,在
管理后台-Actions-Runners
上就能看到运行的runner。
3.设置gitea仓库
首先需要再gitea 仓库中,在设置页上将项目的action开启。
4.git项目配置
新建一个.yaml
为后缀的文件,放在.gitea/workflows/
目录中。 比如我的博客中是build-docker.yaml
。 这里例子的作用是在项目打下tag的时候,会触发构建镜像的逻辑,并获取tag版本,构建对应tag的镜像。
name: Build Docker Image
run-name: ${{ gitea.actor }} build Docker Image
on:
push:
tags:
- '*'
jobs:
Build-Docker-Image:
runs-on: ubuntu-latest
steps:
# 打印触发信息
- name: Print trigger information
run: |
echo "🎉 Triggered by a ${{ gitea.event_name }} event."
echo "🐧 Running on a ${{ runner.os }} server."
echo "🔎 Branch ${{ gitea.ref }}, Repository ${{ gitea.repository }}."
# 检出代码
- name: Check out repository code
uses: actions/checkout@v4
# 设置 Docker 缓存
- name: Set up Docker Buildx
uses: docker/setup-buildx-action@v2
# 我用的docker register,所以不需要登录到docker hub
# - name: Log in to Docker Hub
# uses: docker/login-action@v2
# with:
# username: ${{ secrets.DOCKER_USERNAME }}
# password: ${{ secrets.DOCKER_PASSWORD }}
# 构建 Docker 镜像
- name: Build Docker image
run: |
docker build -t 192.168.54.232:5134/remix-blog:latest .
# 标记 Docker 镜像
- name: Tag Docker image
run: |
docker tag 192.168.54.232:5134/remix-blog:latest 192.168.54.232:5134/remix-blog:${{ gitea.ref_name }}
# 推送 Docker 镜像
- name: Push Docker image
run: |
docker push 192.168.54.232:5134/remix-blog:latest
docker push 192.168.54.232:5134/remix-blog:${{ gitea.ref_name }}
# 清理本地环境
- name: Clean up Docker environment
run: |
docker rmi 192.168.54.232:5134/remix-blog:latest
docker rmi 192.168.54.232:5134/remix-blog:${{ gitea.ref_name }}
按照上面的例子就可以在仓库推送以后触发构建了
注意
runner每次构建都需要拉取ubuntu-latest
,这个镜像还挺大的,由于网络的原因,经常会卡在拉取镜像的部分,所以最好让runner
处在能自由拉取镜像的环境。只要成功一次以后,那么之后的镜像都会从缓存中获取。