Halo semuanya!
Saya bekerja sebagai pengembang android, dan belum lama ini kami mengalami beberapa tugas rutin pada proyek kami yang ingin kamiotomatiskan. Misalnya, kami memiliki 5 rasa yang berbeda, untuk masing-masingnya kami perlu mengunggah build ke fabric, terkadang untuk gerobak yang berbeda beberapa kali sehari. Ya, tugas ini juga dapat dilakukan dengan menggunakan tugas gradle, tetapi saya ingin tidak memulai proses ini pada mesin pengembang, tetapi melakukannya entah bagaimana secara terpusat. Atau misalnya, secara otomatis unggah build in google play ke beta. Yah, saya hanya ingin memilih sistem CI. Apa yang terjadi dengan ini, dan bagaimana kita mengaturnya, mengapa ada Docker, kemudian di artikel ini.

Dalam pemahaman saya, seluruh tugas dibagi menjadi sekitar dua tahap:
- Instal dan konfigurasikan Jenkins sendiri dengan Android SDK
- Siapkan tugas yang sudah ada di dalam Jenkins
Pada artikel ini, saya ingin menyentuh pada poin pertama, dan jika itu akan menarik bagi siapa pun, maka pada artikel selanjutnya saya akan menjelaskan proses pengaturan tugas perakitan di Jenkins itu sendiri.
Jadi, poin pertama adalah instalasi dan konfigurasi sistem Jenkins
Habré sudah memiliki artikel yang bagus tentang topik ini, tetapi dia sudah beberapa tahun, dan beberapa hal di dalamnya sedikit ketinggalan jaman (misalnya sdkmanager), meskipun dia banyak membantu saya untuk mencari tahu apa dan bagaimana yang harus dilakukan pada tahap awal.Jika Anda melihat
dokumentasi resmi untuk menginstal Jenkins, maka kita akan melihat tiga cara berbeda untuk melakukan ini: luncurkan gambar buruh pelabuhan yang sudah jadi, unduh dan jalankan file perang, dan juga cukup instal jenkins dalam sistem dengan cara lama (misalnya,
apt-get install jenkins
menggunakan ubuntu sebagai contoh). Opsi pertama adalah yang paling benar, karena tidak membawa pengaturan dan dependensi yang tidak perlu ke sistem host kami, dan setiap saat bahkan jika terjadi kesalahan, mudah dan sederhana untuk menghapus semuanya dan mulai lagi. Tetapi gambar buruh pelabuhan standar untuk jenkins berisi beberapa data yang tidak kita butuhkan (misalnya, plugin blueocean) dan tidak berisi apa yang pasti akan kita butuhkan (misalnya, android sdk). Diputuskan untuk membuat gambar buruh pelabuhan kami sendiri yang di dalamnya akan mengunduh dan menjalankan file perang, mengunduh dan menginstal SDK Android, serta mengkonfigurasi semua pengaturan lain yang kita butuhkan. Untuk memulainya nanti, kita membutuhkan sistem host dengan buruh pelabuhan diinstal. Saya sarankan di sini untuk tidak menemukan kembali roda dan menggunakan DigitalOcean.
Buat dan konfigurasikan mesin virtual
Untuk memulainya, jika orang lain tidak terdaftar di sana, saya sarankan
mendaftar (di sini pada saat menulis artikel ada tautan rujukan, tetapi setelah membaca aturan saya membuangnya). Setelah mendaftar, Anda dapat google satu atau kode promosi lain di Internet, dan mendapatkan sekitar 10 dolar untuk memulai.
Setelah itu kita perlu mendapatkan tetesan baru. Pilih item Tetesan, lalu
Buat Tetesan .

Sistem host adalah Ubuntu 18.04. Anda dapat memilih gambar dengan Docker yang sudah diinstal dan dikonfigurasi, tetapi kami akan melakukan semuanya sendiri. Karena rakitan Android builds masih membutuhkan banyak sumber daya, kita perlu memilih konfigurasi untuk setidaknya 20 dolar sehingga build dikumpulkan secara normal dan relatif cepat.

Kami akan memilih lokasi yang lebih dekat (misalnya, di Jerman). Lalu ada dua opsi untuk bagaimana kita akan terhubung ke server virtual kita. Kita dapat menambahkan kunci ssh atau melakukannya tanpa itu. Jika di tempat ini kami tidak menunjukkan kunci mana yang digunakan, maka kata sandi untuk pengguna root akan dikirim ke email kami.

