Unit 2 / 11

Mereka bentuk Talian Paip CI/CD dengan Kepintaran Buatan: GitHub Actions dan GitLab CI

Keuntungan:

  • Keupayaan untuk memahami konsep CI/CD, anatomi saluran paip (pencetus, kerja, langkah, pelari, artifak) dan perbezaan antara Tindakan GitHub dan GitLab CI serta mempunyai kecerdasan buatan menghasilkan saluran paip dengan konteks yang betul
  • Keupayaan untuk menyemak dan mendapatkan rujukan rahsia, kebenaran dan kewujudan komponen yang dipanggil dalam saluran paip yang dihasilkan oleh kecerdasan buatan
  • Keupayaan untuk menggunakan prinsip tidak menulis rahsia dalam teks biasa, memberikan kebenaran minimum, dan mengekalkan kerahan dikawal dengan memisahkannya daripada CI

Nadi perisian moden ialah saluran paip automatik yang melaluinya kod meninggalkan komputer pembangun sehingga ia selamat sampai kepada pelanggan. Paip ini dipanggil CI/CD. CI (Integrasi Berterusan) ialah penyusunan dan ujian automatik bagi setiap perubahan kod; Tujuannya adalah untuk menangkap pepijat sebelum pembangun meninggalkan papan kekunci. CD (Penghantaran Berterusan/Pengedaran) ialah penyediaan automatik atau bahkan pelepasan kod yang diuji. Talian paip CI/CD ialah fail konfigurasi yang mentakrifkan langkah-langkah ini mengikut tertib — biasanya ditulis dalam YAML (format teks konfigurasi yang boleh dibaca manusia).

Menulis fail YAML ini dengan tangan adalah membosankan, bertele-tele dan mudah ralat; Jika lekukan tergelincir dengan satu ruang, keseluruhan saluran paip pecah. Di sinilah AI datang: dengan konteks yang betul, ia menghasilkan draf yang berfungsi dalam beberapa saat. Tetapi tugas anda untuk memahami dan mengesahkan perkara yang dilakukan oleh setiap langkah yang dijana — kerana ini adalah paip yang membawa kod anda ke prod.

Anatomi saluran paip CI/CD

Setiap saluran paip terdiri daripada beberapa konsep asas. Anda tidak boleh mengawal output AI tanpa mengetahui perkara ini:

  • Pencetus: Apa yang memulakan Saluran Paip? Biasanya tolak ke cawangan, permintaan tarik (permintaan gabungan), atau jadual.
  • Tugas: Unit logik yang melaksanakan satu siri langkah; contohnya "test", "build", "deploy".
  • Langkah: Satu arahan atau tindakan dalam kerja.
  • Runner: Mesin maya atau bekas yang menjalankan tugas.
  • Artifak: Output yang dihasilkan oleh satu kerja dan digunakan oleh kerja berikutnya (contohnya, fail yang disusun).
  • Rahsia: Maklumat sulit yang digunakan oleh Pipeline tetapi tidak boleh kekal dalam teks biasa dalam repositori.

