Deploy controller persistently on control host
Controller CI / test (push) Successful in 1s

This commit is contained in:
2026-10-02 13:37:48 +08:00
parent 61863ae676
commit e78a247612
5 changed files with 60 additions and 7 deletions
+7
View File
@@ -22,6 +22,13 @@ jobs:
run: |
python3 -m py_compile controller.py
python3 -m unittest discover -s tests -v
sh -n scripts/install-controller.sh scripts/ces-controller
- name: Deploy verified controller
run: |
sh scripts/install-controller.sh "$GITHUB_SHA"
test "$(cat /opt/ces-controller/current/VERSION)" = "$GITHUB_SHA"
/usr/local/bin/ces-controller --help >/dev/null
- name: Confirm no paid action ran
run: |
+5 -7
View File
@@ -23,17 +23,15 @@ jobs:
env:
AUTODL_API_TOKEN: ${{ secrets.AUTODL_API_TOKEN }}
TRAINING_RUNNER_REGISTRATION_TOKEN: ${{ secrets.TRAINING_RUNNER_REGISTRATION_TOKEN }}
GITEA_JOB_TOKEN: ${{ secrets.GITEA_TOKEN }}
OPERATION: ${{ inputs.operation }}
IMAGE_UUID: ${{ inputs.image_uuid }}
CONFIRM_SPEND: ${{ inputs.confirm_spend }}
steps:
- name: Checkout controller source
- name: Select deployed controller
run: |
git init .
git remote add origin "$GITHUB_SERVER_URL/$GITHUB_REPOSITORY.git"
git -c http.extraHeader="Authorization: token $GITEA_JOB_TOKEN" fetch --depth 1 origin "$GITHUB_SHA"
git checkout --detach FETCH_HEAD
test -x /usr/local/bin/ces-controller
test "$(cat /opt/ces-controller/current/VERSION)" = "$GITHUB_SHA"
echo "controller_version=$GITHUB_SHA"
- name: Validate requested operation
run: |
@@ -44,7 +42,7 @@ jobs:
- name: Manage AutoDL Pro instance
run: |
python3 controller.py "$OPERATION" \
/usr/local/bin/ces-controller "$OPERATION" \
--image-uuid "$IMAGE_UUID" \
--confirm-spend "$CONFIRM_SPEND"
+20
View File
@@ -34,6 +34,26 @@ AutoDL GPU Runner 的 `TRAINING_RUNNER_REGISTRATION_TOKEN`。
Runner online 后,第一次 push 只执行 `Controller CI`,不会创建实例或产生 AutoDL 费用。
## 阿里云长期部署
每次 push 到 `main` 后,`Controller CI` 会先运行测试,再把通过验证的控制器安装到:
```text
/opt/ces-controller/releases/<git-commit>/
```
`/opt/ces-controller/current` 原子指向当前版本,并安装 Terminal 入口
`/usr/local/bin/ces-controller`。管理 workflow 只执行这个长期部署的版本,并拒绝执行与当前
workflow commit 不一致的旧版本。部署目录不保存 AutoDL Token 或 Runner Registration Token;
Secret 仍只在单次 Actions 任务中注入。
通过 SSH 可以检查版本或查看帮助:
```bash
cat /opt/ces-controller/current/VERSION
ces-controller --help
```
## 管理 workflow
从 Actions 手动运行 `Manage AutoDL GPU runner`:
+4
View File
@@ -0,0 +1,4 @@
#!/bin/sh
set -eu
exec python3 /opt/ces-controller/current/controller.py "$@"
+24
View File
@@ -0,0 +1,24 @@
#!/bin/sh
set -eu
if [ "$#" -ne 1 ] || [ -z "$1" ]; then
echo "usage: $0 GIT_COMMIT" >&2
exit 2
fi
commit=$1
root=/opt/ces-controller
release="$root/releases/$commit"
temporary_link="$root/.current.$$"
install -d -m 700 "$root" "$root/releases" "$release"
install -m 700 controller.py "$release/controller.py"
install -m 600 README.md "$release/README.md"
printf '%s\n' "$commit" > "$release/VERSION"
chmod 600 "$release/VERSION"
ln -s "$release" "$temporary_link"
mv -Tf "$temporary_link" "$root/current"
install -m 755 scripts/ces-controller /usr/local/bin/ces-controller
echo "deployed_controller=$commit"