Elastic Beanstalk è adatto per CD di livello enterprise?


11

Sto lavorando a un progetto che utilizza Jenkins per creare e distribuire microservizi su Elastic Beanstalk. Distribuiamo un ramo di integrazione in un ambiente di test, rilasciamo i rami in un ambiente di gestione temporanea e quindi un master finale per la produzione. Ho un paio di preoccupazioni nel farlo in questo modo: in primo luogo, significa che finiamo con una matrice di una build per progetto per ambiente, duplicando gli sforzi; e due, significa che non stiamo distribuendo gli stessi artefatti di build alla produzione che sono stati convalidati nella stadiazione.

Sono propenso ad abbandonare Beanstalk e passare a semplici ASG usando qualcosa come Chef per le distribuzioni. Ciò ci lascerebbe con una build per progetto, producendo un artefatto di build, e potremmo distribuire lo stesso artefatto alla produzione che è stato approvato nella messa in scena. Tuttavia, il passaggio ha un costo iniziale non trascurabile. Esiste un modo per utilizzare meglio Beanstalk che consentirebbe CI / CD più affidabili e più facili da gestire?

Nota : promuovere lo stesso artefatto di build è esattamente quello che voglio fare, ma dai documenti non vedo alcun modo chiaro per farlo; spiega come distribuire su EB dalla sorgente della tua app, ma non come promuovere una versione esistente in un altro ambiente, a meno che non riesca a scorrere oltre. Se è disponibile nello stesso EB, potrebbe esserci una limitazione nel plug-in di distribuzione EB di Jenkins che ne impedisce specificamente l'esecuzione in Jenkins, ma non ho visto alcun modo per farlo.


È il tuo ambiente Jenkins che sta ponendo la limitazione della singola build per ambiente? Uso Elastic Beanstalk per distribuire le applicazioni e gli artefatti delle applicazioni caricate possono essere promossi (distribuiti) in più ambienti. Quindi, non vedo davvero i limiti che stai descrivendo. Sembra che ci possa essere un modo in cui puoi utilizzare Elastic Beanstalk per fare quello che vuoi. Ma questa domanda è abbastanza ampia come lo è attualmente.
Andy Shinn

Perché stai ricostruendo le tue risorse invece di promuovere la stessa risorsa in altri ambienti dopo il test?
Evgeny

Risposte:


4

Opinione dell'IMO che il tuo problema non è con Elastic Beanstalk in quello scenario, è con Jenkins o almeno nel modo in cui lo stai usando. Dovresti davvero concentrarti sulla costruzione di "una cosa" solo una volta, indipendentemente da cosa sia quella cosa.

Divulgazione completa: lavoro per ThoughtWorks e sono incredibilmente di parte per GoCD. Proverò a precisare cosa intendo nel modo più neutro possibile. Userò i documenti del nostro strumento come esempi, ma speriamo che le persone possano estrapolare i loro sistemi.

Da qualche parte all'inizio della tua pipeline stai costruendo "artefatti". Potrebbe trattarsi di file binari che rappresentano in tutto o in parte l'applicazione oppure potrebbero essere generati da qualsiasi numero di strumenti come gli strumenti di test. Questi artefatti dovrebbero essere archiviati dal sistema e mai più ricostruiti. Il sistema dovrebbe quindi recuperare l'artefatto dalla revisione corretta quando necessario.

Per esempio...

  1. Costruisco un file .jar ed eseguo alcuni test unitari su di esso, roba C / I di base. Se passa, quel file .jar e l'output dei test vengono caricati in quel processo di pipeline specifico .
  2. La prossima pipeline potrebbe essere la distribuzione in un ambiente di test più complesso. Dovrebbe recuperare il barattolo esatto dal lavoro esatto che lo ha creato. Esegue quindi Elastic Beanstalk per distribuire quel vaso nell'ambiente corretto.
  3. La pipeline successiva è la distribuzione della gestione temporanea. Torna indietro fino alla prima pipeline e recupera il vaso esatto dal lavoro esatto che lo ha creato. In seguito execus Elastic Beanstalk per distribuire quel vaso nell'ambiente corretto.

Queste sono pipeline separate perché ciò consente di eseguire più in parallelo o su richiesta senza bloccare.

È possibile utilizzare Elastic Beanstalk, Chef, Puppet, Ansible, uDeploy o un numero qualsiasi di altri strumenti per eseguire le distribuzioni effettive. Non è da qui che viene il tuo problema. I server di integrazione continua non sono stati originariamente creati per questo scopo. Ovviamente ci sono molti plugin che puoi usare per raggiungere lo stesso posto se questa è la tua preferenza.

I server di consegna continua come GoCD , Chef Automate e ConcourseCI sono stati creati appositamente per risolvere cose del genere.


Sì, il mio obiettivo è costruire una volta e promuovere la produzione. La mia domanda è se beanstalk è adatto a questo tipo di utilizzo. Da quello che posso dire, in realtà non sembra essere; ad esempio, il metodo raccomandato per distribuire un'applicazione .NET è farlo da Visual Studio, che è solo la peggiore pratica che mi venga in mente.
Adrian

Non l'ho usato personalmente, ma sembra che sarebbe cambiando la parola "promozione" in "distribuire". I tuoi sistemi CD chiamano beanstalk da distribuire ai test, eseguono alcuni test e quindi segnalano successo / fallimento. Se ha esito positivo, il sistema CD chiama beanstalk per la distribuzione in gestione temporanea e così via. Quindi, la promozione viene eseguita dallo strumento di orchestrazione, la distribuzione viene eseguita dallo strumento di distribuzione. (Cordiali saluti, questo è il motivo per cui aziende come Chef hanno Hibernate (la cosa), Automatizza (promuovi la cosa) e Chef (distribuisci la cosa).
Ken Mugrage

Cordiali saluti, sembra che potresti scriverlo (l'infrastruttura come il codice è una "buona cosa") docs.aws.amazon.com/elasticbeanstalk/latest/dg/… - ma ancora una volta, assolutamente 0 esperienza personale.
Ken Mugrage

Non importa quale parola usi, beanstalk non sembra farlo, per quanto ne so. Sembra essere orientato allo spiegamento dalla fonte, non dagli artefatti. Dalla pagina collegata: "Quando si esegue eb deploy, l'interfaccia della riga di comando di EB raggruppa i contenuti della directory del progetto e li distribuisce nel proprio ambiente." Apprezzo la risposta, ma la mia domanda è specifica per beanstalk, quindi spero che qualcuno che ha esperienza di beanstalk possa intervenire.
Adrian

Ah, scusa per quello. Stavo interpretando ~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3per indicare qualsiasi file zip che hai bloccato in quella directory. In bocca al lupo!
Ken Mugrage
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.