おっしゃる通り、説明が不十分でした。整理させてください。

/workspace はコンテナ内のパスです。
docker-compose.yml
 の - .:/workspace によって、サーバーのホスト上の ~/windmill/(リポジトリルート)がコンテナ内の /workspace にマウントされています。
a.sh
 はWindmillのWorkerコンテナ内で実行されるので、スクリプト内で使う /workspace はコンテナ内のパスとして正しいです。

ただし、問題は
wmill.yaml
 がリポジトリルートではなく workflows/ サブディレクトリにある ことです。コンテナ内で言うと /workspace/workflows/ に
wmill.yaml
 があるので、スクリプトの cd /workspace を cd /workspace/workflows に変更する必要があります。

修正します:

Analyzed
a.sh#L1-63
なるほど、ポイントは以下の通りです:

cd /workspace → コンテナ内ではリポジトリルートです。しかし
wmill.yaml
 はここにはなく、workflows/ の中にあります。
wmill sync pull は
wmill.yaml
 がある場所で実行しなければ動きません。
git 操作(add, commit, push)はリポジトリルート(/workspace)で行う必要があります。
つまり、wmill sync pull は /workspace/workflows で、git 操作は /workspace で行う、という二段構えが必要です。修正します:

Edited
a.sh
+9
-5
修正しました。最終的なスクリプトの流れを確認します:

Analyzed
a.sh#L1-67
修正後のスクリプトは以下の流れになっています:

cd /workspace/workflows →
wmill.yaml
 がある場所で wmill sync pull を実行(Windmill DB → ファイルに書き出し)
cd /workspace → Gitリポジトリルートに戻って git add / commit / push(ファイル → Gitea)
ここで重要な補足:

/workspace はサーバーのホスト上のパスではなく、コンテナ内のパスです。
docker-compose.yml
 の - .:/workspace により、ホスト上の ~/windmill/(docker-composeを実行した場所)がコンテナ内の /workspace にマウントされます。
つまり、コンテナ内の /workspace/workflows/ = ホスト上の ~/windmill/workflows/ です。
a.sh
 はWindmillのWorkerコンテナ内で実行されるので、コンテナ内パス(/workspace)を使うのが正しいです。
この変更をGiteaにプッシュしますか?プッシュ後、サーバー側で git pull して再度お試しください。
This commit is contained in:
Akira
2026-02-19 15:25:08 +09:00
parent f8e9c95403
commit 86c0180c3f
2 changed files with 15 additions and 6 deletions

View File

@@ -47,7 +47,9 @@ docker-compose up -d
Windmill上で「登録されたワークフローをGitに保存する」機能を有効にする手順です。
### 4-1. ワークフロー定義の取り込み(初回のみ)
サーバー上のリポジトリにあるワークフロー定義を、Windmillのデータベースに取り込みます。
**重要**: リポジトリ構成上、`wmill.yaml``workflows` ディレクトリ内にあります。
Windmillコンテナはデフォルトでルートの `/workspace` を見ていますが、実際のデータは `/workspace/workflows` にあるため、同期時にパスを指定する必要があります。
```bash
# Windmillサーバーコンテナに入り、wmillコマンドを実行
@@ -55,6 +57,9 @@ docker exec -it windmill_server /bin/bash
# コンテナ内で実行
export WM_TOKEN="<ステップ5で取得するトークン>" # まだ無ければGUIで作成してから
# 初回同期workflowsディレクトリを指定して同期
cd /workspace/workflows
wmill sync push --workspace admins --deploy --yes
exit
```

View File

@@ -9,8 +9,10 @@ NC='\033[0m' # No Color
echo -e "${GREEN}=== Windmill Workflow Git Sync ===${NC}"
# 作業ディレクトリ(リポジトリルート)
cd /workspace
# リポジトリルート(コンテナ内: docker-compose.ymlの .:/workspace マウント)
REPO_ROOT="/workspace"
# wmill.yamlがあるディレクトリWindmill CLIはここで実行する
WMILL_DIR="${REPO_ROOT}/workflows"
# Windmill CLIのセットアップ
if ! command -v wmill &> /dev/null; then
@@ -29,15 +31,17 @@ fi
: "${WM_WORKSPACE:=admins}"
# Git設定コンテナ内での一時設定
git config --global --add safe.directory /workspace
git config --global --add safe.directory "$REPO_ROOT"
git config --global user.email "bot@keinafarm.net"
git config --global user.name "Windmill Bot"
# 1. Windmill(DB) -> Local Disk (Git Repo)
# 1. Windmill(DB) -> Local Diskwmill.yamlがあるディレクトリで実行
echo -e "${YELLOW}Pulling from Windmill...${NC}"
cd "$WMILL_DIR"
wmill sync pull --token "$WM_TOKEN" --base-url "$WM_BASE_URL" --workspace "$WM_WORKSPACE" --skip-variables --skip-secrets --skip-resources --yes || exit 1
# 2. Local Disk -> Git Remote (Gitea)
# 2. Local Disk -> Git RemoteGitリポジトリルートに戻ってgit操作
cd "$REPO_ROOT"
if [[ -n $(git status --porcelain) ]]; then
echo -e "${YELLOW}Changes detected, committing to Git...${NC}"