Apa yang dimaksud dengan "pembuatan otomatis"?

15

Saya mencoba menambahkan Integrasi Berkelanjutan ke proyek.

Menurut Wikipedia , salah satu bagian utama CI adalah pembuatan otomatis. Namun, saya bingung tentang apa, tepatnya, artinya, karena CI dan artikel otomasi tampaknya tidak setuju.

Titik-titik kebingungan khusus: apa yang dimaksud dengan "bangunan otomatis" dalam konteks:

  • proyek menggunakan bahasa yang ditafsirkan, seperti Python atau Perl?
  • membangun dari sumber pada mesin pengguna akhir?
  • aplikasi yang memiliki dependensi yang tidak dapat dengan mudah dikompilasi dan didistribusikan, seperti database di RDBMS lokal ke mesin pengguna?

sumber
2
Saya telah menandai keduanya buildsdan buildkarena saya tidak tahu mana yang harus digunakan.

Jawaban:

14

Anda benar dalam mencatat bahwa, untuk beberapa teknologi, langkah kompilasi tidak diperlukan. Namun, saya sarankan Anda mengambil pandangan yang lebih luas ketika menafsirkan istilah "build automation". Pikirkan tentang "membangun" dengan memasukkan dua komponen utama berikut:

  • Proses untuk artefak sumber transformasi (kode, skema database, dokumentasi, dll.) Digunakan untuk pengguna akhir.
  • Penerapan langkah-langkah jaminan kualitas selama transformasi tersebut

Otomasi, dengan demikian, hanya merujuk pada membuat operasi otomatis apa pun - jika tidak semua - (yaitu, tidak memerlukan intervensi manual). Ini mungkin termasuk berbagai langkah, tergantung pada teknologi Anda:

Langkah transformasi:

  • Kompilasi
  • Menautkan
  • Pengemasan
  • Penyebaran
  • Migrasi data
  • Cadangkan
  • Pemberitahuan

Langkah-langkah jaminan kualitas:

  • Peringatan / kesalahan kompilator
  • Tes unit
  • Tes integrasi
  • Tes sistem
  • Otentikasi penyebaran

Saat ini, alat CI yang baik akan memungkinkan Anda mengatasi semua masalah ini. Awalnya, sebagian besar toko tertarik untuk mengotomatiskan kompilasi kode mereka, karena itu adalah sumber masalah pertama dan paling terlihat dalam pengembangan perangkat lunak konvensional.

Stephen Gross
sumber
21

Build otomatis adalah deskripsi proses yang harus mencakup dasar-dasar berikut:

  1. Ambil kode terbaru dari Kontrol Sumber
  2. Kompilasi kode terbaru ke dalam executable
  3. Jalankan tes (tes unit, tes sistem, tes integrasi) terhadap kode yang dikompilasi
  4. Menyebarkan selesai dieksekusi ke lokasi yang dikenal untuk penyebaran.
  5. Publikasikan hasil pembuatan.
    5.1 Kompilasi Berhasil, Tes unit berhasil

Ini adalah proses lepas tangan yang harus dijalankan tanpa intervensi manual.

Sheldon Warkentin
sumber
3
Karena ditanya secara eksplisit, Anda mungkin menyebutkan bahwa langkah-langkah yang tidak berlaku adalah opsional. Misalnya, jika aplikasi Anda adalah sekelompok skrip python, langkah 2 mungkin bukan apa-apa, atau mungkin sesuatu yang sederhana seperti zipping kode ke dalam satu file. Sangat diterima untuk tidak memiliki langkah kompilasi.
Bryan Oakley
@BryanOakley Itu adil. Setara dengan tidak memiliki kompilasi untuk skrip dapat memastikan bahwa semua dependensi Anda, jika Anda punya, dikumpulkan dengan benar pada saat ini. Misalnya, pustaka pihak ketiga tambahan apa pun yang diperlukan oleh skrip Python Anda harus disertakan sehingga disertakan dalam semua langkah berikut. Ini tidak perlu juga, saya kira, jika diketahui bahwa mesin target dan build selalu memiliki semua perpustakaan yang diperlukan.
Sheldon Warkentin
2

Menurut saya, build otomatis adalah sesuatu yang

  • terjadi secara otomatis, baik pada jadwal atau dengan masing-masing komit ke kontrol sumber
  • membuat seperangkat artefak yang dapat digunakan secara sederhana ke server mana pun

Tujuannya adalah untuk memiliki proses penyebaran yang dapat diulang - baca: diuji - sehingga pada saat Anda menyebar ke produksi, Anda memiliki tingkat kepastian yang adil bahwa segala sesuatu tidak akan salah. Semakin sedikit interaksi manusia dalam proses build dan deploy, semakin aman rilis Anda.

Jika Anda memiliki bahasa yang tidak dikompilasi, Anda masih dapat membangun situs dan men-zipnya untuk membuat satu artefak.

Alat CI yang baik akan memungkinkan Anda untuk skrip banyak tugas ke dalam proses pembuatan, termasuk menjalankan unit test. Itu juga akan menyimpan catatan bangunan Anda yang berhasil dan tidak berhasil, cakupan pengujian, dll. Tapi tidak ada yang merupakan bagian dari apa yang saya definisikan sebagai bangunan otomatis. (mis. Proses build otomatis yang baik memiliki hal-hal ini, tetapi yang buruk tidak gagal disebut "build otomatis" karena tidak memiliki hal-hal itu.)

