Halo!Dengan munculnya Tindakan Github, ia mengambil inisiatif dan mengintegrasikan CI / CD sederhana (tapi cukup efektif) ke dalam proyek Flowwow live kami yang kecil, tetapi sudah berusia 2 tahun .Untuk apa?
Mungkin ada beberapa pengembang yang tidak membuat kesalahan, tapi di sini saya bukan salah satu dari mereka, jadi kadang-kadang, tetapi ledakan kecil seperti itu terjadi dan Anda harus segera merilis versi baru dengan pengeditan atau kembalikan ke versi sebelumnya. Tapi jam-jam di mana pengguna menemukan crash aplikasi tidak tetap tanpa jejak di antara pelanggan dan dalam mood pengembang yang bertanggung jawab.Bagaimana meminimalkan pemalsuan pada produksi, saya akan katakan di bawah ini.Mengapa saya secara pribadi memiliki fakap seperti itu?- Cuplikan kode tidak aman
- Mereka membawa beberapa perpustakaan dan crash secara situasional
- Diperbarui beberapa perpustakaan (biasanya analitik) ke versi yang tidak stabil
Dengan 1 poin, tinjauan kode, Tes unit, analisis kode statis, tes UI, pengujian manual akan membantu kami.Dengan 2-3 poin - hanya tes UI dan pengujian manual.Tetap hanya untuk mengotomatisasi ini. Pada tahap ini, pilihan jatuh pada Tindakan Github yang baru saja muncul , manfaat dan kode proyek ada di Github. Saya harus mengatakan segera, untuk akun github gratis, ada 2.000 menit aksi gratis per bulan.Mulai dari mana?
Itu penuh dengan contoh-contoh siap pakai untuk berbagai bahasa dan kerangka kerja. Hal ini dikonfigurasi melalui file konfigurasi YAML , yang terletak di repositori proyek.
Contoh minimal untuk Android:name: Android CI
on: [push]
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Build with Gradle
run: ./gradlew assembleDebug
Deskripsi: untuk setiap dorongan, tugas diluncurkan pada cabang apa pun di mesin virtual github dengan OS ubuntu. Langkah-langkah tugas: checkout kode kami, konfigurasikan jdk, jalankan tugas gradle untuk perakitan.Dalam hal bagian langkah yang tidak berhasil, kita akan melihat gambar seperti itu di
sana Anda dapat melihat log.Sangat nyaman bahwa dengan Permintaan Tarik kami akan segera ditampilkan bahwa urutan pengujian kami telah gagal.
Dan jika Anda memiliki integrasi github dengan Slack, maka itu juga
Sekarang poin demi poin
1. Tes unitAnda menulis Tes unit menggunakan junit, mockito, dll.Sekarang tes Anda termasuk dalam urutan tes dengan menambahkan tugas gradle yang sesuai.- name: Run some unit tests
run: ./gradlew testStageDebugUnitTest
2. Analisis kode statisAnda dapat menggunakan linter sederhana ( detekt - untuk kotlin, pmd - untuk java).Atau opsi yang lebih rumit adalah sonarqube .Dalam kasus linter sederhana (misalnya, kami memiliki java dan kotlin):task("checkAll") {
group "Verify"
description "Runs all static checks on the build"
dependsOn "pmd", "detekt"
}
- name: Run some unit tests
run: ./gradlew checkAll
dalam kasus sonarqube - lebih lanjut tentang tuning - di sini- uses: actions/checkout@v1
- name: SonarCloud Scan
run: ./gradlew jacocoUnitTestReport sonarqube -Dsonar.login=${{ secrets.SONAR_TOKEN }} --stacktrace
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- name: Link to SonarCloud Report
run: echo "https://sonarcloud.io/dashboard?id=.."
3. Tes UIMenulis tes UI adalah bagian dari imajinasi Anda, pendekatan saya adalah tes "Asap" yang mensimulasikan tindakan standar pengguna dalam aplikasi - masuk, pilih produk, pesan, lacak pesanan. Anda dapat menggunakan UIAutomator, Espresso, Kaspresso.Ada juga 2 opsi untuk diluncurkan di sini - sebuah emulator pada mesin virtual github atau layanan cloud seperti Firebase Test Lab.Untuk menggunakan emulator di dalam github, ada implementasi yang sudah jadi: satu dan dua .Dalam kasus Firebase Test Lab, Anda harus bekerja dengan Google Cloud Platform melalui CLI gcloud- name: prepare gcloud
uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
with:
version: latest
service_account_email: ${{ secrets.SA_EMAIL }}
service_account_key: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
- name: gcloud Set up project
run: |
gcloud config set project ${{ secrets.PROJECT_ID }}
- name: Assemble apks for smoke test
run: ./gradlew Smoke
- name: Run tests in test lab
run: |
gcloud firebase test android run \
--app app/build/outputs/apk/production/debug/app.apk \
--test app/build/outputs/apk/androidTest/production/debug/appTest.apk \
--device model=Nexus6P,version=25,orientation=portrait,locale=en_US \
--device model=athene,version=23,orientation=portrait,locale=en_US \
--device model=sailfish,version=26,orientation=portrait,locale=en_US
Agar ini berfungsi, Anda perlu membuat proyek di Firebase, membuat akun layanan dengan hak admin di Google Cloud Console, dan mengunggah kunci json yang diterima ke base64 di rahasia github untuk otorisasi di gcloud .Konfigurasi umum dalam kasus saya terlihat seperti ini. Tugas dipicu oleh acara PR di mastername: Android CI
on:
pull_request:
branches:
- 'master'
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: set up JDK 1.8
uses: actions/setup-java@v1
with:
java-version: 1.8
- name: Run static checks
run: ./gradlew checkAll
- name: Run some unit tests
run: ./gradlew testStageDebugUnitTest
- name: prepare gcloud
uses: GoogleCloudPlatform/github-actions/setup-gcloud@master
with:
version: latest
service_account_email: ${{ secrets.SA_EMAIL }}
service_account_key: ${{ secrets.GOOGLE_APPLICATION_CREDENTIALS }}
- name: gcloud Set up project
run: |
gcloud config set project ${{ secrets.PROJECT_ID }}
- name: Assemble apks for smoke test
run: ./gradlew Smoke
- name: Run tests in test lab
run: |
gcloud firebase test android run \
--app app/build/outputs/apk/production/debug/app.apk \
--test app/build/outputs/apk/androidTest/production/debug/appTest.apk \
--device model=Nexus6P,version=25,orientation=portrait,locale=en_US \
--device model=athene,version=23,orientation=portrait,locale=en_US \
--device model=sailfish,version=26,orientation=portrait,locale=en_US
Tampaknya sederhana. Efisiensi tergantung pada tes tertulis dan aturan analisis kode yang dipilih. Anda dapat menulis beberapa tugas independen (pekerjaan) untuk menjalankannya secara paralel. Dalam kasus saya, semuanya berjalan berurutan. Proses verifikasi memakan waktu sekitar 15 menit pada proyek kami (mesin virtual github 2-core CPU, 7 GB RAM, 14 GB SSD), tetapi itu tidak terlalu penting, selama Anda "kode" dengan mata Anda, hasil tes ini juga tiba.Tes UI paling membantu - itu terjadi selama bagian mereka analitik lumpuh setelah memperbarui perpustakaan dan Anda hanya mengerti bahwa Anda tidak harus memperbaruinya.Melalui gcloud, Anda juga dapat mengirimkan build ke Firebase App Distribution, rilis ke Google Play, dll.Banyak contoh berguna dapat dilihat di sini dan di sini .Semoga artikel ini bermanfaat bagi seseorang. Semoga berhasil dan lebih sedikit crash pada produksi!