یکپارچهسازی GitHub
Status200 خودمیزبان خود را با یک GitHub App که مال خودتان است به GitHub وصل کنید. وقتی برنامه از Status200 نصب شد، مخزنهای آن نصب به پروژهٔ شما وارد و همگام نگه داشته میشوند، کارهای رفع با هوش مصنوعی pull request باز میکنند، و تیم شما میتواند با نام بردن از برنامه در GitHub کار را به آن بسپارد.
این صفحه برای کسی است که سرور Status200 را اداره میکند: برنامه را یک بار میسازید و سپس هر پروژه آن را از کد وصل میکند.
چگونه کار میکند
نصب در Status200 آغاز میشود، نه در GitHub: پیوندی که Status200 شما را با آن به GitHub میفرستد، همان چیزی است که نصب را به پروژهٔ شما گره میزند.
وصل کردن یک نصب GitHub App به یک پروژه
- هدایت مرورگر، نصب و یک کد OAuth یکبارمصرف را با خود میآورد. Status200 کد را مبادله میکند تا تأیید کند حساب GitHubای که برنامه را نصب کرده آن نصب را مدیریت میکند، و سپس مخزنهای آن را وارد میکند. نصبی که از قبل وجود دارد، در عوض با ورود به GitHub وصل میشود: آنگاه کد به Status200 میگوید آن حساب کدام نصبها را مدیریت میکند.
- وبهوکها فهرست مخزنها را همگام نگه میدارند و کار را به برنامه میسپارند: اشارهها، واگذاریها، برچسبهای راهانداز و درخواستهای بازبینی. GitHub هر کدام را با webhook secret امضا میکند و Status200 هر کدام را که نتواند تأیید کند رد میکند.
پیش از شروع
- یک حساب GitHub که بتواند برای سازمان یا کاربری که برنامه روی آن نصب میشود GitHub App بسازد. برای نصب روی یک سازمان، باید مالک آن باشید یا درخواست را به تأیید یکی از مالکان برسانید.
- یک نام میزبان HTTPS عمومی برای Status200 که GitHub برای وبهوکها بتواند به آن برسد. دسترسی شبکه را ببینید.
- دسترسی به پیکربندی سرور:
config.envبرای Docker Compose، یا مقادیر Helm برای Kubernetes.
ساختن GitHub App
تنظیمات GitHub App را باز کنید
- برای یک سازمان:
https://github.com/organizations/YOUR_ORG/settings/apps - برای یک حساب شخصی:
https://github.com/settings/apps
New GitHub App را برگزینید.
- برای یک سازمان:
فرم ثبت را پر کنید
فیلد مقدار GitHub App name هر نام یکتایی، برای نمونه Status200. آن را دقیق یادداشت کنید: همانGITHUB_APP_NAMEاست.Homepage URL https://your-oneuptime-domain.comCallback URL https://your-oneuptime-domain.com/api/github/auth/callbackRequest user authorization (OAuth) during installation روشن. این الزامی است: یادداشت زیر را ببینید. Setup URL https://your-oneuptime-domain.com/api/github/auth/callback، اگر GitHub اجازهٔ وارد کردنش را بدهد (پایینتر را ببینید).Redirect on update اختیاری. پس از اینکه کسی نصبی را در GitHub تغییر دهد، Status200 او را به کد میبرد. Webhook URL https://your-oneuptime-domain.com/api/github/webhook، با وبهوک در حالت Active.Webhook secret یک رشتهٔ تصادفی طولانی. آن را یادداشت کنید: همان GITHUB_APP_WEBHOOK_SECRETاست. الزامی: Status200 وبهوکهای امضانشده را رد میکند، پس تنظیم نکردنGITHUB_APP_WEBHOOK_SECRETبهجای پذیرفتن دادههای تأییدنشده، همگامسازی مخزنها را متوقف میکند.به گفتهٔ مستندات GitHub، با روشن بودن Request user authorization (OAuth) during installation نمیتوانید Setup URL وارد کنید: کاربران پس از نصب برنامه بهجای آن به Callback URL فرستاده میشوند. هر دو به یک نشانی Status200 اشاره میکنند، پس در هر حال هدایت به جای درست میرسد.
مهمچرا «Request user authorization (OAuth) during installation» الزامی است. پس از یک نصب، GitHub با یکinstallation_idدر نشانی برمیگرداند. این عدد بهتنهایی چیزی دربارهٔ مالک نصب ثابت نمیکند — هر کسی میتواند عدد دیگری تایپ کند. با روشن بودن این گزینه، GitHub یکcodeیکبارمصرف OAuth هم برمیگرداند که به حساب GitHubای که نصب را انجام داده گره خورده است، و Status200 آن را مبادله میکند تا پیش از وصل کردن نصب به پروژهٔ شما تأیید کند که آن حساب واقعاً نصب را مدیریت میکند.بدون آن، Status200 از وصل کردن نصب خودداری میکند و داشبورد خطایی نشان میدهد که از شما میخواهد این تنظیم را روشن کنید. این عمدی است: پذیرفتن شناسهٔ نصب بدون تأیید به یک پروژهٔ Status200 اجازه میداد مخزنهای سازمان دیگری را از آن خود کند.
مجوزها را تنظیم کنید
زیر Permissions & events، این Repository permissions را تنظیم کنید:
مجوز دسترسی Status200 آن را برای چه به کار میبرد Contents Read and write خواندن فایلهای مخزن و push کردن شاخههای pull requestهای رفع با هوش مصنوعی Pull requests Read and write باز کردن و بهروزرسانی pull requestها و انتشار بازبینیها Issues Read and write انتشار نظرهای برنامه — از جمله روی pull requestها، که GitHub گفتوگوی آنها را از راه API مربوط به issues میگذراند Checks Read-only اختیاری. خواندن نتیجهٔ CI در pull requestهای رفع. بدون آن، وضعیت CI آنها تأییدنشده میماند Metadata Read-only فرادادهٔ پایهٔ مخزن (GitHub آن را الزامی میداند) آنچه برنامه را تعاملی میکند Issues: Read and write است. بدون آن، اشارهها دریافت میشوند و سپس وقتی برنامه میخواهد پاسخ دهد بیصدا شکست میخورند — GitHub نظرهای گفتوگوی pull requestها را از API مربوط به issues ارائه میکند، پس همین یک مجوز سرنوشت هر پاسخی را که برنامه مینویسد تعیین میکند. کار با Status200 از GitHub را ببینید.
Status200 به هیچ مجوز سازمانی یا حسابی نیاز ندارد.
مشترک رویدادهای وبهوک شوید
Status200 از دو دسته رویداد استفاده میکند و هر کدام کار متفاوتی انجام میدهد.
همگامسازی مخزنها —
installationوinstallation_repositories. GitHub Appها اینها را خودکار دریافت میکنند؛ این رویدادها مجموعهٔ مخزنهای وصلشده را با جایی که برنامه نصب شده هماهنگ نگه میدارند.برنامهٔ تعاملی — باید صریحاً مشترک این رویدادها شوید، و هر کدام راه مشخصی را برای سپردن کار به برنامه فعال میکند:
رویداد چه چیزی را ممکن میکند Issue comment فرمانهای @mentionدر issueها و در pull requestهاIssues واگذاری یک issue به برنامه، و برچسب راهانداز مخزن Pull request درخواست بازبینی از برنامه، و بازبینیهای عملیاتی درخواستهای ادغام هنگام باز شدن و تغییرشان Pull request review اشارهای که در متن یک بازبینی ارسالشده نوشته شده است Pull request review comment اشاره در یک نظر درونخطی در diff اگر مشترک هیچکدام از اینها نباشید، GitHub App همچنان مخزنها را وصل میکند و همچنان از Status200 pull requestهای رفع باز میکند — فقط هرگز به چیزی که در GitHub نوشته میشود پاسخ نمیدهد. این رایجترین علت «ربات مرا نادیده میگیرد» است. برای اینکه فرمانها چیستند و چه کسی میتواند آنها را بدهد، کار با Status200 از GitHub را ببینید.
رویدادهای دیگر (Push، Workflow run) تأیید و نادیده گرفته میشوند؛ مشترک شدن در آنها اعلان یا خودکارسازی CI/CD را فعال نمیکند.
جایی را که برنامه میتواند نصب شود برگزینید
زیر Where can this GitHub App be installed? برگزینید:
- Only on this account - برای استفادهٔ خصوصی/داخلی
- Any account - اگر میخواهید دیگران هم برنامهٔ شما را نصب کنند
برنامه را بسازید و شناسههایش را یادداشت کنید
Create GitHub App را برگزینید. GitHub صفحهٔ تنظیمات برنامه را باز میکند. App ID را در بالای صفحه و Client ID را در بخش About یادداشت کنید.
یک client secret بسازید
زیر Client secrets، Generate a new client secret را برگزینید. بیدرنگ آن را کپی کنید: GitHub فقط یک بار آن را نشان میدهد.
یک کلید خصوصی بسازید
زیر Private keys، Generate a private key را برگزینید. GitHub یک فایل
.pemدانلود میکند. آن را امن نگه دارید: Status200 با آن بهعنوان برنامه احراز هویت میکند.
پیکربندی Status200
Docker Compose
config.env در هر خط یک مقدار دارد، پس کلید خصوصی را با کدگذاری base64 در یک خط بدهید. Status200 آن را رمزگشایی میکند:
base64 < private-key.pem | tr -d '\n'GITHUB_APP_ID=YOUR_APP_ID
GITHUB_APP_NAME=YOUR_APP_NAME
GITHUB_APP_CLIENT_ID=YOUR_CLIENT_ID
GITHUB_APP_CLIENT_SECRET=YOUR_CLIENT_SECRET
GITHUB_APP_PRIVATE_KEY=YOUR_BASE64_ENCODED_PRIVATE_KEY
GITHUB_APP_WEBHOOK_SECRET=YOUR_WEBHOOK_SECRETتغییر را با npm run start اعمال کنید که کانتینرها را از نو میسازد. docker compose restart فایل config.env را دوباره نمیخواند.
Kubernetes
gitHubApp:
id: "YOUR_APP_ID"
name: "YOUR_APP_NAME" # The exact name of your GitHub App
clientId: "YOUR_CLIENT_ID"
clientSecret: "YOUR_CLIENT_SECRET"
privateKey: "<BASE64_ENCODED_PRIVATE_KEY_CONTENT>"
webhookSecret: "YOUR_WEBHOOK_SECRET"privateKey خود PEM را هم بهصورت یک بلوک چندخطی (privateKey: |) میپذیرد. تغییر را با helm upgrade اعمال کنید.
وقتی Status200 دوباره بالا آمد، کد بهجای GitHub App روی این سرور پیکربندی نشده است گزینهٔ اتصال GitHub را نشان میدهد.
مرجع متغیرهای محیطی
Docker Compose (config.env) | Helm (values.yaml) | مقدار |
|---|---|---|
GITHUB_APP_ID | gitHubApp.id | App ID. برای احراز هویت بهعنوان برنامه به کار میرود. |
GITHUB_APP_NAME | gitHubApp.name | نام برنامه. نام نمایشی، با فاصلهها و حروف بزرگ، مشکلی ندارد: پیوند نصب و شناسهٔ @mention برنامه از slug برنامه که GitHub اعلام میکند استفاده میکنند، و فقط وقتی Status200 نتواند از GitHub بپرسد، از این نام (با حروف کوچک و خط تیره بهجای فاصله) ساخته میشوند. بدون آن، کد نمیتواند مخزنها را وصل کند. |
GITHUB_APP_CLIENT_ID | gitHubApp.clientId | Client ID. برای بررسی اینکه چه کسی برنامه را نصب کرده لازم است. |
GITHUB_APP_CLIENT_SECRET | gitHubApp.clientSecret | client secretای که ساختید. همراه client ID لازم است. |
GITHUB_APP_PRIVATE_KEY | gitHubApp.privateKey | کلید خصوصی: خود PEM، یا PEM با کدگذاری base64. |
GITHUB_APP_WEBHOOK_SECRET | gitHubApp.webhookSecret | webhook secret. هر وبهوک با آن تأیید میشود و بدون آن هیچ وبهوکی پذیرفته نمیشود. |
هر شش مقدار الزامیاند.
وصل کردن مخزنها
اتصال را از Status200 آغاز کنید، نه از صفحهٔ برنامه در GitHub: پیوندی که Status200 شما را با آن به GitHub میفرستد، همان چیزی است که نصب را به پروژهٔ شما گره میزند.
- به داشبورد Status200 خود وارد شوید
- به محصولات > کد بروید
- روی اتصال GitHub کلیک کنید. Status200 شما را به GitHub میبرد
- سازمان یا حسابی را که برنامه باید روی آن نصب شود برگزینید و تعیین کنید به کدام مخزنها دسترسی داشته باشد: All repositories (همهٔ مخزنهای کنونی و آینده) یا Only select repositories
- روی Install کلیک کنید
- GitHub شما را به کد برمیگرداند و همهٔ مخزنهای نصب وارد میشوند. مخزنهایی که بعداً به نصب افزوده یا از آن حذف شوند، خودکار همگام میمانند.
وقتی برنامه از پیش روی حساب نصب شده است، برای پروژهای دیگر یا مستقیم از GitHub، نصب دوباره آن را وصل نمیکند: GitHub تنظیمات نصب را باز میکند و هرگز شما را برنمیگرداند. بهجای آن، زیر اتصال GitHub روی اتصال یک نصب موجود کلیک کنید. وارد GitHub میشوید و Status200 نصبی را وصل میکند که حساب GitHub شما مدیریت میکند. اگر بیش از یکی را مدیریت کند، کد فهرست آنها را نشان میدهد: حسابی را انتخاب کنید که پروژه باید از مخزنهایش استفاده کند.
چه کسی میتواند وصل کند. وصل کردن، مخزنهای نصب را به پروژه وارد میکند، پس به اجازهٔ افزودن مخزن کد نیاز دارد: Project Owner، Project Admin، Project Member، Settings Admin، Settings Member، یا تیمی با Create Code Repository. تیمی که این مجوز را مسدود کند، آن را پس میگیرد. در Status200 Cloud مخزنهای کد به طرح Growth یا بالاتر نیاز دارند. برای هر کس دیگر، کارت قفل است و میگوید چه چیزی لازم است. در GitHub، حسابی که برنامه را نصب یا وصل میکند باید آن نصب را مدیریت کند: مالک یک حساب شخصی، یا کسی که روی همهٔ مخزنهایی که نصب به آنها دسترسی دارد دسترسی admin دارد، همانطور که مالک سازمان دارد. دسترسی خواندن به یکی از مخزنهای آن کافی نیست.
ظرف ۱۵ دقیقه و در همان مرورگر کار را تمام کنید. پیوند یک بار، به مدت ۱۵ دقیقه، در همان مرورگری کار میکند که آن را آغاز کرده است. وقتی GitHub شما را برمیگرداند، Status200 پیش از وارد کردن هر چیزی مجوز را دوباره بررسی میکند.
دسترسی شبکه برای استقرارهای خودمیزبان
جهت ترافیک و نقطههای پایانی
| ترافیک | دسترسی لازم |
|---|---|
| از Status200 به GitHub | DNS و HTTPS خروجی روی TCP ۴۴۳ به api.github.com برای توکنهای GitHub App و فراخوانیهای API مخزنها، و به github.com برای مبادلهٔ توکن OAuth و عملیات Git از راه HTTPS |
| از GitHub به Status200 | HTTPS عمومی روی TCP ۴۴۳ به POST /api/github/webhook برای همگامسازی نصبها و دسترسی به مخزنها، و برای برنامهٔ تعاملی |
| از مرورگر کاربر به Status200 | دسترسی به داشبورد و GET /api/github/auth/callback برای هدایتهای نصب و مجوزدهی؛ اینها میتوانند فقط از راه VPN کاربر در دسترس بمانند |
callback یک هدایت در مرورگر است، در حالی که وبهوک درخواستی از سرورهای GitHub است. اتصال VPN یک کاربر به GitHub دسترسی به وبهوک نمیدهد. دامنههای بالا درخواستهای اصلی یکپارچهسازی را پوشش میدهند؛ ابزارهای اضافی مخزن، دانلودها، LFS یا بستهها ممکن است به مقصدهای دیگری نیاز داشته باشند. این تنظیمات دربارهٔ GitHub.com است؛ تغییر فایروال پشتیبانی از نام میزبان GitHub Enterprise Server را پیکربندی نمیکند.
استقرارهای خصوصی و امنیت فراخوانهای بازگشتی
/api/github/webhook را از راه یک دروازهٔ عمومی در دسترس بگذارید که DNS عمومی، یک گواهی HTTPS مورد اعتماد عموم با زنجیرهٔ کامل و یک مسیر خصوصی تا ingress در Status200 داشته باشد. TCP ۴۴۳ ورودی به دروازه را مجاز کنید و هدایت عمومی را به همین مسیر POST محدود کنید. اگر کاربران از راه VPN به داشبورد و callback مرورگر دسترسی دارند، آنها را روی ingress خصوصی نگه دارید؛ DNS دوپاره میتواند همان نام میزبان را در داخل و بیرون ارائه کند.
HOST=status200.example.com و HTTP_PROTOCOL=https را در config.env، یا host: status200.example.com و httpProtocol: https را در Helm تنظیم کنید. پیکربندی را اعمال کنید و صبر کنید تا Status200 دوباره راهاندازی شود. این مقادیر نشانیها را میسازند؛ DNS، TLS یا دسترسی شبکه فراهم نمیکنند. اگر نام میزبان تغییر کند، نشانیهای webhook، callback، setup و صفحهٔ اصلی GitHub App را بهروز کنید.
روش، مسیر اصلی، رشتهٔ پرسوجو، بدنه، Content-Type، X-Hub-Signature-256، X-GitHub-Event و X-GitHub-Delivery را نگه دارید. میزبان عمومی و طرح HTTPS را از راه سرآیندهای مورد اعتماد پراکسی نگه دارید. وبهوک را از SSO مرورگر، CAPTCHA و صفحههای ورود پراکسی معاف کنید. بررسی SSL در GitHub را روشن نگه دارید و در هر دو سامانه همان GITHUB_APP_WEBHOOK_SECRET را پیکربندی کنید: Status200 درخواستهای امضانشده را رد میکند و بدون این راز نمیتواند وبهوکها را اعتبارسنجی کند. راهنمای GitHub دربارهٔ اعتبارسنجی وبهوکها را ببینید.
اگر IP مبدأ وبهوکها را هم محدود میکنید، از محدودههای کنونی hooks در Meta API مربوط به GitHub استفاده کنید و آنها را مرتب بهروز کنید؛ محدودههای اجراکنندههای GitHub Actions را جایگزین آنها نکنید و بررسی امضا را کنار نگذارید. GitHub هشدار میدهد که نشانیهایش تغییر میکنند و فهرست منتشرشده کامل نیست.
تأیید دسترسی و شناخت محدودیتها
- از کد یک نصب را وصل کنید.
- در تنظیمات GitHub App، Advanced را باز کنید و Recent Deliveries را ببینید. یک تحویل را دوباره بفرستید و تأیید کنید که دروازه آن را هدایت میکند و Status200 آن را میپذیرد.
- یک مخزن آزمایشی را به نصب بیفزایید یا از آن حذف کنید و بررسی کنید که فهرست مخزنها در Status200 هم دنبالش تغییر کند.
GitHub عیبیابی تحویلها را مستند کرده و تأیید 2xx ظرف ده ثانیه را الزامی میداند. یک GET از مرورگر به وبهوک، یک POST امضاشده را نمیآزماید.
بدون دسترسی ورودی، مجوزدهی در مرورگر و عملیات خروجی API و Git ممکن است کار کنند، اما وبهوکها به Status200 نمیرسند: نصبهای حذفشده و تغییرات دسترسی به مخزنها همگام نمیشوند، و برنامه هرگز به اشارهها، واگذاریها یا درخواستهای بازبینی پاسخ نمیدهد.
تنظیم دسترسی به شبکهٔ خصوصی درخواستهای خروجی به مقصدهای خصوصی را کنترل میکند و وبهوک را برای GitHub در دسترس نمیگذارد.
عیبیابی
اتصال کامل نشد
وقتی GitHub شما را برمیگرداند و نصب وصل نشده است، کد پیام GitHub وصل نشد را همراه یک جمله به زبان شما نشان میدهد که دلیلش را میگوید. بقیهٔ صفحه مثل همیشه بارگذاری میشود، پس میتوانید همانجا دوباره وصل کنید. پاسخ خود GitHub هرگز نشان داده نمیشود: آن پاسخ همراه دلیل در لاگ سرور Status200 است.
| صفحه میگوید | چه باید کرد |
|---|---|
| "این پیوند اتصال نامعتبر است، منقضی شده یا قبلاً استفاده شده است. لطفاً از نو شروع کنید." | پیوند یک بار، به مدت ۱۵ دقیقه، در همان مرورگری کار میکند که آن را آغاز کرده است. از کد از نو شروع کنید و ظرف ۱۵ دقیقه در همان مرورگر کار را در GitHub تمام کنید. نصب برنامه از صفحهٔ آن در GitHub، آن را به هیچ پروژهای وصل نمیکند: برای وصل کردن نصبی که آنجا انجام شده، روی اتصال یک نصب موجود کلیک کنید. |
| "شما اجازه افزودن مخازن کد به این پروژه را ندارید." | وصل کردن به اجازهٔ افزودن مخزن کد نیاز دارد (وصل کردن مخزنها را ببینید). از یکی از مدیران پروژه بخواهید آن را بدهد. وقتی GitHub شما را برمیگرداند این دوباره بررسی میشود، پس مجوزی که در این فاصله گرفته شده باشد، اتصال را اینجا هم پایان میدهد. |
| "برای اتصال GitHub به طرح ... نیاز است." | در Status200 Cloud مخزنهای کد به طرحی نیاز دارند که جمله نام میبرد. طرح پروژه را ارتقا دهید و دوباره وصل کنید. |
| "GitHub تأیید نکرد که چه کسی برنامه را نصب کرده است، بنابراین نصب بررسی نشد." | Request user authorization (OAuth) during installation را در تنظیمات GitHub App روشن کنید (ساختن GitHub App را ببینید) و دوباره وصل کنید. |
| "Status200 نتوانست تأیید کند که حساب GitHub شما میتواند این نصب را مدیریت کند." | حساب GitHubای که نصب را تمام کرده، آن را مدیریت نمیکند (اینکه چه کسی مدیریت میکند را در وصل کردن مخزنها ببینید). برنامه روی GitHub نصبشده باقی میماند، پس از کسی که این نصب را مدیریت میکند بخواهید آن را با اتصال یک نصب موجود وصل کند. |
| "GitHub هیچ نصبی را برنگرداند." | وقتی یکی از اعضای سازمان بهجای نصب برنامه آن را درخواست میکند، یکی از مالکان سازمان باید ابتدا درخواست را تأیید کند. پس از تأیید، کسی که این نصب را مدیریت میکند آن را با اتصال یک نصب موجود وصل میکند. |
| "حساب GitHub شما هنوز هیچ نصبی از برنامه را مدیریت نمیکند." | حساب GitHubای که با آن وارد شدید هیچ نصبی از برنامه را مدیریت نمیکند (اینکه چه کسی مدیریت میکند را در وصل کردن مخزنها ببینید). اگر برنامه هنوز روی حساب نصب نشده است، آن را با اتصال GitHub نصب کنید. اگر نصب شده است، با حسابی که این نصب را مدیریت میکند وارد GitHub شوید و دوباره وصل کنید، یا از کسی که آن را مدیریت میکند بخواهید. |
| "GitHub App روی این سرور Status200 راهاندازی نشده است." | هم GITHUB_APP_CLIENT_ID و هم GITHUB_APP_CLIENT_SECRET را تنظیم کنید (پیکربندی Status200 را ببینید) و Status200 را دوباره راهاندازی کنید. |
| "Status200 نتوانست اتصال را کامل کند. لطفاً دوباره تلاش کنید." | GitHub با خطا پاسخ داد، یا هنگام کامل کردن، یک درخواست یا یک نوشتن ناموفق بود. لاگ سرور Status200 میگوید کدام. دوباره تلاش کنید؛ اگر تکرار شد، لاگ و تنظیمات GitHub App را بررسی کنید. |
مشکلات دیگر
کد میگوید "GitHub App روی این سرور پیکربندی نشده است"
GITHUB_APP_NAME تنظیم نشده است. آن را همراه پنج مقدار دیگر روی نام دقیق برنامه بگذارید و Status200 را دوباره راهاندازی کنید.
پس از نصب برنامه به Status200 برگردانده نمیشوم
اگر برنامه از پیش روی حساب نصب شده است، GitHub بهجای آن تنظیمات نصب را باز میکند و از آنجا کسی را برنمیگرداند: آن را با اتصال یک نصب موجود وصل کنید. در غیر این صورت، بررسی کنید که Callback URL برنامه https://your-oneuptime-domain.com/api/github/auth/callback باشد، و اگر Setup URL تنظیم شده، آن هم همین باشد. هر دو باید به همان نقطهٔ پایانی /api/github/auth/callback روی نام میزبان HOST اشاره کنند.
Recent Deliveries در GitHub پیام "Invalid webhook signature" را نشان میدهد
webhook secret در GitHub App با GITHUB_APP_WEBHOOK_SECRET فرق دارد، GITHUB_APP_WEBHOOK_SECRET تنظیم نشده است، یا یک پراکسی بدنهٔ درخواست را تغییر داده است. در هر دو همان راز را تنظیم کنید، Status200 را دوباره راهاندازی کنید و مطمئن شوید که دروازه بدنه را بدون تغییر هدایت میکند.
رویدادهای وبهوک دریافت نمیشوند
بررسی کنید که نشانی وبهوک از راه HTTPS بهطور عمومی در دسترس باشد، سپس در تنظیمات GitHub App زیر Advanced > Recent Deliveries هر تلاش و پاسخ آن را ببینید. تا وقتی GITHUB_APP_WEBHOOK_SECRET تنظیم نشده باشد، وبهوکها رد میشوند.
مخزنها یا کارهای رفع با خطای احراز هویت شکست میخورند
Status200 با GITHUB_APP_ID و GITHUB_APP_PRIVATE_KEY بهعنوان برنامه احراز هویت میکند. بررسی کنید که App ID درست باشد و کلید، PEM کامل با خطهای BEGIN و END آن باشد، یا همان PEM با کدگذاری base64. اگر برنامه از GitHub حذف نصب شده است، آن را دوباره از کد وصل کنید.
پس از نصب، مخزنهایی کم است
در تنظیمات نصب در GitHub بررسی کنید که نصب به کدام مخزنها دسترسی دارد. مخزنهایی که آنجا اضافه میکنید، تا وقتی وبهوکها به Status200 برسند، خودکار وارد میشوند.
برنامه اشارهها در GitHub را نادیده میگیرد
به برنامه Issues: Read and write بدهید و آن را مشترک رویدادهای تعاملی در مشترک رویدادهای وبهوک شوید کنید. افزون بر این، اشارهها فقط با شناسهٔ برنامه جور درمیآیند، یعنی slug آن در GitHub: نام برنامه با حروف کوچک و خط تیره بهجای فاصله. Status200 آن را از GitHub میخواند و فقط وقتی نتواند، آن را از GITHUB_APP_NAME میسازد.
بهترین شیوههای امنیتی
- رازها را مرتب عوض کنید. هر چند وقت یک بار client secret و کلید خصوصی تازه بسازید.
- webhook secret را تنظیمشده نگه دارید. Status200 وبهوکهایی را که نتواند تأیید کند رد میکند.
- دسترسی به مخزنها را محدود کنید. فقط مخزنهایی را به نصب بدهید که باید وصل شوند.
- تحویل وبهوکها را زیر نظر داشته باشید. مرتب تحویلهای ناموفق یا فعالیت مشکوک را بررسی کنید.
- کلیدهای خصوصی را بیرون از کنترل نسخه نگه دارید.