mcpField
P
pipeline

pipeline

github.com/dischen87其他09 次安装今天更新
代码仓库

关于 pipeline

pipeline 是用于在 Albatros Pilot 服务器上配置和运行部署工作流的技能,涵盖构建检查、部署、健康检查与故障排查;部署失败时保留旧版网站。

主要功能

  1. 01配置构建与部署工作流
  2. 02部署后执行健康检查
  3. 03手动触发工作流
  4. 04故障诊断与回滚指引
  5. 05验证工作流状态

适用场景

  1. 01配置推送至 main 后自动部署
  2. 02检查部署结果和线上网站
  3. 03排查构建或部署失败

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/dischen87/albatros-skills --skill pipeline

安装后在 Claude Code 中输入/pipeline确认已加载。

详细介绍

Pipeline:带质量检查的流水线

比喻

在工厂里,没人会把每个零件单独搬到卡车上。这里有一条流水线:

  1. 检查站: 制造零件。如果失败,流水线就会停下,什么也不会发出。
  2. 交付: 装上新零件并立即检查:能运行吗?如果不能,就换回旧零件。
  3. 最终检查: 从路上查看网页是否有响应。

在你这里,只要你往港口提交一条记录(技能 git-logbuch),流水线就会启动。流水线上的工人就住在你这里:它运行在你自己的服务器上,只在那里工作。专业术语叫 CI/CD,这条流水线叫 工作流,工人叫 Runner。

如何使用这个比喻: 在你的第一条回复中,先把这个比喻告诉对方,再提问或展示命令,即使对方一上来就想要解决方案也一样。

沟通方式

  • 不要只提问: 如果缺少项目或某项信息,仍要提供具体步骤,或者将文件写成带有标注假设([假设:…])的草稿。先完成这些,再在最后询问缺少的信息。
  • 使用第二人称。运行工作流之前,先和对方逐个检查工作流文件中的每个站点。
  • 流水线不需要对方提供密钥或秘密信息:工人已经住在对方的服务器上。对方的家门钥匙绝不能放进流水线。
  • 如果流水线变红:解决问题,绝不要关闭检查。

流程

1. 现有内容

使用 Light 时没有流水线:每次 Push 后,Albatros 都会直接从 main 发布 seite/ 文件夹,不构建也不检查。仍要解释这个比喻。带质量检查的流水线属于 Pilot(upgrade_link,级别 pilot)。模板中的 deploy.yml 在 Light 下不会运行。切换到 Pilot 时,Albatros 会启用流水线并立即运行一次,让自己的服务器发布网页。任务 flugschule-05-pipeline 属于 Pilot。

使用 Pilot 时: konto_status 会列出服务器名称、港口地址([email protected]:{name}/projekt.git),以及工人是否已准备就绪。不要向对方询问这些信息。Albatros 的模板已经包含 .github/workflows/deploy.yml、compose.yaml 和 Dockerfile:与对方一起阅读,并和下面的核心内容对照。如果这些文件缺失,就创建它们,即使文件夹还是空的也一样;之后再说明还缺少什么(港口中的日志,以及网页内容)。

Web 服务器容器名为 webseite,在服务器上监听 80 端口。Albatros 会将 https://{name}.aufwind.sh 转发到该容器。在全新服务器上,欢迎页面(服务 willkommen)会占用 80 端口。流水线会在首次启动前将其关闭。如果要手动启动,先运行 sudo systemctl disable --now willkommen。

compose.yaml(核心内容):

services:
  webseite:
    container_name: webseite
    build: .
    restart: unless-stopped
    ports:
      - "80:80"
    healthcheck:                         # «läuft» heisst noch nicht «funktioniert»
      test: ["CMD", "wget", "-qO-", "http://127.0.0.1/"]
      interval: 10s
      retries: 6
2. 工作流文件

.github/workflows/deploy.yml(港口会像 GitHub 一样读取这个文件夹):

name: Fliessband
on:
  push:
    branches: [main]
  workflow_dispatch:                    # Knopf «Run workflow» für einen Lauf von Hand

