Mempercepat pengembangan di Cloud Code untuk Cloud Shell

Untuk mempercepat pengembangan lokal di Cloud Code untuk Cloud Shell, manfaatkan sinkronisasi file dan hot reload, deployment otomatis pada saat penyimpanan, serta gunakan modul Skaffold untuk mengembangkan bagian aplikasi secara terpisah.

Mengaktifkan sinkronisasi file Skaffold dan hot reload

Untuk meningkatkan efisiensi alur kerja pengembangan lokal dan menghindari keharusan membangun ulang, men-deploy ulang, dan memulai ulang pod, Skaffold mendukung penyalinan file yang diubah ke container yang di-deploy. Artinya, saat Anda membuat perubahan pada file kode sumber dan statis, Anda dapat melihat perubahan diterapkan dalam hitungan detik, sehingga loop masukan dipercepat.

Untuk file statis (seperti file HTML dan CSS), perilaku penyalinan file ini disebut sinkronisasi file.

Untuk file kode sumber, perilaku ini disebut hot reload dan mendukung jenis file berikut:

  • Buka: *.go
  • Java: *.java, *.kt, *.scala, *.groovy, *.clj
  • NodeJS: *.js, *.mjs, *.coffee, *.litcoffee, *.json

Dengan hot reload yang dikonfigurasi, Skaffold mendeteksi perubahan pada file yang didukung dan menyinkronkan perubahan tersebut ke container yang berjalan di cluster Anda. Perubahan pada jenis file yang tidak mendukung hot reload memicu build ulang image dan pod dimulai ulang.

Sinkronisasi file otomatis dan hot reload diaktifkan secara default saat Anda menggunakan Buildpack sebagai builder pilihan Anda. Untuk builder lain seperti Docker, Anda dapat menentukan bagian sync dalam file skaffold.yaml untuk artefak yang Anda sesuaikan.

Setelan sinkronisasi Anda dapat berupa salah satu dari (sesuai urutan preferensi):

  • auto: Skaffold mengonfigurasi sinkronisasi secara otomatis. (hanya untuk artefak Jib dan Buildpacks.) Ini adalah nilai default untuk Buildpacks.
  • infer: Tujuan untuk setiap file yang diubah disimpulkan dari builder.
  • manual: Anda harus menentukan file di ruang kerja lokal Anda dan tujuannya di container yang sedang berjalan.

Contoh bagian sync berikut dalam file skaffold.yaml menentukan sinkronisasi manual untuk menyinkronkan semua file HTML /static-html ke folder static dalam penampung:

build:
  artifacts:
    - image: gcr.io/k8s-skaffold/node-example
      context: node
      sync:
        manual:
          - src: 'static-html/*.html'
            dest: static

Untuk mengetahui informasi mendetail tentang sinkronisasi file dan cara menentukan aturan sinkronisasi, lihat Panduan Skaffold tentang sinkronisasi file.

Menambahkan fitur baru saat melakukan pengembangan di Kubernetes

Setelah menyiapkan sinkronisasi file dan hot reload, mulai siklus iterasi dan tambahkan lebih banyak fitur ke project Anda. Perubahan Anda akan di-deploy ke cluster Kubernetes tanpa menghentikan dan menghapus deployment, mem-build dan memberi tag pada image secara manual, atau mengupdate cluster.

Siklus iterasi standar menyerupai berikut ini:

  1. Buat perubahan pada project Anda. Misalnya, jika menggunakan aplikasi Buku Tamu Java Cloud Code, tambahkan endpoint baru ke class FrontendController seperti berikut:

    1. Buka file FrontendController.java dari src/main/java/cloudcode/guestbook/frontend dan tambahkan kode berikut:

      @RequestMapping("/greeting")
      @ResponseBody
      public String greeting(@RequestParam(value="name", defaultValue="World") String name) {
         return String.format("Hello from Kubernetes with IntelliJ, %s!", name);
      }
      
    2. Tambahkan impor yang diperlukan untuk anotasi baru, RequestMapping dan ResponseBody.

  2. Simpan perubahan (Ctrl/Cmd+S) atau buat project.

    Anda dapat melihat log progres dan deployment di jendela konsol. Setelah perubahan di-deploy, konfirmasi update.

  3. Untuk mengakhiri sesi pengembangan berkelanjutan, klik ikon Hentikan.

    Cloud Code menghapus semua resource Kubernetes yang digunakan untuk sesi pengembangan.

Mengembangkan aplikasi microservice menggunakan konfigurasi Skaffold

Saat mengembangkan aplikasi microservice, sebaiknya kerjakan bagian terpisah secara terpisah untuk menyederhanakan proses debug dan deployment.

Anda dapat mengembangkan dan men-debug bagian-bagian aplikasi secara terpisah dengan membagi aplikasi menjadi modul Skaffold. Misalnya, contoh Bank of Anthos adalah aplikasi yang berisi sepuluh microservice. File skaffold.yaml contoh mengelompokkan layanan ini ke dalam lima modul skaffold bernama setup, db, frontend, backend, dan loadgenerator.

Menentukan modul Skaffold dan dependensi konfigurasi

