Коммит авторы команда мүшесі болмағанда, Vercel-ге CI-дан деплой жасау
Репозиторийді GitHub ұйымына көшірсең, Vercel деплойларыңды үнсіз бөгей бастайды: коммит «команда мүшесімен сәйкестендірілмеді». Міне, мен оның орнына GitHub Actions + Vercel CLI арқылы қалай деплой жасаймын — коммиттерім әлі де өз GitHub-графигіме есептеледі, дашбордта кім push жасағаны көрінеді, әрі әр контрибьюторға бөлек орын (seat) сатып алмаймын.
Коммиттерім өз үлес графигіме есептелуі үшін 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 құрастырып шығарады.
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 басасың.
{
"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-ты ажырат, токенді раннерге бер — әрі кодты жазған адам оның авторлығын өзінде қалдырсын.
Қате байқадыңыз ба?
Осы мақалада қате факт, олқы аударма немесе жалған естілетін нәрсе бар ма? Маған жазыңыз — өз тіліңізде.