Tindakan GitHub menyimpan definisi ini dalam fail .github/workflows/*.yml; Unitnya ialah aliran kerja → kerja → hierarki langkah. GitLab CI, sebaliknya, menggunakan peringkat → struktur kerja dalam fail .gitlab-ci.yml. AI mengetahui kedua-dua sintaks, tetapi anda mesti menyatakan dengan jelas yang mana satu yang anda mahukan.

Petua: Apabila meminta AI untuk saluran paip, sentiasa nyatakan: platform (Tindakan GitHub atau GitLab CI), bahasa/rangka kerja (Node, .NET, Python...), pencetus dan sama ada ia akan digunakan. Empat maklumat ini menggandakan kegunaan output.

Langkah demi langkah: Mereka bentuk saluran paip dengan AI

  1. Jelaskan matlamat. Seperti "jalankan ujian pada push to main, bina imej, tetapi hanya gunakan apabila teg dilemparkan".
  2. Adakah rangka dihasilkan. Minta AI untuk aliran kerja asas.
  3. Baca dan fahami langkah-langkahnya. Sahkan perkara yang dilakukan oleh setiap larian dan penggunaan baris.
  4. Semak rujukan Rahsia. Adakah rahsia dipanggil dengan ${{ secrets.NAME }} atau adakah ia dibenamkan dalam kod?
  5. Cuba secara tempatan/CI. Jalankan pada repositori ujian kecil, lihat tingkah laku merah-hijau (gagal-lulus).
  6. Kembangkan secara beransur-ansur. Mula-mula cuma tambah CI (ujian), kemudian bina, terakhir tambahkan deploy.

Keselamatan: rahsia dan kebenaran dalam perancangan

CI/CD adalah salah satu tempat di mana rahsia paling banyak bocor. Tiga peraturan emas:

  1. Jangan sekali-kali menulis rahsia dalam teks biasa dalam YAML. Gunakan repositori rahsia platform (Rahsia GitHub, Pembolehubah CI/CD GitLab) dan panggilnya dengan ${{ secrets.X }}.
  2. Keistimewaan paling sedikit. Token yang anda berikan kepada Pipeline hanya akan mempunyai kuasa sebanyak yang diperlukan. Kecilkan ini dengan kebenaran: sekat dalam Tindakan GitHub.
  3. Jangan tekan rahsia pada log. Baris seperti echo $TOKEN mendedahkan rahsia dalam log. Topeng platform, tetapi berhati-hati juga.
Awas: Untuk kemudahan, AI kadangkala meletakkan nilai terbenam seperti kata laluan: 123456 atau kebenaran yang terlalu luas: tulis semua dalam saluran paip sampel. Sentiasa betulkan perkara ini: tukar rahsia kepada rujukan, runtuhkan kebenaran.

carta perbandingan

konsep

Tindakan GitHub

GitLab CI

Fail konfigurasi

.github/workflows/*.yml

.gitlab-ci.yml

unit bangunan

aliran kerja → kerja → langkah

peringkat → pekerjaan

pencetus

sepuluh:

peraturan: / sahaja:

Panggil rahsia

${{ secrets.NAME }}

$NAME (Pembolehubah CI/CD)

Komponen sedia

menggunakan: action@v4

termasuk: /template

pelari

dijalankan:

tag:

tiga kes mini

Kes 1 — Dikurangkan kepada 6 jam dan 40 minit. Satu pasukan mahu mengautomasikan proses penggunaan ujian binaan manual mereka, tetapi tiada siapa yang biasa dengan YAML. Mereka menyifatkan YZ sebagai "projek Node.js, GitHub Actions, npm test dan npm build in push to main, gunakan hanya dalam teg v*". AI menghasilkan rangka kerja sebanyak 40 baris; Pasukan mengesahkan setiap langkah dan disiarkan secara langsung dalam masa 40 minit. Jika mereka menulisnya dengan tangan, ia akan menjadi kerja sehari.

Kes 2 — Pengesahan mendapat kelemahan keselamatan. Seorang jurutera meminta AI untuk menggunakan aliran kerja. Outputnya termasuk kebenaran: tulis-semua — bermakna token boleh menulis ke repositori, pakej, segala-galanya. Jurutera menyedari perkara ini dan mengecilkannya dengan kebenaran: { contents: read, packages: write }. Ini menghapuskan risiko pergantungan yang dirampas menggantikan keseluruhan repositori.

Kes 3 — Tindakan halusinasi. Satu pasukan menjalankan kegunaan yang dicadangkan AI: barisan tindakan/terapkan-ke-aws@v3; Tiada tindakan rasmi sedemikian, AI mencipta nama itu. Saluran paip meletup dengan "tindakan tidak ditemui". Pelajaran: Sahkan dalam Marketplace bahawa setiap komponen yang dipanggil dengan kegunaan: sebenarnya wujud.

Empat templat yang boleh disalin

1) Aliran kerja CI asas:

Tulis aliran kerja CI untuk Tindakan GitHub. Projek: [BAHASA/RANGKA KERJA]. Pencetus: permintaan tolak dan tarik ke cawangan utama. Langkah: pasang kebergantungan, jalankan ujian, jalankan lint. NO Deploy.Runner ubuntu-terbaru. Tiada rahsia diperlukan. Anotasi YAML.

2) Aliran kerja CD yang digunakan (selamat):

Tulis aliran kerja penggunaan untuk [PLATFORM]. Ia hanya berfungsi pada tag 'v*'. Sasaran: [MEDIA/CLOUD]. Peraturan: - JANGAN sesekali menulis rahsia dalam teks biasa, panggil mereka dengan ${{ rahsia.

3) Terangkan saluran paip sedia ada:

Terangkan [PLATFORM] saluran paip berikut demi baris: apakah yang dilakukan oleh setiap kerja, dalam urutan apakah ia dijalankan, apakah rahsia yang ia gunakan, dan apakah dua titik paling berisiko? Akhir sekali, cadangkan 3 penambahbaikan. Saluran Paip: [KANDUNGAN YAML]

4) Mempercepatkan Saluran Paip:

Saluran paip CI berikut berjalan perlahan (tempoh: [X min]). Periksa penggunaan cache, kerja selari dan langkah yang tidak perlu. Berikan 5 cadangan pecutan yang konkrit dan boleh diambil tindakan dan tuliskan anggaran impak setiap satu. Saluran paip: [YAML]

Gesaan lemah / Gesaan kuat

Lemah: "Tulis aliran kerja Tindakan GitHub."

Keputusan: tidak jelas bahasa mana, yang mencetuskan, sama ada terdapat penempatan; AI memberikan contoh Node generik, mungkin tidak sesuai dengan projek anda, dan boleh mengekod rahsianya.

Kuat: "Tulis aliran kerja GitHub Actions. Projek Python 3.12, jalankan pytest + ruff dalam permintaan tarik dan tolak utama; NO deploy; mempercepatkan kebergantungan dengan cache pip; tiada rahsia diperlukan. Eksport YAML dengan ulasan."

Perbezaan: gesaan kedua memberikan bahasa, pencetus, skop (tiada penggunaan), jangkaan prestasi dan kekangan keselamatan. Output berfungsi secara langsung.

Kesilapan biasa

  • Membenamkan Rahsia dalam YAML. Kata laluan/token teks biasa ialah kerentanan CI yang paling biasa.
  • Permit yang terlalu luas. Berikan kebenaran minimum yang diperlukan dan bukannya tulis semua.
  • Bergantung pada tindakan/templat yang tidak wujud. Sahkan penggunaan buatan AI: baris dalam Marketplace.
  • Mengelirukan Deploy dengan CI. Ujian boleh dijalankan pada setiap tolakan, tetapi penggunaan mesti dikawal dan diluluskan.
  • Tidak menggunakan cache. Memasang kebergantungan dari awal pada setiap larian memperlahankan saluran paip dalam beberapa minit.
  • Mencuba aliran kerja pertama secara langsung dalam repositori utama. Jalankan pada repositori ujian terlebih dahulu.

Secara ringkasnya

Talian paip CI/CD ialah paip automatik yang memindahkan kod dengan selamat ke prod dan ditakrifkan dengan YAML. AI dengan cepat menghasilkan pelan tindakan yang berfungsi untuk GitHub Actions dan GitLab CI — tetapi anda perlu jelas tentang platform, bahasa, pencetus dan skop penggunaan. Terdapat tiga peraturan dalam keselamatan: rahsia panggilan melalui rujukan, berikan keistimewaan minimum, jangan cetak rahsia dalam log. Anda bertanggungjawab untuk mengesahkan bahawa setiap komponen menggunakan:/include: benar-benar wujud dan perkara yang dilakukan oleh setiap langkah.

Tugasan permohonan

Pilih contoh projek mudah (walaupun "hello world" dalam bahasa anda akan berjaya). Minta AI menghasilkan aliran kerja dengan templat "Aliran kerja CI Asas" di atas. Kemudian: (1) tulis dengan perkataan anda sendiri apa yang dilakukan oleh setiap langkah; (2) mengesahkan bahawa tiada rahsia tertanam dan kebenaran adalah sempit; (3) Jika boleh, jalankan ia dalam tangki ujian dan perhatikan tingkah laku merah-hijau.

senarai semak

  • [ ] Saya menambahkan platform, bahasa/rangka kerja, pencetus dan atur skop pada gesaan saya.
  • [ ] Saya faham apa yang dilakukan oleh setiap kerja dan langkah dalam YAML yang dijana.
  • [ ] Tiada rahsia adalah plaintext; semua ${{ rahsia.X }} / pembolehubah CI.
  • [ ] Saya mengecilkan kebenaran kepada pihak berkuasa minimum.
  • [ ] Saya mengesahkan bahawa semua tindakan/templat yang dipanggil sebenarnya wujud.
  • [ ] Saya membuat langkah penempatan dikawal dengan kelulusan/perlindungan.