Di sini kita dapat mengubah nama server, dan menyelesaikan pembuatan dengan mengklik tombol
Buat .

Sekarang kita masuk ke droplet yang dibuat, dan salin alamat ip untuk diri kita sendiri, untuk koneksi dan konfigurasi lebih lanjut.

Kami membutuhkan klien ssh. Jika Anda bekerja dari bawah poppy, maka Anda dapat menggunakan terminal standar, jika dari bawah Windows kita dapat menggunakan dempul untuk
bekerja atau menggunakan
subsistem Linux (hanya untuk Windows 10). Saya pribadi menggunakan opsi yang terakhir, dan itu sangat cocok untuk saya.
Terhubung ke server kami menggunakan perintah berikut
ssh root@YOUR_IP_ADDRESS
Konsol akan menawarkan Anda untuk menyimpan kunci, kami setuju dengan ini. Setelah terhubung, kami akan membuat pengguna baru untuk diri kami sendiri, menambahkannya ke pengguna super (dan memberinya kesempatan untuk menggunakan sudo tanpa kata sandi), menyalinnya kunci untuk akses melalui ssh dan mengatakan bahwa ia adalah pemilik file-file ini (jika tidak maka tidak akan berfungsi). Nama
pengguna diubah menjadi nyaman untuk Anda.
useradd -m -s /bin/bash username \ && echo 'username ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \ && mkdir /home/username/.ssh \ && cp /root/.ssh/authorized_keys /home/username/.ssh/authorized_keys \ && chown username:username -R /home/username/.ssh
Putuskan koneksi dari root dengan perintah
exit
Dan kami akan terhubung kembali dengan bantuan pengguna baru yang dibuat
ssh username@YOUR_IP_ADDRESS
Setelah kami memperbarui sistem, dan reboot server kami (jika selama proses pembaruan, sistem akan menanyakan sesuatu kepada Anda, cukup untuk selalu memilih nilai default dalam kasus ini).
sudo apt update && sudo apt full-upgrade -y && sudo apt autoremove -y && sudo reboot
Setup dasar selesai. Dari sudut pandang sistem pertempuran, itu tidak terlalu aman, tetapi dalam kerangka artikel ini sangat cocok.
Instal Docker.
Untuk menginstal Docker di sistem kami, kami akan menggunakan
dokumentasi resmi . Karena kami memiliki sistem yang baru diinstal, kami akan melewati titik ini, dan jika Anda memiliki sistem tempat sesuatu telah berjalan lama, atas rekomendasi orang-orang dari Docker, hapus kemungkinan versi lama
sudo apt-get remove docker docker-engine docker.io containerd runc
Jangan lupa untuk terhubung kembali melalui ssh ke server kami. Instalasi Docker sendiri dijelaskan dengan sangat terperinci dalam dokumentasi, saya akan memberikan perintah umum untuk memudahkan Anda. Apa yang mereka lakukan dapat dibaca di sana. Pertama-tama tambahkan repositori.
sudo apt update \ && sudo apt install -y apt-transport-https ca-certificates \ curl gnupg-agent software-properties-common \ && curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add - \ && sudo apt-key fingerprint 0EBFCD88 \ && sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
Dan kemudian instal Docker sendiri:
sudo apt update && sudo apt install -y docker-ce docker-ce-cli containerd.io
Sehingga di masa depan kita bisa memanggil perintah buruh pelabuhan tanpa awalan sudo, jalankan perintah berikut (yang juga dijelaskan dengan seksama dalam
instruksi ).
sudo usermod -aG docker username
Setelah itu, Anda harus masuk kembali (menggunakan perintah keluar dan menghubungkan kembali ke server) agar ini berfungsi.
Docker sendiri terinstal, yang bisa kita periksa dengan perintah
docker run hello-world
Dia mengunduh gambar uji, menjalankannya dalam wadah. Wadah, setelah memulai, mencetak pesan informasi dan keluar.
Selamat, kami telah menyelesaikan tahap mempersiapkan server untuk bekerja!
Membuat Gambar Docker Anda
Kami akan membuat gambar Docker dengan menulis Dockerfile kami sendiri. Contoh cara melakukan ini dengan benar di Internet gerobak dan gerobak kecil, saya akan menunjukkan versi
saya yang sudah selesai, dan saya akan mencoba mengomentarinya sebanyak mungkin. Ada juga
instruksi manual dari buruh pelabuhan itu sendiri dengan contoh pada ejaan dockerfile yang benar dan kanonik.
Buat dan buka Dockerfile Anda untuk diedit
touch Dockerfile && nano Dockerfile
Di dalamnya, misalnya, kami akan meletakkan konten Dockerfile saya
Seluruh buruh pelabuhan saya dengan komentar Beberapa klarifikasi:
- Pada awalnya, ada keinginan untuk menggunakan alpine yang lebih ringan alih-alih ubuntu, tetapi ia tidak memiliki dukungan ia32-libs , yang diperlukan untuk membangun proyek menggunakan Android SDK.
- Kami memasang openjdk-8-jdk, bukan yang lebih ringan openjdk-8-jdk-headless, karena beberapa fungsi Jenkins membutuhkan sistem yang lengkap (misalnya, menampilkan hasil tes unit).
- Diperlukan untuk menginstal locales, karena pada beberapa proyek, tanpa mereka, assembly gradle crash tanpa kesalahan dan log yang jelas, dan saya menghabiskan beberapa hari untuk sampai ke dasar alasan ini (pada ubuntu reguler yang tidak di docker, semua lokal diisi secara default) .
- Kita harus segera menerima semua lisensi untuk Android SDK, sehingga selama proses pembuatan Jenkins dapat secara mandiri menginstal komponen yang dibutuhkannya (misalnya, SDK yang dibutuhkan untuk versi api yang berbeda). Jika perlu, nanti di dalam wadah buruh pelabuhan akan mungkin untuk mengelola SDK menggunakan sdkmanager, misalnya
sdkmanager --list
memungkinkan sdkmanager --list
untuk melihat semua komponen yang tersedia dan semua yang diinstal, dan sdkmanager --install "platforms;android-26"
menginstal SDK untuk versi 26 dari api. - Secara umum, itu mungkin untuk tidak memulai pengguna jenkins, dan tetap dengan pengguna root, tapi entah bagaimana itu tidak benar, Anda juga tidak bisa memberinya hak pengguna super, tetapi ini dilakukan dalam hal kenyamanan, jika sesuatu perlu diinstal pada tahap pengaturan dan debug.
- Ukuran dasar gambar ternyata agak besar (hampir 800 mb), tetapi secara keseluruhan saya sampai pada kesimpulan bahwa bagi saya ini tidak terlalu kritis, dan lebih mudah bagi saya untuk mengunduhnya dalam bentuk ini daripada menghabiskan waktu mencari dan menghapus paket yang tidak saya butuhkan.
Setelah menulis Dockerfile, kita perlu mengubahnya menjadi gambar yang siap pakai untuk Docker, berdasarkan wadah yang akan dibuat. Ini dilakukan hanya oleh tim
docker build -t jenkins-image
di mana parameter
-t jenkins-image
bertanggung jawab atas nama gambar Anda, dan titik di akhir perintah menunjukkan bahwa Anda perlu mencari Dockerfile untuk perakitan di dalam direktori ini. Proses perakitan itu sendiri membutuhkan waktu, dan setelah perakitan harus ada sesuatu seperti ini di konsol.
9fd8f5545c27 berhasil dibangun
Berhasil menandai tag-jenkins: terbaru
Yang memberitahu kita bahwa gambar kita telah berhasil dirangkai, dan kita dapat melanjutkan ke langkah selanjutnya, yaitu peluncuran wadah kita
Hub Docker dan gambar yang sudah jadi
Ya, tentu saja, kita dapat menggunakan gambar siap pakai kami untuk meluncurkan wadah, tetapi jika kita perlu melakukan ini di lebih dari beberapa perangkat, membuat Dockerfile setiap kali dan membangun gambar yang sudah jadi dari itu tidak akan sangat nyaman. Dan jika kita juga memperbarui konten Dockerfile kita, maka meluncurkan perubahan di semua node tidak akan nyaman sama sekali. Untuk tujuan ini, ada repositori publik dari gambar
Docker Hub . Ini memungkinkan Anda untuk tidak mengumpulkan gambar setiap waktu, pada setiap node, tetapi cukup mengunduhnya ke diri Anda sendiri dari repositori publik, dan menggunakannya secara merata di semua mesin. Sebagai contoh, gambar yang berfungsi sebagai contoh untuk artikel ini tersedia di repositori bernama
osipovaleks / docker-jenkins-android , dan nanti dalam artikel ini kita akan bekerja dengannya.
Artikel ini tidak menyiratkan studi terperinci tentang Docker Hub, kami tidak akan mengerti cara mengunggah gambar kami di sana (meskipun ini tidak terlalu sulit) dan apa yang dapat dilakukan dengan mereka di sana, kami tidak akan mengerti bahwa mungkin masih ada repositori publik atau pribadi Anda sendiri, Dalam hal ini semua dapat disortir secara mandiri jika perlu.
Peluncuran kontainer
Ada dua cara memulai wadah.
- Cara pertama, cukup menggunakan
docker run
, memungkinkan Anda melakukan ini dengan mudah dan cepat dengan cara berikut
docker run --name jenkins -d -it -v jenkins-data:/var/lib/jenkins -v jenkins-home:/home/jenkins -p 8080:8080 --restart unless-stopped osipovaleks/docker-jenkins-android
di mana perintah run
memiliki parameter berikut
--name jenkins
- nama wadah masa depan-d
- mulai wadah di latar belakang-it
- flag untuk bekerja dengan STDIN dan tty-v jenkins-data:/var/lib/jenkins
dan -v jenkins-home:/home/jenkins
- buat (jika tidak dibuat) dan petakan file volume khusus ke bagian internal wadah yang akan memungkinkan kita untuk menyimpan Jenkins yang telah dikonfigurasi bahkan setelah merekonstruksi. wadah-p 8080:8080
- memetakan port host ke port container sehingga kita memiliki akses ke antarmuka web (ya ini adalah port yang kita tentukan di Dockerfile)--restart unless-stopped
- opsi menentukan kebijakan autorun wadah setelah --restart unless-stopped
ulang host (dalam hal ini, autostart jika wadah tidak dimatikan secara manual)osipovaleks/docker-jenkins-android
- gambar untuk ditempatkan.
Di pintu keluar ke konsol Docker, kita harus mendapatkan id dari wadah yang dibuat, dan juga menunjukkan informasi tentang bagaimana gambar dimuat ke dalam sistem (tentu saja, jika belum dimuat), sesuatu seperti ini
Tidak dapat menemukan gambar 'osipovaleks / docker-jenkins-android: terbaru' secara lokal
terbaru: Menarik dari osipovaleks / docker-jenkins-android
6cf436f81810: Tarik selesai
987088a85b96: Tarik selesai
b4624b3efe06: Tarik selesai
d42beb8ded59: Tarik selesai
b3896048bb8c: Tarik selesai
8eeace4c3d64: tarik selesai
d9b74624442c: Tarik selesai
36bb3b7da419: Tarik selesai
31361bd508cb: Tarik selesai
cee49ae4c825: tarik lengkap
868ddf54d4c1: Tarik selesai
361bd7573dd0: Tarik selesai
bb7b15e36ae8: Tarik selesai
97f19daace79: Tarik selesai
1f5eb3850f3e: Tarik selesai
651e7bbedad2: Tarik selesai
a52705a2ded7: Tarik selesai
Intisari: sha256: 321453e2f2142e433817cc9559443387e9f680bb091d6369bbcbc1e0201be1c5
Status: Diunduh gambar yang lebih baru untuk osipovaleks / docker-jenkins-android: latest
ef9e5512581da66d66103d9f6ea6ccd74e5bdb3776747441ce6a88a98a12b5a4
- Cara kedua untuk memulai melibatkan menulis file penulisan khusus, di mana perintah jalankan hanya dijelaskan menggunakan bahasa YAML , dan diluncurkan menggunakan Docker Compose.
Untuk melakukan ini, kita perlu menginstalnya:
sudo apt update && sudo apt install -y docker-compose
Selanjutnya, buat direktori untuk proyek (ini penting jika Anda peduli apa volume yang dibuat secara otomatis untuk wadah akan dipanggil) dan pergi ke sana
mkdir jenkinsProject && cd jenkinsProject
dan di dalam kita membuat file menulis sendiri dan masuk ke mode edit
touch docker-compose.yml && nano docker-compose.yml
dan letakkan konten berikut di dalamnya
version: '3' services: jenkins: container_name: jenkins image: osipovaleks/docker-jenkins-android ports: - "8080:8080" restart: unless-stopped volumes: - "jenkins-data:/var/lib/jenkins" - "jenkins-home:/home/jenkins" volumes: jenkins-data: jenkins-home:
Di dalamnya, mungkin, hanya baris pertama yang memunculkan pertanyaan ( version: '3'
) yang menunjukkan versi kemampuan file penulisan, serta bagian dengan blok volumes
yang mencantumkan daftar yang digunakan dalam wadah ini.
Jalankan wadah Anda dengan perintah:
docker-compose up -d
di mana flag -d
juga menunjukkan bahwa kontainer akan dibuat dan diluncurkan di latar belakang. Akibatnya, Docker harus menunjukkan sesuatu seperti berikut:
Membuat volume "jenkinsproject_jenkins-data" dengan driver default
Membuat volume "jenkinsproject_jenkins-home" dengan driver default
Menarik jenkins (osipovaleks / docker-jenkins-android: terbaru) ...
terbaru: Menarik dari osipovaleks / docker-jenkins-android
6cf436f81810: Tarik selesai
987088a85b96: Tarik selesai
b4624b3efe06: Tarik selesai
d42beb8ded59: Tarik selesai
b3896048bb8c: Tarik selesai
8eeace4c3d64: tarik selesai
d9b74624442c: Tarik selesai
36bb3b7da419: Tarik selesai
31361bd508cb: Tarik selesai
cee49ae4c825: tarik lengkap
868ddf54d4c1: Tarik selesai
361bd7573dd0: Tarik selesai
bb7b15e36ae8: Tarik selesai
97f19daace79: Tarik selesai
1f5eb3850f3e: Tarik selesai
651e7bbedad2: Tarik selesai
a52705a2ded7: Tarik selesai
Intisari: sha256: 321453e2f2142e433817cc9559443387e9f680bb091d6369bbcbc1e0201be1c5
Status: Diunduh gambar yang lebih baru untuk osipovaleks / docker-jenkins-android: latest
Membuat jenkins ...
Membuat jenkins ... selesai
Ingat, saya mengatakan bahwa nama volume yang dibuat akan tergantung pada nama proyek? Jalankan perintah:
docker volume ls
dan kami mendapatkan output seperti itu
NAMA VOLUME DRIVER
jenkinsproject_jenkins-data lokal
jenkinsproject_jenkins-rumah lokal
di mana kita akan melihat bahwa meskipun fakta bahwa nama untuk volume dipilih oleh jenkins-home
, pada kenyataannya, awalan dari nama proyek menempel padanya dan volume nama ternyata jenkinsproject _jenkins-home
Opsi startup mana yang digunakan? Di sini Anda dapat memilih sendiri, diyakini bahwa Docker Compose lebih merupakan alat untuk meluncurkan beberapa kontainer sekaligus, yang terikat satu sama lain, dan jika Anda hanya perlu menjalankan satu kontainer, maka Anda dapat menggunakan
docker run
.
Sekarang setelah sub-langkah ini untuk memulai dan mengkonfigurasi server, serta memulai wadah dengan Jenkins, kita dapat melanjutkan ke konfigurasi awal
Penyiapan Jenkins awal
Ambil alamat ip dari server kami, tambahkan port 8080 yang ditunjukkan oleh kami kepadanya dan ikuti tautan ini di browser.
http://YOUR_IP_ADDRESS:8080/
Jika sebelumnya semuanya sudah dikonfigurasi dan dimulai dengan benar, maka di sini kita akan melihat gambar berikut

