Genel bakış#
EJO üç SCM ile çalışır: GitHub, GitLab ve Azure DevOps. Bir organizasyonda üçünü aynı anda kullanabilirsiniz; her repo binding'i kendi SCM'sini seçer. Bağlantı kurulduktan sonra EJO:
- repo'ları agent'ta clone etmek için kimlik bilgisi verir,
- push, pull request (GitLab'da merge request) ve tag olaylarını alıp run başlatır,
- commit'lere ve pull request'lere
ejostatus'ü ve bir yorum yazar, - isterseniz merge gate'i SCM tarafında da uygular,
- SCM gruplarını tarayıp
.ejodosyalarını okur ve binding formunda repo aramasını doldurur.
Üç SCM aynı işleri yapar, ama bağlanma şekilleri farklıdır:
| GitHub | GitLab | Azure DevOps | |
|---|---|---|---|
| Nasıl bağlanır | Paylaşılan EJO Cloud GitHub App'i, Ayarlar > GitHub App | Personal access token ve proje webhook'u | Personal access token (PAT) ve service hook'lar |
| Clone erişimi | Seçtiğiniz repo'larla sınırlı, kısa ömürlü installation token | Token ile; token yoksa yalnızca public repo'lar | PAT ile; PAT yoksa yalnızca public repo'lar |
| Olaylar | App ile kendiliğinden gelir | Ayarlar > Webhook'lar'da kaydedilen webhook; EJO token'la oluşturur ya da siz elle eklersiniz | Ayarlar > Webhook'lar'da kaydedilen webhook; EJO PAT'la service hook'ları oluşturur ya da siz elle eklersiniz |
| Status | Commit status ejo ve ejo/preview |
Commit status ejo ve ejo/preview |
Commit ve pull request status'ü, genre ejo, name pipeline ve preview |
| Yorum | Pull request comment'i | Merge request note'u | Pull request thread'i |
| Merge gate | Hedef branch'te ejo status'ünü zorunlu kılan ruleset |
Projede Pipelines must succeed (only_allow_merge_if_pipeline_succeeds) |
Hedef branch'te Status branch policy'si |
| Binding'de repo araması | Var | Var | Var |
SCM grubu (.ejo taraması) |
Organizasyon veya team | Grup | Proje (org/project) |
| Preview label'ı | Var | Var | Yok, her pull request preview alır |
| Onaylayan review sayısı, API kırılma kontrolü | Var | Yok | Yok |
Not: Binding formundaki repo araması SCM'ye canlı sorgu atmaz; SCM gruplarının son taramasından gelir. Ayarlar > Webhook'lar'da bir webhook kaydettiğinizde, kapsadığı GitHub organizasyonu, GitLab grubu veya Azure DevOps projesi SCM grubu olarak eklenir ve taranır. Aramada çıkmayan bir repo'nun adını elle de yazabilirsiniz.
GitHub#
EJO Cloud'da her müşteri kendi GitHub App'ini oluşturmaz. Tek, paylaşılan bir EJO Cloud GitHub App'i vardır: onu kendi GitHub hesabınıza veya organizasyonunuza kurar ve kurulum sırasında hangi repo'ları görebileceğini seçersiniz. Bu akış yalnızca GitHub içindir.
Bağlantı kurulduktan sonra:
- Agent'lar private repo'larınızı kısa ömürlü, yalnızca seçtiğiniz repo'larla sınırlı installation token'larıyla clone eder.
- GitHub olayları (push, pull request, release) EJO'ya kendiliğinden ulaşır. Repo'larınızda elle webhook tanımlamanız gerekmez.
- EJO commit'lere
ejostatus'ü yazar, pull request'lere yorum ekler ve isterseniz merge gate için ruleset yönetir.
Not: GitHub bağlı değilken agent'lar yalnızca public GitHub repo'larını clone edebilir ve commit status'leri gönderilmez.
Ön koşullar#
- EJO organizasyonunuzda admin rolü.
- GitHub'da uygulamayı kurmak istediğiniz hesapta veya organizasyonda uygulama kurma yetkisi. Organizasyonlarda bu genellikle organizasyon sahibidir.
Bağlama#
- Konsolda Ayarlar > GitHub App sayfasını açın.
- EJO'yu GitHub'a install et butonuna basın. GitHub'a yönlendirilirsiniz.
- EJO Cloud uygulamasını kuracağınız hesabı veya organizasyonu seçin.
- Erişim için All repositories ya da yalnızca seçtiğiniz repo'ları işaretleyip kurulumu onaylayın. GitHub ayrıca hesabınızla yetkilendirme ister; bu, EJO'nun kurulumun gerçekten size ait olduğunu doğrulaması içindir.
- GitHub sizi ejocloud.com'daki onay sayfasına getirir: "GitHub hesabı bağlansın mı?" Sayfada GitHub hesap adı ve EJO organizasyonunuzun adı yazar.
- Bilgiler doğruysa Bağla'ya basın. Konsoldaki Ayarlar > GitHub App sayfasına dönersiniz ve "GitHub App bağlandı" mesajını görürsünüz.
Uyarı: Onay sayfası, başkasının size gönderdiği bir kurulum bağlantısıyla hesabınızın yanlış bir organizasyona bağlanmasını önlemek için vardır. Organizasyon adını tanımıyorsanız İptal'e basın. Onay sayfası 10 dakika geçerlidir.
İstenen izinler#
| İzin | Neden |
|---|---|
| Contents (read & write) | Repo'yu clone etmek ve GitOps step'lerinin commit veya tag yazabilmesi için. |
| Commit statuses (read & write) | ejo ve ejo/preview status'lerini yazmak için. |
| Issues (read & write) | Pull request'lere run ve preview yorumları eklemek için. |
| Administration (read & write) | Merge gate için branch ruleset'i oluşturmak ve güncellemek için. |
| Pull requests (read) | Pull request bilgilerini ve label'larını okumak için. |
| Metadata (read) | GitHub'ın tüm uygulamalar için zorunlu tuttuğu temel izin. |
Uygulamanın dinlediği olaylar: Push, Pull request, Pull request review ve Release.
Merge gate#
Binding'de Bu pipeline başarılı olana kadar merge'ü engelle açıksa EJO, PR hedef branch'i için ejo status'ünü zorunlu kılan bir ruleset ekler. Gereken GitHub onaylayan review sayısı aynı ruleset'e eklenir; Review App URL'ini de bekle açıksa ejo/preview status'ü de zorunlu olur. GitHub Free planındaki private repo'larda ruleset olmadığından merge butonu engellenmeyebilir; ana pipeline yine de WAITING kalır.
Repo erişimini değiştirme#
Hangi repo'ların görüleceğini sonradan GitHub'da, kurulu uygulamanın ayarlarından değiştirebilirsiniz. EJO her işlem için token'ı o anki kuruluma göre aldığı için ayrıca bir şey yapmanız gerekmez.
Bağlantıyı kaldırma#
Ayarlar > GitHub App sayfasında Bağlantıyı kes'e basın. Bu işlem EJO uygulamasını o GitHub hesabından kaldırır; webhook'lar ve status check'ler yeniden kurana kadar durur. Uygulamayı GitHub tarafından kaldırırsanız EJO bunu da algılar ve bağlantıyı siler.
Her EJO organizasyonu aynı anda tek bir GitHub kurulumuna bağlanabilir. Başka bir hesaba geçmek için önce mevcut bağlantıyı kesin.
Sık görülen hatalar#
| Mesaj | Ne yapmalı |
|---|---|
| The installation needs approval from a GitHub organization owner. | GitHub organizasyon sahibinin kurulumu onaylaması gerekiyor. Onaydan sonra kurulumu yeniden başlatın. |
| This GitHub installation is already connected to another EJO organization. | Bu kurulum başka bir EJO organizasyonuna bağlı. Orada bağlantıyı kesin ya da farklı bir GitHub hesabı kullanın. |
| This EJO organization is already connected to a GitHub account. Disconnect it first. | Önce mevcut bağlantıyı kesin. |
| Your GitHub account has no access to that installation. | Kurulumu, ona erişimi olan bir GitHub hesabıyla tamamlayın. |
| This GitHub link is invalid or has expired. | Onay bağlantısının süresi doldu. Ayarlar > GitHub App sayfasından yeniden başlayın. |
GitLab#
GitLab'da paylaşılan bir uygulama yoktur. EJO, GitLab'a bir personal access token ile bağlanır; olaylar proje webhook'larıyla gelir. Varsayılan GitLab adresi https://gitlab.com'dur.
Ön koşullar#
- EJO organizasyonunuzda admin rolü (Ayarlar > Webhook'lar sayfası admin'e açıktır).
apiveread_repositoryscope'larına sahip bir GitLab personal access token'ı. EJO bu token'ı clone URL'lerinde, commit status'lerinde, merge request note'larında, merge request aramasında, webhook oluştururken ve merge gate ayarında kullanır.- Token sahibinin projede webhook ekleyip proje ayarını değiştirebilmesi. GitLab bunun için projede en az Maintainer rolü ister.
Uyarı: EJO Cloud konsolunda GitLab token'ı girilecek bir alan henüz yoktur. Token, EJO'nuzun sunucu ayarında (
gitlab.token) tutulur; self-managed bir GitLab kullanıyorsanız adresi de (gitlab.base_url) orada tanımlanır. Tanımlatmak için Destek sayfasındaki adresten bize yazın ve talebinize token'ın kendisini eklemeyin. Self-managed GitLab'ın EJO Cloud'dan internet üzerinden erişilebilir olması gerekir.
Token tanımlı değilken EJO yalnızca public repo'ları clone eder; commit status'ü, merge request note'u, SCM grubu taraması, .ejo okuma ve merge gate çalışmaz. Webhook'lar ve run'lar yine çalışır.
Bağlama#
- Ayarlar > Webhook'lar sayfasında Yeni webhook'a basın.
- Ad alanına bir ad verin, Provider olarak GitLab'ı seçin.
- Proje alanına projenin
path_with_namespacedeğerini girin, örneğinacme/webya daacme/platform/web. GitLab'da her webhook tek bir projeyi kapsar. - Secret alanını boş bırakırsanız EJO bir secret üretir. Secret şifreli saklanır.
- Hook'u SCM'de şimdi oluştur kutusu işaretliyken kaydedin. Token tanımlıysa EJO, GitLab'da projeye webhook'u kendisi ekler.
- Kaydettiğinizde form yerine Delivery URL'i, Header / secret alanı (
X-Gitlab-Token) ve Secret görünür. Secret'ı şimdi kopyalayın; EJO onu bir daha göstermez. - Hook otomatik oluşturulduysa sayfada "SCM'de oluşturuldu" yazar. Oluşturulamadıysa "Hook SCM'de oluşturulamadı" uyarısı çıkar; webhook'u aşağıdaki gibi elle ekleyin.
- Delivery > Repo'lar > Repo bağla ile binding oluşturun: Provider olarak GitLab'ı seçin, GitLab repo'su alanına
group/projectgirin ve Webhook secret'ı listesinden az önce kaydettiğiniz webhook'u seçin.
Webhook'u elle ekleme#
GitLab'da projenin Settings > Webhooks sayfasında yeni bir webhook ekleyin:
| Alan | Değer |
|---|---|
| URL | https://<alt-alan-adınız>.ejocloud.com/api/v1/webhooks/gitlab, örneğin https://acme.ejocloud.com/api/v1/webhooks/gitlab |
| Secret token | EJO'nun gösterdiği secret. GitLab bunu X-Gitlab-Token header'ı olarak gönderir. |
| Trigger | Push events, Tag push events, Merge request events |
| SSL verification | Açık |
Webhook'u kaydettikten sonra GitLab'daki Test ile bir push olayı gönderip Recent events listesinde cevabı kontrol edin.
Status ve merge request yorumları#
EJO her run için commit'e ejo adlı bir commit status'ü yazar; preview'ı olan merge request run'larında ayrıca ejo/preview, promote ve rollback run'larında ejo/promote ve ejo/rollback yazar. Merge request run'larının sonucu merge request'e bir note olarak eklenir ve her push'ta güncellenir.
Merge gate#
Binding'de Bu pipeline başarılı olana kadar merge'ü engelle açıksa EJO, GitLab projesinde Pipelines must succeed ayarını (only_allow_merge_if_pipeline_succeeds) açar. EJO'nun commit status'leri GitLab'da harici bir pipeline olarak göründüğü için merge, ejo başarılı olana kadar engellenir. Ana (commit) pipeline da merge request pipeline'ı başarılı olana kadar WAITING kalır.
- Bu ayar proje genelidir. Merge gate'i kapattığınızda EJO ayarı geri almaz, çünkü EJO'dan önce de açık olabilir.
- Token'da
apiscope'u yoksa ya da yetki yetmezse ayar yapılmaz; EJO tarafındakiWAITINGgate yine çalışır. Bu durumda GitLab'da Pipelines must succeed ayarını elle açın. - Token hiç tanımlı değilse binding kaydedilirken merge gate reddedilir.
- Review App URL'ini de bekle için EJO GitLab'da ayrı bir ayar yapmaz; bekleme EJO tarafında olur.
Sık görülen hatalar#
| Mesaj | Ne yapmalı |
|---|---|
SCM token is not configured; copy the delivery URL and secret into the SCM UI |
EJO'da GitLab token'ı yok. Webhook'u GitLab'da elle ekleyin. |
gitlab token is not configured; merge gate requires gitlab.token with api scope ... |
Merge gate için token gerekir. Token tanımlanana kadar Bu pipeline başarılı olana kadar merge'ü engelle'yi kapalı bırakın. |
gitlab token is not configured (SCM grubunda) |
Grup taraması token ister. |
gitlab group "..." was not found |
Grup yolu yanlış ya da token sahibinin gruba erişimi yok. |
GitLab Recent events'te 401 invalid webhook token |
GitLab'daki Secret token, EJO'daki secret ile aynı değil. Secret'ı yeniden girin. |
GitLab Recent events'te 500 gitlab webhook secret is not configured on the master |
EJO'da GitLab için kayıtlı bir webhook yok. Ayarlar > Webhook'lar'da bir tane oluşturun. |
200 ve no repository binding for this repo |
Bu proje için binding yok ya da binding'deki repo adı path_with_namespace ile birebir aynı değil. |
Azure DevOps#
Azure DevOps'ta da paylaşılan bir uygulama yoktur. EJO, Azure DevOps'a bir personal access token (PAT) ile bağlanır; olaylar service hook'larla gelir. EJO dev.azure.com üzerindeki Azure DevOps Services ile çalışır; kendi sunucunuzda çalışan Azure DevOps Server desteklenmez.
Ön koşullar#
- EJO organizasyonunuzda admin rolü.
- Bir Azure DevOps PAT'i. Clone ve status için en az Code (Read) ve Code (Status) gerekir. Merge gate'in branch policy'lerini EJO'nun kendisinin kurması için Code (Read & write), Code (Status) ve Policy (Read & write) verin.
Uyarı: EJO Cloud konsolunda Azure DevOps PAT'i girilecek bir alan henüz yoktur. PAT, EJO'nuzun sunucu ayarında (
azure_devops.pat) tutulur. Tanımlatmak için Destek sayfasındaki adresten bize yazın ve talebinize PAT'in kendisini eklemeyin.
PAT tanımlı değilken EJO yalnızca public repo'ları clone eder; commit ve pull request status'ü, pull request yorumu, SCM grubu taraması, .ejo okuma ve merge gate çalışmaz. Webhook'lar ve run'lar yine çalışır.
Bağlama#
- Ayarlar > Webhook'lar sayfasında Yeni webhook'a basın.
- Ad alanına bir ad verin, Provider olarak Azure DevOps'u seçin.
- Proje alanına
org/project(o projedeki tüm repo'lar) ya daorg/project/repogirin. - Secret alanını boş bırakırsanız EJO bir secret üretir.
- Hook'u SCM'de şimdi oluştur kutusu işaretliyken kaydedin. PAT tanımlıysa EJO projede üç service hook subscription'ı oluşturur: Code pushed, Pull request created ve Pull request updated.
- Kaydettiğinizde form yerine Delivery URL'i, Header / secret alanı (
X-Ejo-Webhook-Secret) ve Secret görünür. Secret'ı şimdi kopyalayın. - Service hook'lar oluşturulamadıysa "Hook SCM'de oluşturulamadı" uyarısı çıkar; aşağıdaki gibi elle ekleyin.
- Delivery > Repo'lar > Repo bağla ile binding oluşturun: Provider olarak Azure DevOps'u seçin, Azure Repos repo'su alanına
org/project/repogirin ve Webhook secret'ı listesinden webhook'u seçin.
Service hook'ları elle ekleme#
Azure DevOps'ta Project Settings > Service hooks sayfasında Web Hooks tipinde her olay için ayrı bir subscription oluşturun:
| Alan | Değer |
|---|---|
| Olay | Code pushed, Pull request created ve Pull request updated (üç ayrı subscription) |
| URL | https://<alt-alan-adınız>.ejocloud.com/api/v1/webhooks/azuredevops |
| HTTP headers | X-Ejo-Webhook-Secret: <secret> |
| Resource details to send | All |
Pull request'in tamamlanması veya bırakılması Pull request updated olayıyla gelir; preview'lar bu olayla kaldırılır.
Status ve pull request yorumları#
EJO her run için aynı status'ü hem commit'e hem pull request'e yazar: genre ejo, name pipeline. Preview'ı olan pull request run'larında name preview, promote ve rollback run'larında promote ve rollback kullanılır. Pull request run'larının sonucu pull request'e bir thread olarak eklenir ve her push'ta güncellenir.
Merge gate#
Binding'de Bu pipeline başarılı olana kadar merge'ü engelle açıksa EJO, PR hedef branch'inde engelleyici bir Status branch policy'si oluşturur: genre ejo, name pipeline. Review App URL'ini de bekle açıksa name preview için ikinci bir policy ekler; bu seçeneği kapattığınızda o policy silinir. Merge gate'i kapattığınızda EJO iki policy'yi de siler. Ana (commit) pipeline da pull request pipeline'ı başarılı olana kadar WAITING kalır.
- PAT'te Policy (Read & write) yoksa policy oluşturulamaz; EJO tarafındaki
WAITINGgate yine çalışır. Bu durumda hedef branch'e genreejo, namepipelinestatus'ünü isteyen bir branch policy'yi elle ekleyin. - PAT hiç tanımlı değilse binding kaydedilirken merge gate reddedilir.
Sık görülen hatalar#
| Mesaj | Ne yapmalı |
|---|---|
SCM token is not configured; copy the delivery URL and secret into the SCM UI |
EJO'da Azure DevOps PAT'i yok. Service hook'ları elle ekleyin. |
azure devops PAT is not configured; merge gate requires azure_devops.pat ... |
Merge gate için PAT gerekir. PAT tanımlanana kadar merge gate'i kapalı bırakın ya da status policy'yi elle ekleyin. |
azure devops token is not configured (SCM grubunda) |
Proje taraması PAT ister. |
use organization/project |
SCM grubu adı Azure DevOps'ta org/project biçiminde olmalıdır. |
azure devops project "..." was not found |
Proje adı yanlış ya da PAT'in projeye erişimi yok. |
Service hook geçmişinde 401 invalid webhook secret |
X-Ejo-Webhook-Secret header'ı yok ya da secret uyuşmuyor. Header'ı X-Ejo-Webhook-Secret: <secret> biçiminde girin. |
Service hook geçmişinde 500 azure devops webhook secret is not configured on the master |
EJO'da Azure DevOps için kayıtlı bir webhook yok. Ayarlar > Webhook'lar'da bir tane oluşturun. |
200 ve no repository binding for this repo |
Bu repo için binding yok ya da binding'deki ad org/project/repo ile birebir aynı değil. |