Apakah Elastic Beanstalk cocok untuk CD kelas perusahaan?


11

Saya bekerja dengan proyek yang menggunakan Jenkins untuk membangun dan menggunakan layanan microser ke Elastic Beanstalk. Kami menyebarkan cabang integrasi ke lingkungan pengujian, melepaskan cabang ke lingkungan pementasan, dan kemudian membangun master akhir untuk produksi. Saya memiliki beberapa masalah dengan melakukannya dengan cara ini: pertama, itu berarti kita berakhir dengan matriks satu build per proyek per lingkungan, upaya duplikasi; dan kedua, itu berarti kami tidak menggunakan artefak build yang sama untuk produksi yang divalidasi dalam pementasan.

Saya cenderung meninggalkan Beanstalk dan pindah ke ASG biasa menggunakan sesuatu seperti Chef untuk penempatan. Itu akan meninggalkan kita dengan satu bangunan per proyek, menghasilkan artefak bangunan, dan kita dapat menggunakan artefak yang sama untuk produksi yang disetujui dalam pementasan. Transisi memiliki biaya di muka yang tidak signifikan. Apakah ada cara untuk menggunakan Beanstalk dengan lebih baik yang memungkinkan CI / CD lebih andal dan mudah dikelola?

Catatan : Mempromosikan artefak bangunan yang sama persis dengan apa yang ingin saya lakukan, tetapi dari dokumen saya tidak melihat cara yang jelas untuk melakukan itu; ini menjelaskan cara menggunakan EB dari sumber aplikasi Anda, tetapi tidak bagaimana mempromosikan versi yang ada ke lingkungan lain, kecuali saya berhasil menggulir melewatinya. Jika tersedia di EB sendiri, mungkin ada batasan dalam plugin penyebaran Jenkins EB yang mencegahnya dilakukan di Jenkins secara khusus, tapi saya belum melihat cara untuk melakukannya sama sekali.


Apakah lingkungan Jenkins Anda yang menerapkan batasan satu bangunan per batasan lingkungan? Saya menggunakan Elastic Beanstalk untuk menyebarkan aplikasi dan artefak aplikasi yang diunggah dapat dipromosikan (disebarkan) ke beberapa lingkungan dengan baik. Jadi, saya tidak benar-benar melihat batasan yang Anda gambarkan. Sepertinya mungkin ada cara Anda dapat menggunakan Elastic Beanstalk untuk melakukan apa yang Anda inginkan. Tetapi pertanyaan ini cukup luas seperti saat ini.
Andy Shinn

Mengapa Anda membangun kembali aset Anda alih-alih mempromosikan aset yang sama ke lingkungan lain setelah pengujian?
Evgeny

Jawaban:


4

Menurut pendapat saya, masalah Anda bukan dengan Elastic Beanstalk dalam skenario itu, itu dengan Jenkins, atau setidaknya cara Anda menggunakannya. Anda harus benar-benar berkonsentrasi membangun "sesuatu" hanya sekali, apa pun itu.

Pengungkapan Penuh: Saya bekerja untuk ThoughtWorks dan saya sangat bias terhadap GoCD. Saya akan mencoba menjabarkan apa yang saya maksud sebagai netral yang saya bisa. Saya akan menggunakan dokumen alat kami sebagai contoh, tetapi mudah-mudahan orang dapat memperkirakan sistem mereka.

Di suatu tempat di awal pipa Anda, Anda sedang membangun "artefak". Ini bisa berupa biner yang mewakili semua atau sebagian dari aplikasi Anda, atau bisa berupa output dari sejumlah alat seperti alat pengujian. Artefak ini harus disimpan oleh sistem dan tidak pernah dibangun lagi. Sistem kemudian harus mengambil artefak dari revisi yang tepat saat dibutuhkan.

Sebagai contoh...

  1. Saya membangun file .jar dan menjalankan beberapa unit test di atasnya, dasar C / I stuff. Jika lulus, file .jar itu dan output dari tes akan diunggah ke pekerjaan pipa tertentu .
  2. Pipa berikutnya bisa jadi penyebaran Anda ke lingkungan pengujian yang lebih kompleks. Seharusnya mengambil tabung yang tepat dari pekerjaan yang tepat yang membuatnya. Itu kemudian mengeksekusi Elastic Beanstalk untuk menyebarkan toples itu ke lingkungan yang benar.
  3. Pipa berikutnya adalah penyebaran pementasan Anda. Semua jalan kembali ke pipa pertama dan mengambil tabung yang tepat dari pekerjaan yang tepat yang membangunnya. Di kemudian jalankan Elastic Beanstalk untuk menyebarkan tabung itu ke lingkungan yang benar.

Ini adalah masing-masing pipa terpisah karena itu memungkinkan Anda untuk menjalankan lebih banyak secara paralel atau sesuai permintaan tanpa memblokir.

Anda bisa menggunakan Elastic Beanstalk, Chef, Puppet, Ansible, uDeploy atau sejumlah alat lain untuk melakukan penyebaran yang sebenarnya. Itu bukan asal masalah Anda. Server Integrasi berkelanjutan tidak dibangun pada awalnya untuk melakukan ini. Tentu saja ada banyak plugin yang dapat Anda gunakan untuk sampai ke tempat yang sama jika itu pilihan Anda.

Server Pengiriman Berkelanjutan seperti GoCD , Chef Automate, dan ConcourseCI dibuat khusus untuk menyelesaikan hal-hal seperti ini.


Ya, tujuan saya adalah membangun sekali dan mempromosikan ke produksi. Pertanyaan saya adalah apakah beanstalk cocok untuk jenis penggunaan ini. Dari apa yang bisa saya katakan, sepertinya tidak; misalnya, metode yang disarankan untuk menggunakan aplikasi .NET adalah melakukannya dari visual studio, yang merupakan praktik terburuk yang dapat saya pikirkan.
Adrian

Saya belum menggunakannya secara pribadi, tetapi sepertinya jika Anda mengubah kata "promosikan" menjadi "deploy". Sistem CD Anda memanggil beanstalk untuk disebarkan ke pengujian, menjalankan beberapa tes dan kemudian melaporkan keberhasilan / kegagalan. Jika berhasil, sistem CD Anda memanggil beanstalk untuk disebarkan ke pementasan, dan seterusnya. Jadi, promosi dilakukan oleh alat orkestrasi Anda, penyebaran dilakukan oleh alat penyebaran Anda. (FYI, inilah mengapa perusahaan seperti Chef memiliki Hibernate (hal itu), Automate (mempromosikan hal itu) dan Chef (menyebarkan hal itu)
Ken Mugrage

FYI, sepertinya Anda dapat membuat skrip (infrastruktur karena kode adalah "hal yang baik") docs.aws.amazon.com/elasticbeanstalk/latest/dg/… - tetapi sekali lagi, benar-benar 0 pengalaman pribadi.
Ken Mugrage

Tidak peduli apa kata yang Anda gunakan, beanstalk tampaknya tidak melakukannya, sejauh yang saya tahu. Tampaknya diarahkan untuk penyebaran dari sumber, bukan dari artefak. Dari halaman yang Anda tautkan: "Ketika Anda menjalankan eb deploy, EB CLI bundel konten direktori proyek Anda dan menyebarkannya ke lingkungan Anda." Saya menghargai jawabannya tetapi pertanyaan saya khusus untuk beanstalk sehingga mudah-mudahan seseorang yang memiliki pengalaman beanstalk dapat berbaur.
Adrian

Ah, maaf soal itu. Saya mengartikan ~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3file zip apa pun yang macet di direktori itu. Semoga berhasil!
Ken Mugrage
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.