Untuk pengaturan pertama, kita perlu memasukkan kata sandi yang dihasilkan sistem saat instalasi. Untuk melakukan ini, kita hanya perlu melihat isi file
/var/lib/jenkins/secrets/initialAdminPassword
. Tetapi file ini ada di dalam wadah kami yang sedang berjalan, dan untuk membacanya, kita perlu terhubung ke wadah tersebut menggunakan perintah berikut:
docker exec -it jenkins /bin/bash
di mana opsi-itu mirip dengan menjalankan
docker run
,
jenkins
adalah nama kontainer kami, dan
/bin/bash
akan menjalankan
/bin/bash
untuk kita dalam wadah dan memberikannya akses. Setelah itu, kita dapat melihat kata sandi awal untuk Jenkins:
cat /var/lib/jenkins/secrets/initialAdminPassword
berikut ini muncul di konsol
91092b18d6ca4492a2759b1903241d2a
Ini kata sandinya.
Pengguna ALexhha menyarankan opsi yang lebih sederhana untuk membaca kata sandi ini, tanpa terhubung ke wadah itu sendiri. Faktanya adalah bahwa pada saat meluncurkan Jenkins sendiri, kata sandi ini ditampilkan di log. Ternyata yang kita butuhkan hanyalah membaca log kontainer. Dalam kasus kami, ini dilakukan dengan perintah berikut: docker logs jenkins
di mana jenkins
nama wadah kami, dan di log Anda dapat melihat yang berikut:*************************************************** ***********
*************************************************** ***********
*************************************************** ***********
Diperlukan pengaturan awal Jenkins. Pengguna admin telah dibuat dan kata sandi dibuat.
Silakan gunakan kata sandi berikut untuk melanjutkan ke instalasi:
91092b18d6ca4492a2759b1903241d2a
Ini juga dapat ditemukan di: / var / lib / jenkins / secrets / initialAdminPassword
*************************************************** ***********
*************************************************** ***********
*************************************************** ***********
Opsi ini sedikit lebih sederhana dan lebih cepat.Salin, tempel ke bidang
kata sandi Administrator di antarmuka web dan klik
Lanjutkan . Pada layar berikutnya, pilih
Instal plugin yang disarankan dan instal satu set plugin default.


