Skip to main content
Блогқа оралу
VercelGitHub ActionsCI/CDDeploymentMonorepo

Коммит авторы команда мүшесі болмағанда, Vercel-ге CI-дан деплой жасау

Репозиторийді GitHub ұйымына көшірсең, Vercel деплойларыңды үнсіз бөгей бастайды: коммит «команда мүшесімен сәйкестендірілмеді». Міне, мен оның орнына GitHub Actions + Vercel CLI арқылы қалай деплой жасаймын — коммиттерім әлі де өз GitHub-графигіме есептеледі, дашбордта кім push жасағаны көрінеді, әрі әр контрибьюторға бөлек орын (seat) сатып алмаймын.

Жарияланды 2026 ж. 10 тамыз8 мин оқу

Коммиттерім өз үлес графигіме есептелуі үшін landee-ді GitHub ұйымына көшірдім. Келесі push-та-ақ өнім (production) деплой жасауды тоқтатты.

Vercel дашборды тек мынаны жазды — әр push сайын. Бұрынғы нативті Git-интеграция үнсіз бөгетке айналыпты:

Deployment Blocked
The deployment was blocked because the commit could not be
matched to a team member.

Vercel неге деплойды бөгейді

Vercel-дің нативті Git-интеграциясы — webhook арқылы деплой: GitHub push оқиғасын жібереді, Vercel коммит авторын оқиды, оның Vercel командасының мүшесі екенін тексереді, мүше болмаса деплойды бөгейді. Бұл — қауіпсіздік бақылауы: ол кез келген контрибьютордың немесе форк pull request-інің өнімге автоматты шығуын болдырмайды.

Бұл орынды — код жазатын адам ақылы орын иесі болмағанша. Менің GitHub аккаунтым коммиттердің авторы, бірақ ол Vercel командасының мүшесі емес. Сондықтан интеграция үшін әр деплой «мүше емес» болып, әрқайсысы бөгеледі.

Git-интеграция емес, CLI арқылы деплой жаса

Шешім — CLI. vercel deploy коммит авторымен емес, токенмен аутентификацияланады — мүшелік тексерісін мүлде жүргізбейді. Сондықтан нативті Git-интеграцияны ажырат та, оның орнына GitHub Actions-тан деплой жаса: push → workflow жүреді → токенмен vercel deploy → Vercel құрастырып шығарады.

.github/workflows/deploy-production.yml
name: Deploy Production (Vercel CLI)

on:
  push:
    branches: [main]

jobs:
  deploy:
    runs-on: ubuntu-latest
    env:
      VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
      VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
    steps:
      - uses: actions/checkout@v7
      - run: npm install -g vercel@latest
      - run: vercel pull --yes --environment=production --token=${{ secrets.VERCEL_TOKEN }}
      - run: vercel deploy --prod --token=${{ secrets.VERCEL_TOKEN }}

Екі нәрсе мұны жалғыз деплой жолына айналдырады, әрі CLI мен webhook жарыспайды: vercel.json нативті авто-деплойды өшіреді, ал сен Vercel дашбордында Git-репоға Disconnect басасың.

vercel.json
{
  "git": { "deploymentEnabled": false },
  "installCommand": "pnpm install --frozen-lockfile"
}

GitHub үлес графигіңді сақта

Ұйымға көшірудің бүкіл мәні — коммиттердің графигіме есептелуі, сондықтан GitHub-тағы коммит менің авторлығыммен қалуы тиіс. Мұнда бұл солай: CLI-деплой раннердегі жаңа checkout-та жүреді, ал ол жақтан ешнәрсе GitHub-қа қайта push жасалмайды.

Сондықтан өз атымнан коммит жасап, push жасаймын — жасыл шаршылар толады. Деплойды рұқсат ететін токен маған емес, аккаунт иесіне тиесілі — CI-деплойдың мәні дәл осында.

Дашбордта кім push жасағанын көрсет

Жай CLI-деплой Vercel тізімінде жалаңаш хеш болып тұрады — хабарсыз, тармақсыз, авторсыз. Нағыз git тәрізді жол (хабар + тармақ + аватар) шығу үшін Vercel деплойды git-коммит ретінде тануы керек — ал дәл осы тану автор тексерісін қайта іске қосады.

Айла: раннерде HEAD авторын команда мүшесіне ауыстырып жаз да, содан кейін деплой жаса. Бұл amend ешқашан қайта push жасалмайды, сондықтан GitHub-та коммит сенікі болып қалады. Vercel .git-тен мүше-авторды оқиды — деплой танылады әрі бөгелмейді — ал шын push жасаушыны коммит хабарына жазасың, сонда жол кім шығарғанын әлі де көрсетеді.

# In the runner only — this amend is NEVER pushed back, so on GitHub the
# commit stays authored by the real pusher (your contribution graph is intact).
MSG="$(git log -1 --pretty=%s)"
git -c user.name="CI Bot" -c user.email="ci@your-org.dev" \
  commit --amend --author="CI Bot <ci@your-org.dev>" \
  -m "[$GITHUB_ACTOR] $MSG"

