Gitea Actions 自定义 Runner 镜像与自动化部署实战

从零开始打造自托管 CI/CD:Gitea Actions 安装、配置与使用全攻略 这篇详细指南深入讲解如何通过Docker Compose快速安装和配置Gitea与Gitea Actions,详细解析Runner注册Token获取、Secrets管理及常用工作流示例,帮助你快速打造轻量自托管CI/CD流水线,满足企业私有化需求与自动化构建、测试、部署等最佳实践从基础到高级应俱全。 阅读详情

Gitea Actions 自定义 Runner 镜像与自动化部署实战

本文记录了从零开始搭建一套 Gitea Actions 自动化部署流程的完整过程:自定义 act_runner 镜像、配置国内加速源、生成 SSH 密钥、编写 CI/CD workflow,最终实现「push 代码自动构建 + 上传 + 灰度切换」的部署链路。

一、Gitea Runner 使用自定义镜像

1.1 方式一:通过 labels 指定镜像

注册 runner 时指定 label:schema:image 格式:

./act_runner register \
  --instance https://your-gitea-instance \
  --token <your-token> \
  --labels "ubuntu-latest:docker://node:20-bullseye,my-custom:docker://myregistry.com/my-image:latest"

也可以直接编辑 .runner 文件:

{
  "labels": [
    "ubuntu-latest:docker://node:20-bullseye",
    "custom-runner:docker://myregistry.com/my-custom-image:v1.0"
  ]
}

1.2 方式二:修改 config.yaml 全局配置

container:
  network: ""
  privileged: false
  options:
  workdir_parent:
  valid_volumes: []
  docker_host: ""
  force_pull: false   # 使用本地已构建的镜像时必须设为 false,否则会去远程拉取导致失败

runner:
  labels:
    - "my-custom:docker://mynode/runner"

关键点:如果镜像只存在于本机(没有推送到任何仓库),一定要把 force_pull 设为 false;如果 runner 是多机部署,则必须把镜像推送到私有仓库,不能依赖"本地"这个概念。

workflow 中通过 runs-on 引用 label(不是镜像名):

jobs:
  build:
    runs-on: my-custom

二、自定义镜像:Node + pnpm + rsync + ssh

2.1 Dockerfile

# 基础镜像:Node 20,Debian bullseye-slim 体积较小
FROM docker.1ms.run/library/node:20-bookworm-slim

# 将 apt 源替换为阿里云镜像
# 兼容两种格式:
#   1. 传统格式 /etc/apt/sources.list(Debian 11 及更早)
#   2. 新版 deb822 格式 /etc/apt/sources.list.d/debian.sources(Debian 12+ 部分镜像已切换)
# 文件不存在时跳过,避免 sed 因找不到文件而报错中断构建
RUN set -eux; \
    if [ -f /etc/apt/sources.list ]; then \
        sed -i \
            -e 's|deb.debian.org|mirrors.aliyun.com|g' \
            -e 's|security.debian.org|mirrors.aliyun.com/debian-security|g' \
            /etc/apt/sources.list; \
    fi; \
    if [ -f /etc/apt/sources.list.d/debian.sources ]; then \
        sed -i \
            -e 's|deb.debian.org|mirrors.aliyun.com|g' \
            -e 's|security.debian.org|mirrors.aliyun.com/debian-security|g' \
            /etc/apt/sources.list.d/debian.sources; \
    fi