Setelah menginstal plugin, buat pengguna untuk kami sendiri dan klik
Simpan dan Selesai
Kami setuju dengan bagian Konfigurasi Instans, di mana kami diminta untuk mengisi URL tempat Jenkins akan bekerja (dalam kasus kami, biarkan semuanya apa adanya)

Dan di layar berikutnya, klik
Start yang disukai
menggunakan Jenkins
Jadi, kami menginstal dan meluncurkan Jenkins!

Sudah cukup mungkin untuk bekerja dengannya, tetapi untuk mengumpulkan Android build kami, Anda perlu mengonfigurasi beberapa poin lagi. Pelokalan Jenkins terkait dengan bahasa yang dipilih pada peramban Anda, dan tentu saja terjemahan ke dalam bahasa Rusia belum sepenuhnya selesai, dan kami mendapatkan campuran yang sangat besar dari bahasa Rusia dan Inggris. Jika Anda berhasil dengan cara yang persis sama, dan itu membuat Anda marah, maka Anda dapat menggunakan
plug-in khusus dan mengatur bahasa antarmuka default. Baik, atau alihkan browser Anda ke antarmuka bahasa Inggris.
Pergi ke pengaturan Jenkins dan pilih
Konfigurasi Sistem.
Periksa
variabel Lingkungan , dan masukkan nama
ANDROID_HOME di bidang, dan tentukan
/ var / lib / android-sdk / di bidang (kami menentukan data ini di Dockerfile sebagai direktori home untuk Android SDK).