Untuk menentukan modul Skaffold dan dependensi konfigurasi:

  1. Buka project tempat Anda ingin menentukan modul.

  2. Buka file skaffold.yaml.

  3. Jika file skaffold.yaml memiliki beberapa konfigurasi, untuk membuat konfigurasi modul Skaffold, tentukan baris berikut:

    metadata:
      name: MODULE_NAME_1
    

    Misalnya, dalam skaffold.yaml Bank of Anthos, modul db menentukan deployment database:

    apiVersion: skaffold/v3
    kind: Config
    metadata:
      name: db # module defining database deployments
    requires:
    - configs:
      - setup
    build:
      artifacts:
      - image: accounts-db
        context: src/accounts-db
      - image: ledger-db
        context: src/ledger-db
    manifests:
      rawYaml:
      - dev-kubernetes-manifests/accounts-db.yaml
      - dev-kubernetes-manifests/ledger-db.yaml
    deploy:
      kubectl: {}
  4. Untuk konfigurasi yang mengandalkan konfigurasi lain yang di-deploy sebelum konfigurasi saat ini dapat di-deploy, Anda harus menambahkan konfigurasi ke dependensi. Untuk menentukan dependensi konfigurasi, tambahkan daftar configs ke bagian requires dari file skaffold.yaml Anda.

    Misalnya, file skaffold.yaml Bank of Anthos menyertakan dependensi konfigurasi setup.

    Untuk menentukan dependensi, tambahkan kode berikut ke file skaffold.yaml dengan DEPENDENCY_NAME sebagai nama dependensi Anda.

    requires:
        - configs: DEPENDENCY_NAME
    

    Konfigurasi yang tercantum dengan cara ini dapat mereferensikan dependensi yang ditentukan dalam file yang sama atau file skaffold.yaml lainnya dalam project saat ini.

  5. Uji dependensi konfigurasi Anda dengan mem-build setiap modul Skaffold secara terpisah untuk memastikan bahwa dependensi tersebut di-deploy bersama dependensinya dengan mengikuti langkah-langkah dalam Mem-build modul Skaffold tertentu dan dependensinya.

Membangun modul Skaffold tertentu dan dependensinya

Setelah menentukan modul dan dependensinya, Anda dapat menentukan modul mana yang ingin dijalankan dengan cloud code dalam file launch.json.

Jika project Anda belum menentukan file launch.json, saat menjalankan Cloud Code: Run on Kubernetes atau Cloud Code: Debug di Kubernetes, Anda akan diminta untuk memilih modul yang akan di-build:

  1. Buka Palet Perintah (Ctrl/Cmd+Shift+P), lalu jalankan Cloud Code: Run on Kubernetes.
  2. Klik Select modules.
  3. Pilih modul yang ingin di-deploy, lalu klik OK. Setiap modul dibuat dengan dependensinya.
  4. Jika diminta, pilih registry image, lalu tekan Enter.

Jika project Anda memiliki launch.json, ikuti langkah-langkah berikut untuk memilih modul Skaffold yang akan di-build:

  1. Buka file launch.json project Anda.

  2. Edit konfigurasi peluncuran untuk menambahkan opsi skaffoldFlags dengan daftar modules yang dipisahkan koma untuk mem-build. Jika skaffoldFlags dihilangkan, semua modul akan dibuat.

      {
        "name": "Run on Kubernetes",
        "type": "cloudcode.kubernetes",
        "request": "launch",
        "skaffoldConfig": "${workspaceFolder}/skaffold.yaml",
        "skaffoldFlags": {
           "modules": ["MODULE_NAME_2,MODULE_NAME_2"],
        "watch": true,
        "cleanUp": true,
        }
      }
    
  3. Jalankan konfigurasi peluncuran yang Anda edit.

Pengembangan berkelanjutan di Kubernetes

Setelah mengonfigurasi target run dengan opsi yang diinginkan, Anda dapat memilih untuk menjalankan aplikasi secara reguler atau memulai siklus iterasi pengembangan pada IDE untuk menerapkan perubahan apa pun yang dibuat pada sumber dan dependensi ke aplikasi aktif Anda.

Target yang dijalankan Run on Kubernetes memulai siklus pengembangan di cluster Kubernetes Anda. Setelah Anda memulai siklus pengembangan, Cloud Code, menggunakan Skaffold, akan mem-build image untuk project, lalu memberinya tag, mengirimnya ke repositori yang dikonfigurasi, dan menggunakan kubectl untuk men-deploy manifes Kubernetes project.

  1. Sesuaikan deployment Anda menggunakan opsi konfigurasi yang tersedia.
  2. Jika aplikasi Anda dikonfigurasi untuk menggunakan modul Skaffold, Anda dapat memilih modul tertentu untuk di-build atau di-deploy.
  3. Buka Palet Perintah (tekan Ctrl/Cmd+Shift+P), lalu jalankan perintah Cloud Code: Run on Kubernetes.
  4. Konfirmasi apakah akan menggunakan konteks Kubernetes saat ini untuk menjalankan aplikasi (atau beralih ke yang lebih disukai). Untuk mengetahui informasi selengkapnya tentang cara menyiapkan konteks Kubernetes, lihat menyiapkan konfigurasi.
  5. Jika memilih cluster jarak jauh sebagai konteks, saat diminta, pilih registry image untuk mengirim gambar. Jika menggunakan Container Registry, Anda dapat menjelajahi registry yang ada atau menentukan nama registry yang akan dibuat. Jika project Anda mengaktifkan Artifact Registry API dan memiliki setidaknya satu repositori Artifact Registry, Anda dapat menjelajahi dan memilih repositori Artifact Registry yang ada.

    Cloud Code mem-build container Anda, mengirimnya ke registry, menerapkan konfigurasi Kubernetes ke cluster, dan menunggu peluncuran.

Langkah selanjutnya