Artikel ini meneroka konsep, kelebihan, keburukan dan contoh demonstrasi Integrasi Berterusan (CI).
Pertama, mari kita lihat sejarah secara ringkas.
Pada tahun 1999, Kent Beck meneroka topik ini secara mendalam dalam buku pertamanya mengenai Pengaturcaraan Extreme. Pada tahun 2001, CruiseControl, salah satu alat CI sumber terbuka pertama, telah dilahirkan.
Matlamat CI adalah untuk melaksanakan ujian automatik selepas setiap kod komit. Ini memastikan bahawa kod sentiasa kekal berfungsi. Kami memanggil penyepaduan berterusan ini kerana setiap kali kod diubah suai ia disahkan untuk memastikan tiada isu regresi berlaku.
Sebelum kita memahami cara ia berfungsi, mari kita fahami beberapa istilah:
Prinsipnya mudah: setiap kerja mengembalikan kod status (berjaya atau gagal). Jika kerja gagal, saluran paip akan berhenti atau melangkau langkah seterusnya bergantung pada konfigurasi.
Kami akan menggunakan contoh berasaskan GitLab CI. Boleh dikonfigurasikan melalui .gitlab-ci.yml
fail.
<code>image: alpine:latest myjobname: script: - make</code>
Tambah bendera kompilasi, terdapat dua kaedah:
<code>myjobname_hard: script: - CFLAGS="-Wall -Werror" make # 或者 - make compile_flags</code>
Kriteria ialah perpustakaan ujian unit bahasa C.
Sebelum menggunakan Kriteria untuk ujian, anda perlu memasang Kriteria.
<code>before_script: - apt-get update && apt-get install -y libcriterion-dev script: - ./configure - make test</code>
Pisah ujian unit dan ujian fungsi kepada berbilang fasa, anda boleh:
<code>stages: - build - test build: stage: build script: - make all test-unit: stage: test script: - make unit-test test-functional: stage: test script: - make functional-test</code>
Pemformatan kod adalah penting untuk mengekalkan asas kod yang bersih.
<code>image: alpine:latest myjobname: script: - make</code>
Dalam sesetengah kes adalah berguna untuk cache fail atau folder untuk mengelakkan memuatkan semula fail setiap kali saluran paip dijalankan.
Contoh biasa ialah folder node_modules/
dalam JavaScript.
<code>myjobname_hard: script: - CFLAGS="-Wall -Werror" make # 或者 - make compile_flags</code>
Sudah tentu, anda boleh menggunakan pilihan tambahan dalam konfigurasi saluran paip untuk mengosongkan cache jika perlu.
Artifak ialah fail janaan CI yang boleh dikongsi atau dimuat turun merentas kerja.
Contohnya, laporan ujian atau liputan.
<code>before_script: - apt-get update && apt-get install -y libcriterion-dev script: - ./configure - make test</code>
Liputan ujian boleh diukur dengan menyepadukan alatan seperti gcovr atau Cobertura dalam saluran paip CI anda.
<code>stages: - build - test build: stage: build script: - make all test-unit: stage: test script: - make unit-test test-functional: stage: test script: - make functional-test</code>
Blok kod ini membolehkan anda menyepadukan pelaporan liputan ke dalam permintaan gabungan anda supaya anda boleh melihat kod yang tidak dilindungi serta peratusan liputan.
<code>clang_format: stage: format before_script: - apt-get -qq update && apt-get -qq install -y clang-format autotools-dev autoconf-archive gcovr libcriterion-dev script: - clang-format -i $(find src/ -type f -name "*.c") --dry-run --Werror</code>
Anda boleh menentukan persekitaran asas untuk CI dengan memilih imej Docker tertentu.
<code>cache: paths: - node_modules/ install: script: - npm install</code>
Menggabungkan kandungan di atas, anda boleh mendapatkan contoh berikut:
<code>artifacts: paths: - build/ - reports/</code>
Perhatikan bahawa fail
.h
tiada danbefore_script
tiada.
Anda juga boleh menyemak fail sampah untuk memastikan make clean
berfungsi dengan betul.
<code>test-coverage: stage: test script: - gcovr --html --html-details -o coverage.html artifacts: paths: - coverage.html</code>
Penyepaduan berterusan ialah alat yang sangat berkuasa. Walaupun ia boleh menjadi sukar untuk disediakan, faedahnya sangat besar.
Atas ialah kandungan terperinci Menguji adalah menipu, menyusun adalah meragukan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!