Di perusahaan saya, kami memiliki rawa pekerjaan cron yang berbeda (pada beberapa sistem) dan secara manual memulai proses yang menjaga fungsi bisnis kami yang merupakan hasil dari pengembangan yang cepat dan pengabaian selanjutnya.
Suatu hari, kita perlu menemukan solusi yang lebih terpusat untuk alasan yang jelas.
Satu pemikiran yang telah kami lakukan adalah menggunakan perangkat lunak Continuous Integration (Jenkins) kami untuk menjalankan proses ini, yang tampaknya logis.
Pertanyaan saya adalah: Apakah perusahaan lain melakukan ini? Apakah ini praktik yang diterima secara umum? Tidakkah ini bertentangan dengan definisi alat CI yang tersirat dalam namanya? Apakah ada opsi lain?
Catatan: https://wiki.jenkins-ci.org/display/JENKINS/Meet+Jenkins
Jenkins mengklaim bahwa ia berfokus pada "Memantau eksekusi pekerjaan yang dijalankan secara eksternal, seperti pekerjaan cron dan pekerjaan procmail". Saya tidak yakin apakah ini yang saya bicarakan.
sumber
Jawaban:
Kami telah menggunakan Jenkins sebagai cron drop in selama beberapa tahun sekarang, dan berikut adalah beberapa pro dan kontra:
Pro
Jika Anda mengelola sejumlah besar proses di berbagai server dan beberapa lingkungan, itu membuat banyak hal lebih mudah. Anda mendapatkan peringatan email di luar kotak, dasbor umum untuk semuanya, antarmuka web untuk log, dan cara mudah untuk menyiapkan node tambahan untuk menjalankan pekerjaan. Tim pendukung terutama menghargai memiliki lokasi pusat ini untuk memeriksa masalah dan menjalankan kembali pekerjaan.
Ekosistem plug-in Jenkins sangat aktif dan menyediakan sejumlah fungsi tambahan ... Saya pikir ini benar-benar fitur 'pembunuh' Jenkins, karena jika Jenkins sendiri tidak menyediakan apa yang Anda cari (sering kali), lebih lanjut sering kali tidak ada plugin yang melakukannya. Beberapa favorit saya: Kolom Cron, Rebuild, Parameter NodeLabel, Log Parser, dan Email-ext.
Dukungan penjadwalan / pemicu lanjutan: Sintaks jadwal pada dasarnya adalah cron, jadi Anda memiliki fleksibilitas yang sama di sana, tetapi ini dilengkapi oleh Pemicu, API REST, dan API Groovy / Java
Cons
Titik pusat kegagalan: Karena semua pekerjaan Anda dimulai oleh satu server, jika kotak itu turun dan tidak ada yang memperhatikan, Masalah Besar. Jadi Anda sebaiknya memiliki pemantauan yang baik untuk menangkap pemadaman segera, serta semua konfigurasi Anda disimpan dalam kontrol sumber. Bahkan jika Anda tidak dapat membuat cadangan server asli, selama Anda memiliki pekerjaan Anda mengkonfigurasi itu sepele untuk membuatnya di tempat lain. Jika waktu untuk resolusi adalah masalah, memiliki siaga yang sudah dikonfigurasi sebelumnya di suatu tempat mungkin juga merupakan ide yang baik.
Jika Anda memiliki beberapa lingkungan (Dev, UAT, Prod), biasanya Anda memiliki versi pekerjaan yang sedikit berbeda di setiap lingkungan. Memiliki semua pekerjaan ini pada satu Jenkins bisa menjadi berat, dan secara manual mengonfigurasi mereka menjadi sangat menyebalkan. Dalam kasus kami, kami menjalankan instance Jenkins 'Cron' yang terpisah untuk setiap lingkungan. Mesin virtual diinstal dan dikonfigurasikan secara otomatis menggunakan alat penyebaran in-house. Anda mungkin tidak memiliki sesuatu seperti itu, tetapi ada alat open source yang melakukan hal serupa (menghasilkan konfigurasi menggunakan templat). Jika Anda dapat memecahkan masalah pembuatan konfigurasi, ini membuat pengaturan dan penggunaan Jenkins jauh lebih mudah, dan juga membuatnya lebih mudah untuk menjaga semua barang Anda di kontrol sumber.
Memutakhirkan Jenkins terkadang merusak fungsionalitas, terutama dengan plugin. Jangan meng-upgrade instance Jenkins Anda yang penting misi sebelum Anda mencoba versi baru di tempat lain terlebih dahulu. Di sinilah memiliki lingkungan Dev cermin dengan contoh Jenkins sendiri sangat berguna.
Satu hal yang mungkin ditekankan: Kami memang juga menggunakan Jenkins untuk CI, tapi ini adalah contoh terpisah ... contoh 'cron' didedikasikan untuk manajemen pekerjaan, dan contoh 'CI' didedikasikan untuk CI. Memisahkan kekhawatiran tampaknya membuat segalanya lebih bersih.
Sebagai catatan, saya menggunakan Jenkins daripada cron di kotak Linux saya di rumah :)
Omong-omong, ini sebenarnya kasus penggunaan Jenkins yang sangat umum. Misalnya, Lab Nasional Sandia menggunakan Jenkins dengan cara ini: https://software.sandia.gov/trac/fast/wiki/Hudson
Dan ada banyak posting blog dan tutorial yang menjelaskan hal ini. Berikut adalah beberapa contoh: http://blog.vuksan.com/2011/08/22/using-jenkins-as-a-cron-server/
http://morgajel.net/2011/12/12/12/1108
Saya juga harus menambahkan bahwa ini benar-benar hanya berkaitan dengan Jenkins, dan tidak semua alat CI secara umum. Hanya karena Jenkins sangat cocok untuk melakukan ini tidak berarti orang lain (TeamCity, buildbot, dll) ...
sumber
Saya akan mengatakan bahwa Anda tidak menggunakan alat yang tepat untuk pekerjaan di sini karena titik utama alat CI adalah bahwa mereka memantau sesuatu - kode sumber Anda biasanya - dan ketika ada perubahan mereka memulai build / deploy / apa pun .
Namun, alat-alat ini dapat menjalankan pekerjaan yang dijadwalkan (misalnya TeamCity), jadi Anda dapat menggunakan situs web (misalnya) ketika tidak ada orang di sekitarnya. Jadi memiliki satu daftar pusat dari semua tugas yang Anda jalankan sebenarnya adalah ide yang bagus. Alat tersebut juga harus memungkinkan Anda untuk memutuskan kapan dan seberapa sering pekerjaan ini dijalankan.
Manfaat lain adalah Anda bahkan dapat memonitor sistem dari jarak jauh (jika Anda mau).
Jadi, secara seimbang, saya katakan itu hal yang masuk akal untuk dilakukan.
sumber
Sepertinya cron sudah menjadi alat yang tepat untuk kebutuhan Anda. Saya sarankan Anda mulai dengan mendokumentasikan sistem Anda lebih baik. Audit berbagai sistem dan kumpulkan daftar lengkap proses mana yang berjalan pada mesin mana.
Kemudian pertimbangkan untuk menunjuk mesin khusus untuk menjalankan semua proses cron ini. Pastikan Anda mendokumentasikan mesin ini, dan berikan hak admin yang sesuai untuk mengendalikannya. Letakkan semua cronjobs pada mesin itu, dan kemudian Anda memiliki titik pusat kendali untuk berbagai proses otomatis Anda.
sumber
Reaksi usus saya adalah sama, bahwa Anda menggunakan alat yang memiliki konsep jadwal di dalamnya, untuk melakukan pekerjaan penjadwal pekerjaan.
Anda belum menyebutkan apa pekerjaan Anda, tetapi penyebutan CRON membuat saya menebak itu adalah skrip shell, dll. Ada paket sumber terbuka dan penjadwal pekerjaan komersial di luar sana. Terkadang mereka disebut sebagai penjadwal batch. Beberapa hanya akan membungkus CRON dan membuatnya lebih ramah. Beberapa, seperti Quartz scheduler, melakukan manajemen pekerjaan yang kuat, tetapi mengharuskan mereka untuk diimplementasikan sebagai kelas Java. Anda berpotensi menggunakannya, dan membungkus panggilan runtime ke berbagai skrip Anda menggunakan pembungkus java. Saya percaya Anda akan menemukan banyak opsi jika Anda melihat lebih jauh.
sumber
Jangan gunakan CI untuk menjalankan tugas berkala yang tidak terkait dengan membangun.
Juga hindari cron untuk tugas-tugas yang tidak terkait dengan pemeliharaan sistem.
Gunakan alat yang tepat. Untuk kebutuhan aplikasi - coba gunakan solusi berbasis AMQP.
PS Saya mengerti, cron itu cocok untuk kasus Anda. Di sisi lain, Anda memiliki banyak tugas - jadi cobalah menulis aplikasi penyelia untuk mereka.
sumber
Anda perlu menggunakan bus layanan perusahaan (ESB) untuk jenis tugas ini.
Sekarang latar belakang saya ada di windows / BizTalk, tapi saya yakin semua hal yang sama ada di sisi unix. Apa yang biasanya kita lakukan adalah mengatur proses pada kotak BizTalk yang akan bertugas memulai hal-hal di kotak lain, memantau kemajuan / kesalahan, dan melaporkan kembali status ke portal SharePoint (atau web), atau mengirim email dan seperti itu jika perlu perhatian.
Manfaat dari pendekatan ini adalah bahwa semua konfigurasi dan pengelolaan berbagai proses bisnis Anda berlokasi di pusat, sehingga Anda tahu di mana harus mulai mencari. Perangkat lunak sudah ada yang memungkinkan Anda mengabstraksi bagian pengkodean dari konfigurasi fisik (di BizTalk Anda dapat memprogram melawan 'port' yang logis seperti server sql, dan kemudian di prod, jika kotak sql mengubah lokasi atau ditingkatkan atau apa pun, Anda dapat mengubah port fisik yang dikonfigurasi menggunakan alat admin mereka, sekali lagi, saya yakin ada padanan di sisi unix).
Manfaat daripada menggunakan alat CI akan menjadi hal-hal seperti, jika proses Anda keluar, Anda dapat secara otomatis, mengirim ulang pesan secara fisik dan Anda dapat mengatur lingkungan gagal-berkerumun yang berkelompok, memiliki sistem pencatatan dan pencatatan yang lebih cocok; juga, setelah Anda memiliki sistem di tempat, itu akan memungkinkan Anda untuk mulai merancang organisasi Anda untuk digunakan, atau lebih baik menggunakan SOA. Sisi buruknya adalah bahwa tergantung pada ukuran organisasi Anda, upaya pengembangan mungkin tinggi, dan biaya lisensi mungkin mahal.
sumber
Secara teoritis masuk akal bagi Anda untuk memiliki satu lokasi untuk mengendalikan semua pekerjaan yang berbeda, namun berdasarkan pengalaman industri yang seperti "Holy Grail" Anda akan memerlukan pekerjaan cron di sini, bash skrip di sana dan skrip cli di sini.
Ada juga mantra "Jika tidak rusak, jangan perbaiki", jadi ketika mereka berjalan lamban, pada awalnya fokus pada mendokumentasikan skrip apa yang telah Anda jalankan, apa yang mereka lakukan dan sistem apa yang mereka sentuh sehingga Anda "tahu "Bagaimana bisnis Anda dijalankan.
Kemudian sebagai strategi jangka panjang menyiapkan sistem terpusat untuk menjalankan pekerjaan, pilih solusi Anda dengan bijak karena Anda harus hidup dengan itu. Kemudian untuk setiap permintaan perubahan, peningkatan, peningkatan, perbaikan bug atau solusi baru yang Anda tambahkan dalam arsitektur bisnis Anda memastikan bahwa tugas yang dijadwalkan dan otomatis ditambahkan ke "solusi kontrol perusahaan" Anda.
Dengan begitu, Anda secara bertahap bermigrasi dari kumpulan skrip ke lingkungan yang lebih ramah perusahaan.
sumber
Dalam sistem perusahaan besar tempat saya bekerja, mereka cenderung menggunakan alat yang dirancang untuk penjadwalan. Yang paling populer yang saya gunakan adalah CA7. Ini memungkinkan Anda untuk memusatkan semua penjadwalan untuk semua sistem Anda.
Cron umumnya digunakan untuk mesin tunggal, meskipun Anda dapat "meretasnya" dengan melakukan panggilan jarak jauh ssh. Namun, itu tidak akan memiliki konsep dependensi dan hal-hal lain. Ketika datang ke tim operasi di mana ruang lingkup mereka bahkan lebih terbatas, yang terbaik adalah alat yang digunakan.
sumber