# 安装 rsync、openssh-client(rsync 走 ssh 传输需要)、ca-certificates(避免 https 证书报错)
RUN apt-get update \
    && apt-get install -y --no-install-recommends \
        rsync \
        openssh-client \
        ca-certificates \
        git \
    && rm -rf /var/lib/apt/lists/*

# 安装指定版本 pnpm(通过 corepack,避免全局 npm install 带来的版本漂移)
RUN corepack enable \
    && corepack prepare pnpm@10 --activate

# 配置 pnpm 使用国内镜像源(淘宝 npmmirror)
RUN pnpm config set registry https://registry.npmmirror.com

# 二进制依赖(node-sass / sharp 等)一并配置镜像源,避免下载失败
RUN pnpm config set disturl https://npmmirror.com/mirrors/node \
    && pnpm config set sass_binary_site https://npmmirror.com/mirrors/node-sass \
    && pnpm config set sharp_binary_host https://npmmirror.com/mirrors/sharp \
    && pnpm config set sharp_libvips_binary_host https://npmmirror.com/mirrors/sharp-libvips

WORKDIR /workspace

# 验证工具是否安装成功
RUN node -v && pnpm -v && rsync --version | head -n 1 && ssh -V

2.2 构建与验证

docker build -t mynode/runner .

# BuildKit 默认不打印 RUN 命令的标准输出,验证工具版本要单独跑一次容器
docker run --rm mynode/runner sh -c "node -v && pnpm -v && rsync --version | head -n 1 && ssh -V"

2.3 踩坑记录:sed: can't read /etc/apt/sources.list

原因:较新的基础镜像标签(如 lts-slim)实际拉到的是 Debian 12(bookworm),apt 源配置已迁移到 deb822 格式的 /etc/apt/sources.list.d/debian.sources,直接 sed 一个不存在的旧路径文件会导致构建失败。解决方式是判断文件是否存在,两种路径都做兼容处理(见上方 Dockerfile)。

三、Docker 镜像加速配置

3.1 宿主机全局配置(daemon.json)

sudo tee /etc/docker/daemon.json <<'EOF'
{
  "registry-mirrors": [
    "https://docker.1ms.run",
    "https://docker.m.daocloud.io"
  ]
}
EOF

sudo systemctl daemon-reload
sudo systemctl restart docker

3.2 挂载 docker.sock 场景(DooD)会自动继承

如果 act_runner 是通过挂载宿主机 /var/run/docker.sock 的方式使用 Docker(最常见的部署方式),容器内的 docker 命令只是客户端,实际执行者是宿主机的 dockerd,因此会自动使用宿主机配置的加速源,无需额外配置。

只有当容器内运行的是独立的 dockerd(真正的 DinD,如 docker:dind 镜像)时,才需要单独给这个容器配置加速源。

判断方法:

docker info | grep "Server Version"

若容器内外版本号一致,说明是 DooD,直接吃宿主机配置。

3.3 docker build 单独指定镜像源

不依赖宿主机全局配置,直接在 Dockerfile 里写死镜像源地址最稳妥:

FROM docker.1ms.run/library/node:20-bookworm-slim

规则:docker.io/库名/镜像名 → 镜像源地址/库名/镜像名,官方镜像(无用户名前缀)要带上 library 命名空间。

四、生成 SSH 密钥并配置服务器

4.1 生成密钥对

ssh-keygen -t ed25519 -C "gitea-deploy" -f ./gitea_deploy_key -N ""

4.2 用 ssh-copy-id 推送公钥到服务器

ssh-copy-id -i gitea_deploy_key.pub zoutao@192.168.1.2

比手动 cat | ssh ... >> authorized_keys 更省心,会自动处理目录权限、去重等细节。

4.3 踩坑记录:家目录不存在

Could not chdir to home directory /home/zoutao: No such file or directory
mkdir: cannot create directory ‘.ssh’: Permission denied

原因:账号存在但对应的家目录没有被创建(多半是 useradd 时漏加 -m 参数)。解决:

# 方式一:手动补建
sudo mkdir -p /home/zoutao
sudo chown zoutao:zoutao /home/zoutao
sudo chmod 755 /home/zoutao

# 方式二:重新指定并自动创建
sudo usermod -d /home/zoutao -m zoutao

补建后重新执行 ssh-copy-id 即可成功。

4.4 验证免密登录

ssh -i gitea_deploy_key zoutao@192.168.1.2 "echo ok"

4.5 配置 Gitea Secrets

在仓库 Settings → Actions → Secrets 中添加:

Secret 名称说明
REMOTE_HOST服务器地址
REMOTE_USER登录用户名
REMOTE_SSH_KEY私钥完整内容(cat gitea_deploy_key 的输出)
REMOTE_UPLOAD远程部署根目录,如 /data/www/myapp

五、完整部署 Workflow

采用「按 commit sha 建版本目录 + current 软链接切换 + 自动清理旧版本」的发布策略,方便回滚。

name: Deploy Vue Project

on:
  push:
    paths-ignore:
      - .github/**
      - .commitlintrc.cjs
      - .drone.yml
      - .editorconfig
      - .gitignore
      - .markdownlint.json
      - .prettierignore
      - .prettierrc.cjs
  workflow_dispatch:

jobs:
  build:
    runs-on: my-custom   # 对应 act_runner labels 中定义的 label 名称,不是镜像名
    steps:
      - name: Checkout
        uses: https://gitee.com/actions-mirror/checkout@v4
        with:
          fetch-depth: 0
          # submodules: true   # 如需 Git 子模块,取消注释

      - name: Install dependencies
        run: pnpm install

      - name: Build artifact
        id: build
        env:
          NODE_OPTIONS: --max_old_space_size=2048
        run: |-
          pnpm run build

      - name: 配置 SSH 密钥
        run: |
          mkdir -p ~/.ssh
          echo "${{ secrets.REMOTE_SSH_KEY }}" > ~/.ssh/id_ed25519
          chmod 600 ~/.ssh/id_ed25519
          ssh-keyscan -H "${{ secrets.REMOTE_HOST }}" >> ~/.ssh/known_hosts

      - name: 创建远程发布目录
        run: |
          ssh -i ~/.ssh/id_ed25519 \
            "${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}" \
            "mkdir -p '${{ secrets.REMOTE_UPLOAD }}/releases/${{ gitea.sha }}'"

      - name: 上传 dist 到远程发布目录
        run: |
          rsync -avz --delete \
            -e "ssh -i ~/.ssh/id_ed25519" \
            dist/ \
            "${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}:${{ secrets.REMOTE_UPLOAD }}/releases/${{ gitea.sha }}/"

      - name: 切换软链接并清理旧版本
        run: |
          ssh -i ~/.ssh/id_ed25519 \
            "${{ secrets.REMOTE_USER }}@${{ secrets.REMOTE_HOST }}" bash -s <<'EOF'
          set -euo pipefail

          BASE="${{ secrets.REMOTE_UPLOAD }}"
          TARGET_LINK="$BASE/current"
          NEW_RELEASE_REL="releases/${{ gitea.sha }}"
          NEW_RELEASE_ABS="$BASE/$NEW_RELEASE_REL"
          KEEP=5

          # 1. 校验新版本目录存在,避免创建断链
          if [ ! -d "$NEW_RELEASE_ABS" ]; then
              echo "ERROR: release dir not found: $NEW_RELEASE_ABS" >&2
              exit 1
          fi

          # 2. 若 current 是真目录(历史遗留),先删除
          if [ -d "$TARGET_LINK" ] && [ ! -L "$TARGET_LINK" ]; then
              echo "Removing existing physical directory: $TARGET_LINK"
              rm -rf -- "$TARGET_LINK"
          fi

          # 3. 原子切换软链接(相对路径,Docker 挂载后依然可解析,避免 nginx 500)
          cd "$BASE"
          ln -snf "$NEW_RELEASE_REL" "current.tmp"
          mv -T "current.tmp" "current"
          echo "Switched: $TARGET_LINK -> $(readlink "$TARGET_LINK")"

          # 4. 清理旧版本:保留最新 KEEP 个,且保护 current 指向的目录
          cd "$BASE/releases"
          CURRENT_DIR="$(basename "$(readlink -f "$TARGET_LINK")")"

          find . -maxdepth 1 -mindepth 1 -type d -printf '%T@ %p\n' \
            | sort -rn \
            | tail -n +$((KEEP + 1)) \
            | awk '{print $2}' \
            | while read -r d; do
                name="$(basename "$d")"
                if [ "$name" = "$CURRENT_DIR" ]; then
                    echo "Skip current: $name"
                    continue
                fi
                echo "Removing old release: $name"
                rm -rf -- "$d"
              done

          echo "Done."
          EOF

5.1 踩坑记录:软链接必须使用相对路径

若 nginx 是通过 Docker 挂载宿主机目录提供静态文件服务,current 软链接如果指向绝对路径(如 /data/www/myapp/releases/xxx),容器内部并不存在这个路径结构,会导致 nginx 返回 500。解决方式是让软链接指向相对路径(releases/xxx),只要 current 和 releases 目录始终在同一个父目录下、一起被挂载进容器,相对关系在容器内依然成立。

对应的 nginx 挂载配置:

services:
  nginx:
    image: nginx:alpine
    volumes:
      - /data/www/myapp:/usr/share/nginx/html
    ports:
      - "80:80"

六、Gitea Actions 私有仓库 checkout 说明

  • Gitea Actions 会自动生成短期 GITEA_TOKEN,checkout action 默认用它通过 HTTPS 拉取当前 workflow 所在的私有仓库,无需额外配置。
  • 如果需要拉取同组织下另一个私有仓库,需要显式传入具备权限的 Personal Access Token:
- uses: https://gitee.com/actions-mirror/checkout@v4
  with:
    repository: your-org/another-private-repo
    token: ${{ secrets.PAT_FOR_OTHER_REPO }}
  • 私有子模块、Git LFS 场景可能存在认证兼容性问题,需要额外处理。
  • 自定义 runner 镜像里必须安装 git,否则 checkout 步骤可能失败。

七、总结

整套流程可以概括为:

  1. 构建自定义 runner 镜像:Node + pnpm(走 npmmirror)+ rsync + ssh 客户端 + git,apt 源换成阿里云加速。
  2. 配置 Docker 拉镜像加速:宿主机 daemon.json 或 Dockerfile 里直接写镜像源代理地址。
  3. 注册镜像给 act_runner:通过 .runner 或 config.yaml 的 labels 绑定,注意本地镜像需要 force_pull: false。
  4. 配置 SSH 免密登录:生成密钥对、ssh-copy-id 推送公钥、私钥存入 Gitea Secrets。
  5. 编写 CI/CD workflow:checkout → 安装依赖 → 构建 → 建远程目录 → rsync 上传 → 切换软链接并清理旧版本。
  6. 注意 Docker 挂载场景下的相对路径软链接,避免 nginx 500。

至此,一次 git push 即可完成从代码构建到远程灰度发布的完整自动化链路。
\

Gitea Actions Runner 部署与嵌入式 CI/CD 实战 本文详细介绍了Gitea Actions Runner在嵌入式开发中的部署与CI/CD实战应用。通过自托管Runner实现自动化工作流,解决嵌入式开发中工具链复杂、硬件依赖等痛点,提升团队效率30%以上。文章包含Windows环境部署步骤、工作流设计技巧及常见问题解决方案,特别适合需要频繁编译固件的单片机开发场景。 阅读详情

相关推荐

Gitea Actions Runner:私有化CI/CD的嵌入式开发实战

本文详细介绍了如何在嵌入式开发中利用Gitea Actions Runner搭建私有化CI/CD流水线。通过部署自托管Runner并编写自动化工作流,可实现代码提交后自动编译、测试与固件打包,有效解决环境差异问题,提升团队协作与发布效率,保障代码安全。

weixin_28309571的博客 374

Gitea Actions接入Apple硬件:从Runner部署到iOS构建实战

持续集成(CI/CD)是现代软件工程的基础设施,自托管方案能有效保护代码隐私并降低第三方依赖。Gitea作为轻量级代码托管平台,从1.19版本起内置Actions功能,以兼容GitHub Actions的工作流语法,让团队可以自主搭建完整的构建流水线。然而,当任务涉及Apple平台产物时,Linux服务器无法直接编译iOS或macOS应用,必须将运行器接入真实macOS硬件。act_runner作为官方执行器,通过注册token与Gitea服务端建立连接,并利用标签匹配机制将工作流调度到对应Apple设备。

weixin_30920597的博客 384

Gitea Actions Runner配置避坑指南:从注册失败到网络问题的完整解决方案

本文详细解析了Gitea Actions Runner在配置过程中常见的注册失败、网络问题及稳定性挑战,提供了从令牌验证到网络优化的全链路解决方案。针对CI/CD自动化工作流中的典型故障场景,给出实战验证的配置模板和排错技巧,帮助开发者高效搭建稳定的私有化Runner环境。

weixin_30374009的博客 482

Gitea Actions 实战:从提交到部署的自动化流水线

周五 17:30,你敲完最后一条构建命令,准备把新版本推到生产机。测试?"刚才本地跑过了。" 结果线上缺了个迁移步骤,直接回滚。这类事故的根源都一样:构建、测试、部署散落在每个人的终端里,没人保证它们被完整执行过。 这篇文章解决的就是这个问题:用 Gitea 内置的 Gitea Actions(持续集成/持续部署能力),把"构建 → 测试 → 部署"固化成一条提交代码即自动执行的流水线。读完后,

gitblog_00009的博客 398

自托管 CI/CD 实战:Gitea Actions 的私有化部署与高效配置指南

本文详细介绍了如何利用Gitea Actions实现自托管CI/CD解决方案的私有化部署与高效配置。从环境准备、Docker Compose部署到工作流编写和高级优化,全面解析了Gitea Actions在资源占用低、配置简单和深度集成代码仓库等方面的核心优势,特别适合注重数据隐私和安全的企业或团队。

weixin_29219539的博客 251

Gitea Action 实战:从零搭建自动化工作流

本文详细介绍了如何从零开始使用Gitea Action搭建自动化工作流,包括环境准备、Runner部署与注册、工作流编写及进阶应用场景。Gitea Action作为轻量级自托管CI/CD解决方案,特别适合中小型项目,支持高效自动化测试和部署,显著提升开发效率。

weixin_30879833的博客 379

如何搭建 Gitea Actions 自动化流水线

周三晚上十点,热修上线,你手动跑测试、打 tag、把包传到服务器——中间漏掉一条迁移命令,生产库直接报错。这类事故很少是因为某一步多难,而是步骤太多、全靠人记忆。把测试、构建、发布交给 Gitea Actions 这条自动化流水线,持续集成就从口号变成了仓库里的一个 YAML 文件,每次 push 后它自己把该干的活干完。 Gitea Actions 运行列表页截图 ## 🚀 触发与编排:一

gitblog_00830的博客 426

Apple硬件上运行Gitea Actions:从架构适配到生产化配置

在持续集成与持续交付(CI/CD)实践中,自托管Git服务与轻量级自动化流水线越来越受中小团队青睐。Gitea Actions作为Gitea原生集成的CI/CD引擎,以接近GitHub Actions的语法和低成本部署优势,成为内网代码托管与自动化构建的有力选项。然而,当执行环境切换到Apple硬件时,架构兼容性、容器运行时与runner管理等问题往往成为落地难点。Apple Silicon的ARM64架构使许多现有Docker镜像面临exec format error,Docker Desktop在mac

weixin_34088583的博客 311

Gitea Actions 快速上手:从零搭建自动化测试与构建流水线

周五晚上你推完最后一个提交,周五早上就想点"发布"。点完才发现测试根本没跑过,构建产物还是三天前的旧包。这类事,靠记性解决不了,只能交给流水线。Gitea Actions 内置在 Gitea 里,用一份 YAML 就能做到"代码一推,测试、构建、部署自动跑"。这篇带你从一条测试流水线开始,边做边讲清楚背后的机制,最后到排障。 ## 三步跑通第一条自动化测试 准备工作只有两件:Gitea 开没开

gitblog_01183的博客 841

多智能体强化学习论文——SEAC(NIPS 2020)

存在的问题&研究动机&研究思路 在稀疏奖励的环境下,多智能体的exploration存在效率不足等问题。 在IAC的基础上尝试加入重要性采样,使得每次更新智能体iii的参数时,不再仅仅使用智能体iii的数据,而是使用所有智能体的数据进行智能体iii数据的更新。 对于原始的IAC算法是on-policy的,而SEAC则是off-poligy的。 创新点 在每个智能体iii的actoriactor_iactori​和criticicritic_icritici​的更新过程中,都加入了重要性

我的AI笔记 1206

【RTOS】 Vxworks 653 第一章 —— 初识 vx653 3.x

。。不是很重要,自己搜吧鲁棒分区是一种确保共享计算资源中独立运行功能实现​​时空隔离​​的机制,其目标是为集成模块中的混合临界性应用提供与联邦式部署(federated implementation)同等级别的功能隔离保障。具体表现为:​​多关键性共存​​:支持不同安全等级应用(如飞控系统A级与娱乐系统D级)在同一模块中协同运行。​​抗干扰能力​​:防止未授权或意外的时空干扰(如内存越界、时间窗口冲突),确保应用间互不影响。​​。

qq_38183694的博客 1279

windows & linux操作系统实现 Gitea Actions

windows操作系统实现软件构建打包的actions工作流;linux操作系统使用示例ymal将整个流程跑通

m0_66376607的博客 3189

手把手教你用GD32F407VET6的EXMC驱动外部SRAM,搞定大内存需求

本文详细介绍了如何使用GD32F407VET6的EXMC外设驱动外部SRAM,解决嵌入式开发中的大内存需求问题。通过硬件连接方案、EXMC时序配置与初始化步骤,以及软件集成与内存管理技巧,帮助开发者快速实现内存扩展。特别适合需要处理图形显示缓冲、音频处理等大内存场景的GD32F407开发者。

weixin_30752699的博客 345

Gitea 持续集成实战:5 分钟搭好自动化测试与部署流水线

凌晨三点线上炸了,回滚折腾了四十分钟——上次发布的构建产物躺在某位工程师的本地目录里,没人记得它出自哪个分支,Docker 镜像 tag 也早被新构建覆盖了。复盘会开完,结论和上次一样:构建、测试、发布这三件事,得从人肉变成自动化。 这就是持续集成要解决的问题,而 Gitea Actions 是 Gitea 内置的 CI/CD 能力:把一份 YAML 放进仓库,push、PR、打 tag 时就会

gitblog_00190的博客 803

Cadence OrCAD常见引脚错误排查指南:从原理图到封装的完整解决方案

本文详细解析Cadence OrCAD设计中常见的引脚错误问题,提供从原理图到封装的系统化解决方案。涵盖错误诊断、元件库修复、封装管理及自动化处理技巧,帮助工程师高效解决ORCAP-36022等典型错误,确保设计流程顺畅。

weixin_29294975的博客 255

KUKA 虚拟调试实战——打通Simpro4.1与OfficeLite8.6的通信与实时控制链路

本文详细介绍了KUKA虚拟调试实战,重点解析如何打通Simpro4.1与OfficeLite8.6的通信与实时控制链路。通过环境搭建、权限配置、机器人型号匹配等关键步骤,帮助工程师高效完成机器人轨迹规划和PLC联锁逻辑验证,大幅降低真机调试风险。文章还提供了典型报错解决方案和实时控制优化技巧,适用于工业机器人仿真与培训场景。

weixin_30907935的博客 444

终极Gitea Actions指南:三步构建高效CI/CD流水线

Gitea作为一款轻量级自托管Git服务,其内置的Actions功能为开发团队提供了完整的持续集成与持续部署解决方案。通过简单的YAML配置,你可以实现从代码提交到自动化测试、构建和部署的全流程自动化。本文将深入解析Gitea Actions的核心概念,并提供实用的三步配置流程,帮助你快速搭建高效的CI/CD流水线。 ## 概念解析:理解Gitea Actions的核心组件 Gitea Act

gitblog_00059的博客 640

STM32 IAP跳转后APP卡死?别慌,手把手教你修复HAL_RCC_OscConfig时钟配置冲突

本文深入分析了STM32 IAP跳转后APP在HAL_RCC_OscConfig函数中卡死的问题,揭示了PLL时钟配置冲突的根本原因。通过详细的代码示例和分步解决方案,指导开发者正确处理STM32F1/F4系列的时钟系统二次初始化问题,确保IAP+APP架构的稳定运行。

weixin_28685287的博客 364

在Mac上自建Gitea Actions Runner:从安装到实战

在持续集成(CI/CD)领域,自托管Git服务常被用于实现自动化构建与部署。Gitea作为轻量级的开源Git服务,从1.19版本起内置了Actions功能,兼容GitHub Actions的工作流语法,让团队可以灵活搭建私有CI/CD流水线。当任务需要在Apple硬件上执行——如iOS/macOS应用编译、Apple Silicon架构验证或Xcode构建时,自建Runner成为更可控、更低成本的选择。本文将围绕Gitea Actions的核心概念,讲解如何在Mac mini、MacBook或黑苹果主机上部

353

DNA pull-down技术避坑指南:从探针设计到质谱验证的完整实验方案

本文提供了一份详尽的DNA pull-down技术实战避坑指南,涵盖从探针设计、生物素标记、磁珠选择与预处理,到结合洗脱优化及下游质谱验证或Western Blot验证的全流程。重点解析了如何通过精细操作降低非特异性结合、提高实验特异性与重复性,并对比了质谱与WB两种验证路径的适用场景,旨在帮助研究者构建稳健可靠的DNA-蛋白质互作研究体系。

weixin_29274337的博客 493

网络工程师面试题汇总(二)

网络把主机连接起来,而互连网(internet)是把多种不同的网络连接起来,因此互连网是网络的网络。而互联网(Internet)是全球范围的互连网。因为网络层是整个互联网的核心,因此应当让网络层尽可能简单。网络层向上只提供简单灵活的、无连接的、尽最大努力交互的数据报服务。使用 IP 协议,可以把异构的物理网络连接起来,使得在网络层看起来好像是一个统一的网络。地址解析协议 ARP(Address Resolution Protocol)

悦分享 184

Gitea Actions实战:在Apple硬件上跑通iOS自动化构建

持续集成(CI)是现代软件工程中提升交付效率的关键环节,然而iOS应用由于编译和签名强依赖Apple硬件,使得很多团队在搭建自动化构建时遇到难题。托管式CI服务虽然便捷,但存在代码托管在外部、按分钟计费等限制;传统自建CI方案又往往配置繁重。Gitea Actions作为轻量级自托管CI系统,采用与GitHub Actions兼容的YAML语法,通过act_runner将Mac接入为CI执行节点,即可在Apple硬件上直接运行Xcode构建、打包和签名任务。其核心原理是使用label标签实现任务分发,支持宿

weixin_33847182的博客 346

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

Gitea持续集成实战:3步跑通Gitea Actions自动化流水线

如果你还在靠手动跑测试、手动打包来发版,Gitea持续集成这套东西值得花二十分钟搭起来。Gitea Actions(Gitea 内置的 CI/CD 引擎)能让你把"提交代码 → 自动测试 → 自动构建 → 自动部署"串成一条流水线,全程不用碰服务器。下面是 Gitea Actions 从启用、装 Runner 到写第一个 YAML 的完整配置流程,照着做就能落地。 ## 手动发版翻车之后 先说

gitblog_00337的博客 272

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

Gitea 自动跑测试:一台 Runner 加一个 YAML,把测试交给流水线

以前合个代码,你得自己敲一遍 `go test`,等上几分钟,还得盯着输出。要是忘了跑,问题就混进了主干。Gitea 自带的 Actions 就是为这个场景准备的 CI:在仓库里放一个 YAML 文件,再挂一台会干活的 Runner,之后的每次推送都由流水线自动完成构建、测试和打包。这篇文章带你走通从"什么都没有"到"测试自己跑"的全过程,再顺带拆几个常见翻车点。 ## 🔧 先把 Runner

gitblog_00414的博客 626

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

在Apple硬件上跑Gitea Actions:用Mac搭建自托管CI/CD

CI/CD(持续集成/持续部署)是现代软件工程的核心实践,通过自动化构建、测试与部署提升交付效率。自托管CI系统让团队掌控代码与数据,而Gitea Actions提供了与GitHub Actions高度兼容的工作流语法,降低了迁移成本。借助act_runner,开发者可以将闲置的Mac mini、MacBook等Apple硬件注册为私有Runner,在Apple Silicon上原生执行iOS/macOS编译、xcodebuild或跨架构测试任务。这套方案无需依赖第三方云CI,既能利用本地硬件性能,又保护代

weixin_34354945的博客 358

Apple芯片Mac上部署Gitea Actions:从零到完整CI/CD

自托管Git服务与CI/CD流水线是现代开发流程的重要基础设施。Gitea作为轻量级开源Git服务,内置Actions引擎,兼容GitHub Actions语法,无需额外搭建Jenkins或Kubernetes即可实现自动化构建、测试与发布。在Apple芯片Mac上,Gitea官方提供darwin-arm64原生二进制,配合act_runner能直接利用macOS宿主环境执行任务,避免Rosetta转译带来的性能损耗。通过配置容器模式或宿主机直跑模式,团队可以在本地高效运行iOS编译、Xcode脚本等依赖m

weixin_33901926的博客 321
上一篇: GD32F470 RTOS 移植
下一篇: DeepSeek V4.1 Flash 批量调用实战指南
zoutao98
博客等级 码龄9年 9粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值