jobs:
  fliessband:
    runs-on: albatros                   # der Arbeiter auf deinem eigenen Server, er macht einen Auftrag nach dem anderen
    defaults:
      run:
        shell: bash
    env:
      SHA: ${{ github.sha }}
      SEITE: https://${{ github.repository_owner }}.aufwind.sh
    steps:
      - name: Bauen und ausliefern, notfalls zurück
        run: |
          set -euo pipefail
          cd ~/projekt                  # hier wohnt deine Seite, der Stand kommt immer aus dem Logbuch
          ALT=$(git rev-parse HEAD)
          git fetch -q origin main && git reset -q --hard "$SHA"
          # Station 1: bauen. Klappt das nicht, bleibt die alte Seite online.
          if ! docker compose build; then
            git reset -q --hard "$ALT"
            echo "Bau fehlgeschlagen, die alte Seite bleibt online" >&2
            exit 1
          fi
          # Station 2: ausliefern, mit dem Gesundheitscheck aus compose.yaml
          sudo systemctl disable --now willkommen 2>/dev/null || true   # Begrüssungsseite gibt Port 80 frei
          if ! docker compose up -d --wait --wait-timeout 120; then
            echo "Neue Version ist nicht gesund, zurück auf $ALT" >&2
            docker compose logs --tail 30 >&2 || true
            git reset -q --hard "$ALT"
            docker compose up -d --build --wait --wait-timeout 120 || true
            exit 1
          fi
          echo "läuft: $SHA"
      - name: Endkontrolle über die öffentliche Adresse
        run: |
          for i in 1 2 3 4 5; do
            code=$(curl -s -o /dev/null -w '%{http_code}' --max-time 10 "$SEITE" || true)
            [ "$code" = 200 ] && exit 0
            sleep 3
          done
          echo "$SEITE antwortet $code statt 200" >&2
          exit 1

逐个站点解释。在服务器上不要手动修改任何内容:服务器上的版本始终来自日志。服务器上的 .env 不受影响(技能 sicherheit)。如果某个步骤确实需要秘密信息,就将其放入港口的保险库(仓库中的“设置”→“Actions”→“Secrets”),并且在工作流中只通过 env: 将其传入命令,绝不要直接在 run 行中使用 ${{ secrets.… }}。

3. 首次运行
  1. 在日志中添加记录并 Push(技能 git-logbuch)。
  2. 在浏览器中查看:https://code.aufwind.sh/{name}/projekt/actions。
  3. 如果显示绿色:在浏览器中打开网页,确认更改已生效。
4. 查看检查流程

让对方故意引入一个会导致构建失败的错误(例如,在 Dockerfile 中拼错内容),然后 Push。流水线会变红,但旧网页仍会保持在线。撤销错误并再次 Push,直到显示绿色。现在对方就知道流水线能保护自己了。

5. 检查任务

使用 mission_pruefen 检查 flugschule-05-pipeline。检查会确认 deploy.yml 最近一次运行在港口是否为绿色、webseite 容器是否正在运行,以及页面是否有响应。

如果传送带显示红色

  • 哪个环节出了问题? 在浏览器中打开「Actions」下的红色运行记录。让对方把最后几行复制到聊天中。在服务器上,你可以自行检查:ssh {name}@aufwind.sh 'cd ~/projekt && git log --oneline -1 && docker compose ps && docker compose logs --tail 30'。一起阅读,并用一句话说出原因。
  • 运行记录一直等待,没有启动: 没有工作者接手。文件中是否准确写着 runs-on: albatros?konto_status 会显示工作者是否就绪。否则使用 coach_fragen。
  • git fetch 出现 Permission denied: 服务器没有权限读取港口。需要由 Albatros 进行配置,因此使用 coach_fragen。
  • 构建显示红色: Dockerfile 或页面中存在错误。旧页面仍会保持在线。
  • 部署显示红色(「不健康」): 容器已启动,但没有响应。运行记录中的 docker compose logs 日志会说明原因。旧版本会重新运行。
  • 最终检查显示红色,其他环节都显示绿色: 页面在服务器上运行正常,但无法通过地址访问。检查容器端口(docker ps),然后使用技能 zurueck-auf-gestern。
  • 绝不要为了让传送带显示绿色而移除检查。

结束消息

你在此步骤中的最后一条消息,开头要用一句关于「带质量检查的传送带」的描述,再次点明核心内容。然后说明:完成了什么、结果在哪里、还有什么待处理,以及下一步是什么。

评论

支持 Markdown