docs: add optional Portainer webhook auto-deploy to CI/CD guide

Document the pattern for triggering Portainer stack redeploy
after docker push, with graceful skip when webhook is not configured.
This commit is contained in:
2026-03-25 22:54:28 +03:00
parent 00919c384c
commit 43c84ae515
+31
View File
@@ -556,10 +556,41 @@ CMD ["uvicorn", "your_package.main:app", "--host", "0.0.0.0", "--port", "8080"]
- name: Push
if: steps.docker-login.outcome == 'success'
run: docker push "$REGISTRY" --all-tags
- name: Trigger Portainer redeploy
if: steps.docker-login.outcome == 'success'
continue-on-error: true # Optional — webhook may not be configured
run: |
if [ -n "${{ secrets.PORTAINER_WEBHOOK_URL }}" ]; then
echo "Triggering Portainer redeploy..."
curl -sf -X POST "${{ secrets.PORTAINER_WEBHOOK_URL }}" \
--max-time 30 || echo "::warning::Portainer webhook failed"
else
echo "PORTAINER_WEBHOOK_URL not set — skipping auto-deploy"
fi
```
**Registry URL pattern:** `{gitea-host}/{owner}/{repo}:{tag}`
### Auto-Deploy via Portainer Webhook (Optional)
Portainer can automatically redeploy a stack/service when a new image is pushed.
Each stack has its own unique webhook URL generated in the Portainer UI.
**Setup:**
1. In Portainer, open your stack → **Webhooks** → enable and copy the URL
2. In Gitea, go to repo **Settings → Secrets** → add `PORTAINER_WEBHOOK_URL`
3. The CI step above calls the webhook after `docker push` — Portainer pulls
the new image and recreates the container
**Notes:**
- The webhook URL itself acts as authentication — no extra token needed
- The step uses `continue-on-error: true` so missing webhooks don't fail the build
- Each service/stack gets its own webhook — one secret per repo
- If `PORTAINER_WEBHOOK_URL` is not set, the step is silently skipped
### Docker Network on TrueNAS
If Docker builds fail with `route for the gateway 0.0.0.1 could not be found: network is unreachable`, the Docker address pool is misconfigured. In TrueNAS 25.10+: