Elastik Beanstalk kurumsal sınıf CD için uygun mu?


11

Elastik Beanstalk'a mikro hizmetler oluşturmak ve dağıtmak için Jenkins kullanan bir proje ile çalışıyorum. Bir test ortamına bir entegrasyon dalı dağıtırız, bir hazırlama ortamına dalları serbest bırakırız ve daha sonra üretime son bir ana yapı oluştururuz. Bunu bu şekilde yapmakla ilgili birkaç endişem var: ilk olarak, çevre başına proje başına bir derleme, çabaları çoğaltmamız anlamına gelir; ve ikincisi, aynı yapıdaki yapay yapıları üretime, evrelemede onaylanmış olarak dağıtmadığımız anlamına gelir.

Beanstalk'ı terk etmeye ve konuşlandırmalar için Chef gibi bir şey kullanarak düz ASG'lere geçmeye meyilliyim. Bu, bizi bir yapı artefaktı üreten proje başına bir yapı ile bırakacaktı ve aynı artefaktı, evrelemede onaylanan üretime uygulayabiliriz. Bununla birlikte, geçişin önemsiz olmayan bir ön maliyeti vardır. Beanstalk'u daha güvenilir, daha kolay yönetilen CI / CD'ye olanak sağlayacak bir şekilde kullanmanın bir yolu var mı?

Not : Aynı yapı artefaktını tanıtmak tam olarak yapmak istediğim şeydir, ancak dokümanlardan bunu yapmanın net bir yolunu görmüyorum; uygulama kaynağından EB'ye nasıl dağıtım yapılacağını açıklar, ancak tam olarak ilerlemediğim sürece mevcut bir sürümü başka bir ortama nasıl tanıtacağınızı açıklamaz. EB'nin kendisinde mevcutsa, Jenkins EB dağıtım eklentisinde özellikle Jenkins'te yapılmasını engelleyen bir sınırlama olabilir, ancak bunu yapmanın bir yolunu görmedim.


Her çevre kısıtlaması için tek yapıyı Jenkins çevreniz mi oluşturuyor? Elastik Beanstalk'u uygulamaları dağıtmak için kullanıyorum ve yüklenen uygulama yapıları çok sayıda ortama yükseltilebilir (dağıtılabilir). Yani, tanımladığınız sınırlamaları gerçekten görmüyorum. İstediğiniz şeyi yapmak için Elastik Beanstalk'ı kullanmanın bir yolu olabilir gibi görünüyor . Ancak bu soru şu anda olduğu gibi oldukça geniştir.
Andy Shinn

Test ettikten sonra aynı varlığı başka ortamlara tanıtmak yerine varlıklarınızı neden yeniden oluşturuyorsunuz?
Evgeny

Yanıtlar:


4

IMO, sorununuz bu senaryoda Elastik Beanstalk ile değil, Jenkins ile veya en azından nasıl kullandığınızla ilgilidir. Gerçekten de, bir şeyin ne olduğuna bakılmaksızın, bir şeyi "bir kez" oluşturmaya odaklanmalısınız.

Tam Açıklama: ThoughtWorks için çalışıyorum ve GoCD'ye inanılmaz derecede önyargılıyım. Ne demek istediğimi nötr olabildiğince anlatmaya çalışacağım. Aracımızın belgelerini örnek olarak kullanacağım, ancak umarım insanlar sistemlerine tahmin edebilirler.

Boru hattınızın erken bir yerinde "eserler" inşa ediyorsunuz. Bu, uygulamanızın tamamını veya bir kısmını temsil eden ikili dosyalar olabilir veya test araçları gibi herhangi bir sayıda araçtan çıkarılabilir. Bu eserler sistem tarafından saklanmalı ve bir daha inşa edilmemelidir . Sistem daha sonra gerektiğinde artefaktı uygun revizyondan almalıdır.

Örneğin...

  1. Ben bir .jar dosyası oluşturmak ve bazı birim testleri, temel C / I şeyler çalıştırın. Başarılı olursa, bu .jar dosyası ve testlerin çıktısı ilgili boru hattı işine yüklenir .
  2. Bir sonraki boru hattı, daha karmaşık bir test ortamına konuşlandırmanız olabilir. Tam kavanozu, onu inşa eden tam işten almalıdır . Daha sonra bu kavanozu doğru ortama yerleştirmek için Elastik Beanstalk yürütür.
  3. Bir sonraki ardışık düzen aşamalı dağıtımınızdır. İlk boru hattına tüm yol sırtını gider ve getirir kesin dan kavanozu kesin inşa işi. Sonra o kavanozu doğru ortama yerleştirmek için Elastik Beanstalk executus.

Bunların her biri ayrı boru hatlarıdır, çünkü bu, engellemeden paralel veya isteğe bağlı olarak daha fazla çalışmanıza izin verir .

Gerçek dağıtımları yapmak için Elastik Beanstalk, Şef, Kukla, Ansible, uDeploy veya başka herhangi bir araç kullanabilirsiniz. Sorununuz buradan gelmiyor. Sürekli Entegrasyon sunucuları başlangıçta bunu yapmak için tasarlanmamıştır. Tabii ki tercihinize göre aynı yere ulaşmak için kullanabileceğiniz birçok eklenti var.

GoCD , Chef Automate ve ConcourseCI gibi Sürekli Teslim sunucuları özellikle bu gibi şeyleri çözmek için oluşturuldu.


Evet, amacım bir kez inşa etmek ve üretime terfi etmektir. Benim sorum fasulyenin bu tür kullanıma uygun olup olmadığıdır. Söyleyebileceğim kadarıyla, gerçekten öyle görünmüyor; Örneğin, bir .NET uygulamasını dağıtmak için önerilen yöntem, bunu düşünebileceğim en kötü uygulama olan görsel stüdyodan yapmaktır.
Adrian

Ben şahsen kullanmadım, ancak "dağıtmak" için "tanıtmak" kelimesini değiştirirseniz öyle görünüyor. CD sistemleriniz, test etmek için beanstalk'i çağırır, bazı testler yapar ve ardından başarı / başarısızlık bildirir. Başarılı olursa, CD sisteminiz evrelemeye dağıtmak için beanstalk'i çağırır. Bu nedenle, promosyon düzenleme aracınız tarafından, dağıtım ise dağıtım aracınız tarafından yapılır. (FYI, bu yüzden Şef gibi şirketlerin Hazırda Bekletme (şey), Otomatikleştir (şeyi
tanıt

FYI, komut dosyası yazabileceğiniz gibi görünüyor (kod "iyi bir şey olarak altyapı") docs.aws.amazon.com/elasticbeanstalk/latest/dg/… - ama yine, kesinlikle 0 kişisel deneyim.
Ken Mugrage

Hangi kelimeyi kullanırsanız kullanın, söyleyebildiğim kadarıyla beanstalk bunu yapmıyor gibi görünüyor. Eserler değil, kaynaktan yayılmaya yönelik görünüyor. Bağladığınız sayfadan: "eb konuşlandırmayı çalıştırdığınızda, EB CLI proje dizininizin içeriğini bir araya getirir ve ortamınıza dağıtır." Cevabı takdir ediyorum ama sorum fasulyeye özgüdür, bu yüzden umarım beantalk tecrübesi olan biri girebilir.
Adrian

Ah, bunun için üzgünüm. Ben yorumlayarak edildi ~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3yalnızca bu dizinin sıkışmış herhangi zip dosyasını anlamında. İyi şanslar!
Ken Mugrage
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.