Klik pada tombol
Simpan , keluar dari bagian pengaturan ini dan pergi ke bagian yang disebut
Konfigurasi Alat Global .

Siapkan partisi
JDK (di mana variabel JAVA_HOME juga diisi oleh kami di Dockerfile, dan kita dapat menggunakan nilainya
/ usr / lib / jvm / java-8-openjdk-amd64 / di sini ).

Juga di sini kita masih perlu mengisi bagian
Gradle . Kami memilih dan menginstal versi Gradle yang digunakan dalam proyek-proyek yang akan Anda bangun menggunakan sistem CI ini.
Anda dapat memiliki beberapa versi. Anda juga tidak bisa memulai variabel Gradle sama sekali jika Anda memiliki gradlew di repositori, misalnya, dan Anda bisa membuatnya dengan itu.
Dengan ini kita bisa mengakhiri tahap pertama kita. Sistem Jenkins sepenuhnya operasional dan kita dapat beralih ke menyesuaikan tugas membangun sendiri. Harap perhatikan bahwa sistem ini disesuaikan dengan kebutuhan kami dan mungkin tidak menyediakan apa yang Anda butuhkan - misalnya, tidak ada emulator Android untuk pengujian dan NDK.Jika artikel ini menarik minat siapa pun, maka saya akan melanjutkan di bagian kedua dengan contoh satu atau dua kerepotan, saya akan menjelaskan integrasi Jenkins dan Bitbucket (dialah, bukan Github, karena ada lebih mudah dengan repositori pribadi gratis dan artikel di Internet tentang lebih kecil, tapi mungkin lebih menyenangkan), saya akan memberi tahu Anda cara berteman dengan kunci ssh dari wadah kami dengan repositori, tentang pemberitahuan email, serta beberapa keripik lainnya. Secara umum, tentang segala sesuatu yang kami konfigurasikan.Saya meminta Anda untuk tidak terlalu banyak menendang, ini adalah artikel pertama saya tentang Habr. Baik untuk semua!