# Vercel now reads a team-member author from .git → recognized AND not blocked.
vercel deploy --prod --token="$VERCEL_TOKEN"

Бір сервистік аккаунт — бәрі сол арқылы деплой жасайды

Жалпыла: бір сервистік аккаунт Vercel командасына иелік етіп, деплой-токенді ұстайды. Бәрі өз атынан коммит жасайды; CI авторды сервистік аккаунтқа ауыстырып, оның токенімен деплой жасайды. Дашбордтағы жол [сен] коммит хабарың болып тұрады, ал GitHub нағыз авторлығыңды сақтайды.

Бұл — көп команда ұмтылатын нәрсенің жалықтыратын, әрі адал нұсқасы. Сен дашбордқа қатынасы керек адамдардың орындарын төлейсің — әр контрибьюторға біреуден емес. Бәрінің кодын деплой жасайтын CI-токен — Vercel құжаттаған үлгі; біреудің коды шықты деп қана оған орын сатып алмайсың.

Тісі бар бөлшектер

Маған бір кешімді жеген бірнеше нәрсе — саған жемеуі үшін:

  • Vercel-дегі pnpm. Құрастыру бейнесі packageManager өрісіңе қарамай ескі pnpm-ды бекітуі мүмкін. vercel deploy-ге --build-env ENABLE_EXPERIMENTAL_COREPACK=1 бер — сонда corepack сен нақты бекіткен нұсқаны қолданады.
  • Verified коммиттер. Қолтаңба — бөлек мәселе: SSH коммит қолтаңбасын баптап, кілтті GitHub-қа тіркесең, сенің (нағыз) коммиттерің жасыл Verified белгісін алады. Раннердегі бір реттік amend-ке қолтаңба керек емес.
  • Оқылатын жегілімдер. Бір үлкен shell-қадамды атаулы қадамдарға бөл (re-author → deploy → summary), сонда Actions интерфейсінен қай кезеңде екені бірден көрінеді.
  • Тесттер. Деплой Vercel-де құрастырады, бірақ тесттеріңді мүлде жүргізбейді — ол үшін бөлек CI-workflow қос, әрі сол арада Dependabot-ты қос.

CLI-деплойды коммитті кім жазғаны емес, токен рұқсат етеді. Бүкіл кілт осында — әрі бұл құжатталған, толыққанды шығару тәсілі.

Шек қайда

Шек жайлы адал болайық, өйткені оны сөзбен айналып өту оңай. Контрибьюторлардың кодын CI-токенмен деплой жасау — заңды әрі солай ойластырылған. Орын ақысынан жалтару үшін жалған аккаунттар жасау — жоқ: бұл көп-аккаунттық, әрі кез келген платформаның ережесіне қайшы.

Не істеп жатырсыңЗаңдыШектен тыс
Контрибьюторлардың кодын CI-токенмен деплой жасау✓ құжатталған
Дашбордты басқаратын адамға бір орын төлеу
Өз атыңнан коммит жасау; сервистік тұлға тек CI-де✓ адал статистика
Орын төлемеу үшін жалған/сервистік аккаунттар жасау✗ көп-аккаунттық
Орынсыз көп адам басқарсын деп бір логинді бөлісу✗ тіркелгі деректерін бөлісу

Қорытынды

  • Vercel-дің нативті Git-интеграциясы коммит авторы команда мүшесі емес деплойларды бөгейді — бұл қауіпсіздік бөгеті, қате емес.
  • Токенмен vercel deploy авторды мүлде тексермейді; нативті интеграцияны ажырат та, CI-дан деплой жаса.
  • Өз атыңнан коммит жаса, раннердегі amend-ті ешқашан push жасама — GitHub графигің бүтін қалады.
  • Раннерде HEAD авторын мүшеге ауыстырсаң, бөгеусіз нағыз дашборд жолы шығады — шын push жасаушыны хабарға жаз.
  • Сен контрибьюторға емес, дашборд орындарына төлейсің: бәрінің кодын деплой жасайтын CI-токен — ойластырылған үлгі.
  • Төлемнен жалтару үшін жалған аккаунт жасау — көп-аккаунттық. Шек нақ осында.

Бұл бөлшектердің ешқайсысы бөтен емес — CLI, токен, раннерден ешқашан шықпайтын git amend. Түйін — «мүше емес» қабырғасы саған тағы бір орын сатып ал деп тұрған жоқ; ол CI дегеніңнің тиісті түрде деплой жаса деп тұр. Webhook-ты ажырат, токенді раннерге бер — әрі кодты жазған адам оның авторлығын өзінде қалдырсын.

Қате байқадыңыз ба?

Осы мақалада қате факт, олқы аударма немесе жалған естілетін нәрсе бар ма? Маған жазыңыз — өз тіліңізде.