Приложение обновляется само после push в приватный репозиторий
Выкатка Node.js, Python, Go или Docker-приложения из GitHub Actions, GitLab CI, Gitea или Forgejo — без открытого доступа к репозиторию и без своего сервера.
Чтобы выкатить приложение из приватного репозитория, платформе обычно дают доступ к репозиторию. Здесь он не нужен: код уже лежит в раннере CI, и задание само отправляет его нам архивом.
Решение — задание CI, которое на каждый push в main вызывает webshield apps deploy с
токеном, умеющим выкатывать только один проект.
Что получится: каждый push в main собирается и выкатывается; упавшая сборка
отмечает задание CI красным, а работать продолжает прежняя версия.
Понадобится: созданное приложение у нас, репозиторий на GitHub, GitLab,
Gitea или Forgejo. Время: 10 минут.
1. Выпустите токен для CI
Заголовок раздела «1. Выпустите токен для CI»В кабинете: Услуги → Приложения → проект → блок Токен для CI → Выпустить токен. Скопируйте его сразу: полностью он показывается один раз.
Токен умеет только выкатывать приложения этого проекта и смотреть их статус и журнал. Переменные, домены, другие проекты и всё остальное в аккаунте ему недоступны. Отозвать его можно там же.
2. Положите токен в секреты репозитория
Заголовок раздела «2. Положите токен в секреты репозитория»Имя — WS_TOKEN: так его найдёт CLI без дополнительных флагов.
- GitHub, Gitea, Forgejo: Settings → Secrets → Actions → New secret.
- GitLab: Settings → CI/CD → Variables, с галочками Masked и Protected.
3. Опишите приложение рядом с кодом
Заголовок раздела «3. Опишите приложение рядом с кодом»Файл webshield.toml в корне репозитория:
[app]project = "shop"name = "web"Если в репозитории есть то, что не нужно для сборки (node_modules, результаты сборки,
тестовые данные), исключите это в .gitignore или .webshieldignore — архив будет меньше,
выкатка быстрее. Предел — 100 МБ.
4. Добавьте задание выкатки
Заголовок раздела «4. Добавьте задание выкатки»GitHub Actions, Gitea, Forgejo:
# .github/workflows/deploy.yml (в Gitea и Forgejo — .gitea/workflows/ или .forgejo/workflows/)name: Deploy appon: push: branches: [main]
# Несколько push подряд — выкатывается последний.concurrency: group: deploy-app cancel-in-progress: true
jobs: deploy: runs-on: ubuntu-latest env: WS_TOKEN: ${{ secrets.WS_TOKEN }} steps: - uses: actions/checkout@v5 - name: Установка CLI run: curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | sh - name: Выкатка run: ~/.local/bin/webshield apps deployGitLab CI:
deploy: image: debian:stable-slim rules: - if: $CI_COMMIT_BRANCH == "main" interruptible: true script: - apt-get update -qq && apt-get install -yqq curl ca-certificates - curl -fsSL https://raw.githubusercontent.com/webshieldpro/webshield-cli/main/install.sh | sh - ~/.local/bin/webshield apps deployСобирать код в CI не нужно: сборка идёт у нас, по Dockerfile или по стеку проекта.
Проверка
Заголовок раздела «Проверка»Сделайте push. В журнале задания будут строки статус: building, статус: deploying и
выкатка #N работает. Откройте адрес приложения — на нём свежая версия.
Если не работает
Заголовок раздела «Если не работает»| Симптом | Причина и решение |
|---|---|
приложение … не найдено |
Имена в webshield.toml не совпадают с кабинетом, или токен выпущен для другого проекта. |
403 при выкатке |
Токен отозван или выпущен не как токен для CI. Выпустите новый и обновите секрет. |
архив больше 100 МБ |
В архив попали зависимости или результаты сборки — добавьте их в .gitignore или .webshieldignore. |
| Задание упало с журналом сборки | Ошибка в сборке приложения: журнал в выводе задания и в кабинете (Журнал сборки). Прежняя версия при этом работает. |
Another deployment of this service is in progress |
Предыдущая выкатка ещё идёт. concurrency в задании выше снимает эту гонку. |
Что дальше
Заголовок раздела «Что дальше»- Приложения — переменные, домен, журнал, откат.
- Клиент командной строки — все команды CLI.
- API-токены — общие токены с областью «Приложения».