Sebelum kita menyelami persediaan, mari kita kupas secara ringkas sebab CI/CD sangat kritikal:
Dalam ReadmeGenie, kami memanfaatkan Tindakan GitHub sebagai alat CI/CD kami. Ia disepadukan dengan lancar dengan repositori GitHub dan menawarkan fleksibiliti dan automasi melalui fail konfigurasi YAML.
Saluran paip CI/CD kami termasuk langkah automatik berikut:
Aliran kerja CI ditakrifkan dalam .github/workflows/python-app.yml. Berikut ialah pecahan perkara yang dilakukan oleh setiap bahagian aliran kerja:
Aliran kerja berjalan pada setiap permintaan tolak dan tarik ke cawangan utama. Ini memastikan semua perubahan kod menjalani pengesahan sebelum digabungkan ke dalam pengeluaran.
name: Python application on: push: branches: ["main"] pull_request: branches: ["main"]
Kami mengkonfigurasi Tindakan GitHub untuk menggunakan Python 3.12.x, memastikan konsistensi dengan persekitaran pembangunan tempatan kami. Langkah ini memasang versi Python khusus dan menyediakan persekitaran untuk pemasangan kebergantungan.
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.12.x uses: actions/setup-python@v3 with: python-version: "3.12.x"
Langkah seterusnya ialah memasang kebergantungan projek. Di sini, kami menaik taraf pip dan memasang fail requirements.txt, ia akan memasang kebergantungan tambahan yang dinyatakan di sana.
- name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
Linting adalah bahagian penting dalam aliran kerja kami, memastikan kod mematuhi piawaian kualiti yang ditetapkan. Kami menjalankan flake8 dengan pilihan untuk membenderakan ralat sintaks, nama tidak ditentukan dan isu kerumitan.
name: Python application on: push: branches: ["main"] pull_request: branches: ["main"]
Untuk ujian unit, kami menggunakan pytest untuk menjalankan semua kes ujian. Selain itu, kami menggunakan liputan untuk menjejak baris kod yang diuji, memastikan suite ujian kami memenuhi ambang liputan yang ditetapkan sebanyak 75%.
Arahan berikut menjalankan ujian dan menjana laporan liputan, menyerlahkan sebarang jurang dalam liputan ujian. Ini penting untuk jaminan kualiti, kerana kod yang belum diuji adalah sumber potensi pepijat masa hadapan.
jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Python 3.12.x uses: actions/setup-python@v3 with: python-version: "3.12.x"
Semakan liputan ini memastikan standard kualiti kod yang tinggi dengan menguatkuasakan bahawa sekurang-kurangnya 75% pangkalan kod dilindungi oleh ujian. Jika perlindungan jatuh di bawah ambang ini, komitmen tidak akan dibenarkan.
Selain CI/CD, kami menyediakan cangkuk prakomit untuk menguatkuasakan kualiti kod secara setempat sebelum sebarang perubahan ditolak ke repositori. Cangkuk ini:
Begini cara kami menambah semakan liputan sebagai cangkuk prakomit dalam .pre-commit-config.yaml:
- name: Install dependencies run: | python -m pip install --upgrade pip pip install flake8 pytest if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
Menyediakan CI/CD memerlukan pemahaman yang mendalam tentang cara alat yang berbeza (flake8, pytest, liputan) berinteraksi dalam Tindakan GitHub. Berikut ialah beberapa cabaran yang kami hadapi dan penyelesaian yang kami laksanakan:
Kami menghadapi isu dengan konflik pembolehubah persekitaran, terutamanya dalam menguji penyepaduan API dan pengendalian konfigurasi. Menggunakan @patch.dict dan teknik mengejek lain dalam unittest membolehkan kami mensimulasikan persekitaran dengan berkesan.
Cabaran terbesar ialah memastikan liputan ujian yang mencukupi. Menggunakan coverage.py dengan --fail-under=75 dalam kedua-dua Tindakan GitHub dan cangkuk prakomit membantu menguatkuasakan standard ini.
Untuk menjadikan saluran paip CI/CD lebih mantap, kami merancang untuk:
Melalui projek ini, saya menyedari kepentingan mewujudkan ujian yang teguh dan amalan CI/CD sejak awal lagi. Jika saya mula semula, saya akan menumpukan pada menulis ujian komprehensif dari awal dan secara berperingkat mengembangkan dan menambah baiknya semasa projek berjalan. Pendekatan ini akan menghalang kehilangan cawangan atau kawasan yang belum diuji dan memastikan semua kod baharu disepadukan dengan lancar ke dalam pangkalan kod yang dilindungi dengan baik.
Atas ialah kandungan terperinci Melaksanakan CI/CD untuk ReadmeGenie. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!