Saya menyarankan agar tes integrasi / regresi dijalankan sebagai bagian dari proses penerapan, bukan proses pembangunan (meskipun, jika Anda memiliki lingkungan yang nyaman, Anda dapat menggunakan setiap bangunan).

pdr
sumber
Mungkin juga berguna untuk memiliki build terjadwal dan memungkinkan pengembang untuk memulai build otomatis dengan satu tindakan (jika dua tindakan, itu tidak benar-benar otomatis, kan?) Dalam kasus kami, build untuk beberapa sistem terlalu merindukan kickoff setiap komitmen, jadi sesuai jadwal dan berdasarkan permintaan.
David Thornley
@ Davidvidhorn: Ya. Itu berguna. Sebagian besar alat CI memungkinkan Anda memulai membangun di luar jadwal yang Anda tetapkan. Tetapi sekali lagi, itu tidak berhenti menjadi bangunan otomatis karena opsi ini tidak ada. Itu akan berhenti menjadi bangunan otomatis jika pengembang selalu harus memicunya.
pdr
1
a project using an interpreted language, such as Python or Perl?

Dalam kasus bahasa yang ditafsirkan, hal-hal dapat dipukul atau dilewatkan. Beberapa bahasa interpenetrasi memiliki kompiler tetapi lebih sering daripada tidak ada kemungkinan tidak banyak kebutuhan untuk menggunakannya. Dalam hal ini, saya biasanya hanya memindai kode untuk sintaks dan kesalahan parsing di tempat kompilasi atau langsung melompat untuk menjalankan tes pada kode.

membangun dari sumber pada mesin pengguna akhir?

Bagi saya ini berarti bahwa Anda dapat memberikan perintah tunggal yang dapat dijalankan oleh pengguna akhir untuk mendapatkan versi terbaru dari program, kompilasi, konfigurasikan, dan sebarkan sesuai kebutuhan.

aplikasi yang memiliki dependensi yang tidak dapat dengan mudah dikompilasi dan didistribusikan, seperti database di RDBMS lokal ke mesin pengguna?

Ini akan berada di bawah bagian pengujian integrasi berkelanjutan karena Anda dapat secara otomatis menghancurkan dan merekonstruksi basis data untuk memastikan bahwa skrip benar dan bahwa program mengujinya dengan benar.

rjzii
sumber
1

Apa yang Anda diskusikan dalam pertanyaan Anda sebenarnya adalah 3 konsep berbeda:

Integrasi berkelanjutan pada intinya adalah membuat perubahan kecil dan sering menyinkronkan perubahan itu dengan "kebenaran global". Alih-alih melakukan checkout dan menahannya selama seminggu, seorang pengembang harus mengerjakan tugas-tugas yang dapat diselesaikan dalam satu hari sehingga kodenya tidak pernah terlalu tidak sinkron dengan repositori utama.

Untuk mencapai ini tanpa menyebabkan rasa sakit timnya (yaitu memeriksa sumber yang tidak membangun atau merusak fungsi yang ada). Pengembang harus memverifikasi bahwa kodenya tidak "merusak build". Jika dilakukan secara manual, ini menambah overhead tambahan ke proses pengembangan (bayangkan sebuah proyek yang membutuhkan waktu lama untuk membangun dan / atau memiliki banyak saling ketergantungan di mana perubahan pada satu baris kode dapat memengaruhi aplikasi dengan cara yang tidak terduga).

Untuk mengurangi situasi ini, kami menggunakan teknik lain untuk menghapus overhead ini.

Kami menggunakan build otomatis untuk checkout sumber dan membangunnya opsional menjalankan tes otomatis yang memverifikasi aplikasi berfungsi sebagaimana mestinya (langkah ini hanya berguna seperti test suite).

Langkah lebih lanjut pengiriman berkelanjutan mengatasi masalah Anda dengan database dan masalah lainnya. Idenya di sini adalah untuk menyediakan beberapa tingkat versi untuk database dan faktor-faktor lain dari lingkungan sehingga kami dapat mengkonfirmasi secepat mungkin bahwa aplikasi bekerja di lingkungan yang sedekat mungkin dengan produksi .

Michael Brown
sumber
1
Poin bagus ... terlalu buruk bahwa kebanyakan orang tidak membaca sampai ke bagian bawah utas dan memilih.
hotshot309
0

"Automated build" berarti Anda dapat beralih dari kontrol sumber ke paket yang dapat dikirim dengan satu tindakan (dapat dijadwalkan) (biasanya skrip shell atau file batch).

Apa sebenarnya yang dimaksud dengan membangun, dalam konteks ini, sangat tergantung pada apa sebenarnya yang Anda kirim, bagaimana pengirimannya, dan langkah-langkah mana yang diperlukan untuk berbagai bagian tumpukan pengembangan Anda, tetapi dalam hal apa pun, Anda mulai dengan apa yang ada di kontrol sumber, dan Anda berakhir dengan produk yang dapat dikirim (atau pesan kesalahan dan manajer proyek yang marah).

Untuk proyek Python sederhana, build otomatis mungkin hanya terdiri dari dua langkah - memeriksa sumber, dan menyalin file yang relevan ke direktori yang benar. Untuk proyek yang lebih kompleks, mungkin melibatkan hal-hal seperti:

  • kompilasi, menautkan
  • menjalankan tes otomatis
  • membuat paket pemasang
  • menginstal
  • memodifikasi database
  • membuat cadangan (jika Anda perlu memutar kembali)
tammmer
sumber