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.
Jawaban:
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...
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.
sumber
~/eb$ eb deploy Creating application version archive "app-150630_014338". Uploading elastic-beanstalk-example/app-150630_014338.zip to S3
file zip apa pun yang macet di direktori itu. Semoga berhasil!