Praktik terbaik Java

Memastikan aplikasi Anda tetap terbaru menjadi hal yang penting dan sulit. Dokumen ini memberikan beberapa langkah dasar bagi developer Java untuk mulai menggunakan praktik DevOps. Ini sama sekali bukan daftar lengkap. Sebagian besar ide ini berasal dari studi penilaian dan riset DevOps DORA yang memberikan ringkasan praktik terbaik yang lebih lengkap. Sumber lain mencakup Accelerate: The Science of Lean Software and DevOps: Building and Scaling High Performing Technology Organizations oleh Nicole Forsgren PhD, Jez Humble, dan Gene Kim; dan Software Engineering at Google yang dikurasi oleh Titus Winters, Tom Manshreck, dan Hyrum Wright.

Sebelum membaca halaman ini, sebaiknya Anda membaca: Menyiapkan Lingkungan Pengembangan Java.

Setiap kebutuhan organisasi pengembangan berbeda-beda, tetapi sistem dasar dapat dibangun menggunakan salah satu stack teknologi berikut:

Contoh Tech Stack 1 Contoh Tech Stack 2
  • Cloud Source Repositories, GitHub, atau Bitbucket untuk kode sumber.
  • Whitesource RenovateBot untuk menjaga artefak dan library tetap terbaru.
  • Cloud Build untuk pengujian unit / pra-commit
  • Cloud Build untuk pengujian integrasi
  • Cloud Deploy untuk deployment
  • GitHub untuk kode sumber.
  • GitHub Dependabot untuk menjaga artefak dan library tetap terbaru.
  • GitHub Actions untuk pengujian pra-kirim
  • GitHub Actions untuk pengujian integrasi
  • GitHub Actions untuk deployment

Sistem yang dibangun dengan komponen ini dapat memungkinkan Anda meningkatkan kualitas dan waktu siklus. Hal ini juga memungkinkan Anda menjaga kode tetap update dengan perbaikan bug dan update keamanan terbaru.

Kontrol Versi

Riset (halaman 17 , halaman 14 , halaman 31 , dan halaman 60) telah menemukan bahwa kontrol versi untuk kode sumber yang dikombinasikan dengan otomatisasi dan pengujian memprediksi peningkatan kualitas dan banyak manfaat lainnya.

GitHub, Gitlab, dan Bitbucket juga merupakan tempat yang baik untuk kode sumber Anda.

Pengujian Otomatis

Otomatisasi pengujian dapat menjadi hal yang sangat penting untuk kesuksesan Anda menggunakan sebagian besar teknik ini. Untuk mengetahui pemikiran tambahan tentang praktik terbaik pengujian, lihat bab SRE Book Testing for Reliability dan blog Google Testing.

Developer Java sebagian besar berfokus pada pengujian unit dan pengujian integrasi otomatis. JUnit, Testing with Spring, Apache Maven Surefire, dan Gradle Java testing adalah sumber daya yang berguna bagi developer Java.

Otomatisasi Deployment / Integrasi Berkelanjutan

Continuous integration dan Otomatisasi deployment mendukung tugas DevOps modern. Bangun, Uji, dan Deploy.

  • Cloud Build [Panduan memulai] [Khusus Java] [Deployment] [Pemicu] menyediakan sistem build yang gratis (120 menit build / hari) atau berbiaya rendah dan mudah digunakan yang dapat dengan mudah disesuaikan untuk sebagian besar tugas.
  • Tekton adalah project open source yang memungkinkan Anda menyesuaikan ide Cloud Build dengan sistem Anda.
  • Spinnaker adalah platform continuous delivery multi-cloud open source yang membantu Anda merilis perubahan software dengan kecepatan dan keyakinan tinggi. Fitur ini membantu Anda mengelola proses merilis dan mengembalikan sistem software yang kompleks.
  • GitHub Actions adalah solusi pihak ketiga yang memungkinkan Anda menyiapkan dan menjalankan pengujian di GitHub.
  • Ada juga banyak solusi lain seperti Gitlab, Circle CI, dan Travis CI.

Library Klien Cloud

Ada banyak cara untuk menggunakan layanan Google, tetapi cara yang lebih disarankan adalah dengan mengikuti petunjuk di halaman Library Klien Cloud. Untuk Java, Libraries-BOM dapat membantu memastikan bahwa Anda menggunakan versi yang kompatibel untuk setiap artefak.

