İçeriğe geç

Depo betikleri

Depo betikleri, depo başına yapılandırdığınız (Ayarlar → Depolar → bir depo satırındaki terminal simgesi) ve Control Center sunucusunun o deponun bir alanın çalışma ağacına karşı çalıştırdığı shell betikleridir — ajanların çalıştığı, <dataDir>/<workspaceId>/spaces/<spaceId>/repos/<repo>/ altındaki yalıtılmış checkout.

İki türü vardır:

Betik Ne zaman çalışır Ne için kullanılır
Kurulum Bir alan için çalışma ağacı hazırlandıktan hemen sonra Bağımlılıkları yükleme, dosya üretme, .env kopyalama
Arşiv Bir çalışma ağacı yok edilmeden ya da çöp toplanmadan hemen önce Çalışma ağacı dışındaki kaynakları temizleme (docker ağları, tüneller, harici durum)

İki betik de bash -lc ile (bir oturum açma kabuğu; böylece Homebrew/nvm ile kurulan araçlar PATH üzerinde olur), çalışma dizini çalışma ağacı olacak şekilde ve şu ortam değişkenleri tanımlı olarak çalışır:

Değişken Değer
CC_WORKSPACE_PATH Çalışma ağacı (betiğin cwd’si)
CC_ROOT_PATH Kayıtlı kaynak depo — kendi checkout’unuz
CC_SPACE_ID Çalışma ağacının ait olduğu alan
CC_SPACE_NAME Alanın görünen adı
CC_REPO_NAME Deponun görünen adı

Örneğin, bağımlılıkları yükleyen ve deponun .gitignore ile dışlanan .env dosyasını içeri alan bir kurulum betiği:

Terminal penceresi
pnpm install
cp "$CC_ROOT_PATH/.env" .env
pnpm run build
  • Sıfırdan farklı bir kodla çıkan (ya da 5 dakikalık zaman aşımını aşan) bir kurulum betiği, alanın hazırlanmasını başarısız kılar: alan, yeniden deneme seçeneğiyle birlikte başarısız durumunu gösterir ve çalıştırmanın çıktı son kısmı kaydedilir. Yeniden deneme, temiz bir çalışma ağacı hazırlar ve betiği yeniden çalıştırır — kurulum betiklerini kısmi bir yüklemeden sonra yeniden çalıştırmanın işleyeceği şekilde yazın (paket yöneticileri zaten böyle davranır).
  • Bir arşiv betiği en iyi çaba esasıyla çalışır: bir başarısızlık (ya da 2 dakikalık zaman aşımı) kaydedilir ama silmeyi asla engellemez. Arşiv, istemi yanıtlayacak kimsenin olmadığı GC yollarında çalışır (alan silindi, PR birleştirildi, planlanmış temizlik).

Kurulum yalnızca yeni bir çalışma ağacında çalışır: ajanları sıcak bir alana yeniden göndermek mevcut checkout’u yeniden kullanır ve kurulumun bedelini yeniden ödemez.

Her yürütme; durumu, süresi, çıkış kodu ve sınırlı bir çıktı son kısmıyla kaydedilir ve aynı ayarlar iletişim kutusunda “Son çalıştırmalar” altında görünür (repos.watchScriptRuns aboneliği bunu canlı olarak akıtır).

Betikler sunucunun yürüttüğü shell’dir; bu nedenle yazılmaları çalışma alanı yöneticileriyle sınırlıdır ve processSpawn eylem sınıfıyla korunur — süreç başlatan diğer tüm işlemleri kapılayan aynı koruma ağı.