Jika Anda memilih untuk memilih versi library klien sendiri, artefak yang tidak kompatibel mungkin dipilih. Hal ini dikenal sebagai masalah ketergantungan berlian. Jika Anda masih harus memilih pustaka individual, perbarui satu per satu dan uji untuk melihat apakah update tersebut menyebabkan error. Versi terbaru selalu dicantumkan di halaman ini, atau dapat ditemukan dengan menelusuri Maven-Central.

Memastikan dependensi tetap terbaru

Untuk melindungi diri dari pelaku jahat, Anda harus selalu mengupdate dependensi Anda. Ada banyak alat pihak ketiga yang dapat membantu Anda melakukan hal ini:

Alat ini, jika dikonfigurasi dengan benar, akan membantu Anda menjaga dependensi tetap up-to-date. Jika Anda menggabungkan pengujian otomatis dan Continuous Integration / Continuous Deployment, alur kerjanya menjadi:

  • Otomatisasi dependensi menyarankan perubahan pada kontrol sumber Anda.
  • Sistem build berkelanjutan akan mem-build dan menguji perubahan.
  • Peninjau manual akan meninjau proposal, dan jika dapat diterima, akan menyetujui perubahan tersebut, mungkin bersama dengan perubahan lainnya.
  • Setelah perubahan disetujui, proposal dibuat untuk sistem Continuous Delivery guna merilis kode ke produksi. (Atau proses kustom Anda diikuti.)

Gunakan Java Runtime Environment (JRE) yang didukung

JRE, yang merupakan subset Java Development Kit, berada di atas sistem operasi Anda dan menyediakan software dan resource yang diperlukan untuk menjalankan aplikasi Java. Sebagian besar pengguna lebih memilih menggunakan versi LTS terbaru dalam produksi sehingga mereka memiliki akses ke update, keamanan, dan perbaikan bug. Biasanya, Anda dapat mengupdate ke JRE yang lebih baru meskipun kode Anda dikompilasi terhadap JDK yang lebih lama.

Jika Anda bekerja dengan beberapa versi JDK, SDKMAN! dapat membantu Anda menggunakan dan mengelola berbagai versi JDK.

Menggunakan container (Google Kubernetes Engine, Cloud Run, cluster GKE)

Jika Anda menggunakan container Docker dengan RenovateBot atau DependaBot, bot akan secara berkala menyarankan update ke JRE dan JDK Anda – sebaiknya pertahankan JDK dan JRE pada versi yang sama.

Jika Anda memperbarui Dockerfile secara manual, cukup ubah JRE ke versi terbaru dan bangun ulang.

Menggunakan Compute Engine.

Hal ini cenderung sangat spesifik untuk aplikasi. Sebaiknya gunakan skrip startup. Untuk mengupgrade, Anda harus mengupdate skrip.

Lingkungan fleksibel App Engine

Hanya mendukung Java 8.

App Engine Standard

Lihat Memigrasikan aplikasi App Engine dari Java 8 ke Java 11.

Menggunakan Java Development Kit versi LTS

JDK adalah serangkaian alat untuk mengembangkan aplikasi Java. Fitur bahasa baru dikaitkan dengan JDK tertentu. Sebaiknya Anda menyematkan penggunaan ke JDK dengan Dukungan Jangka Panjang (LTS), dan mengupgrade ke versi LTS berikutnya jika sesuai untuk aplikasi Anda. Sebaiknya gunakan rilis minor terbaru dari rilis LTS utama yang disematkan.

Sebagian besar pengguna ingin menyinkronkan JDK dan JRE. Terkadang hal itu tidak mungkin dilakukan (misalnya, saat JDK tidak lagi didukung), dan Anda perlu mengompilasi dengan JDK yang lebih baru dan menjalankan di JRE yang lebih lama.

Untuk melakukannya dengan Maven:

Tetapkan tingkat bahasa yang ingin Anda gunakan untuk membuat kode dan JRE target. Perbarui file pom.xml Anda sebagai berikut (untuk Java 8): xml <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target>

Untuk mengupdate ke Java 11, Anda harus mengubahnya menjadi:

    <maven.compiler.source>11</maven.compiler.source>
    <maven.compiler.target>11</maven.compiler.target>

Jika Anda menggunakan Gradle, perbarui file build.gradle untuk Java 8 dengan:

compileJava {
  sourceCompatibility = 1.8
  targetCompatibility = 1.8
}

Atau untuk Java 11:

compileJava {
  sourceCompatibility = 11
  targetCompatibility = 11
}

Perhatikan bahwa untuk Java 8 dan yang lebih lama, versi memiliki awalan 1. (1.7 untuk Java 7, 1.8 untuk Java 8) yang dihapus setelah Java 8.