Topik ini menjelaskan cara menggunakan plugin toolkit-maven-plugin untuk mengimplementasikan rilis bertahap aplikasi Spring Cloud, Dubbo, atau High-speed Service Framework (HSF) yang diterapkan di Enterprise Distributed Application Service (EDAS).
Penyebaran otomatis
Untuk menggunakan toolkit-maven-plugin dalam penyebaran aplikasi otomatis, tambahkan dependensi plugin, konfigurasikan plugin, dan bangun pekerjaan penyebaran.
- Tambahkan Dependensi Plugin
Tambahkan dependensi plugin berikut ke file pom.xml:
<build> <plugins> <plugin> <groupId>com.alibaba.cloud</groupId> <artifactId>toolkit-maven-plugin</artifactId> <version>1.1.9</version> </plugin> </plugins> </build>Catatan Disarankan untuk menggunakan versi terbaru dari toolkit-maven-plugin. - Konfigurasikan Plugin
Konfigurasi plugin mencakup konfigurasi akun, pengemasan, dan penyebaran. Untuk informasi lebih lanjut tentang item konfigurasi kustom lainnya, lihat Tentukan Parameter Pengemasan dan Tentukan Parameter Penyebaran.
- Lengkapi Konfigurasi Akun
Di direktori root proyek yang dikemas, buat file konfigurasi akun dalam format
YAML. Namai file tersebuttoolkit_profile.yamldan tambahkan informasi berikut:regionId: # Wilayah tempat aplikasi diterapkan. Contohnya, nilai cn-beijing menunjukkan wilayah China (Beijing), nilai cn-shanghai menunjukkan wilayah China (Shanghai), dan nilai cn-hangzhou menunjukkan wilayah China (Hangzhou). jarPath: # Jalur paket penyebaran. Jika Anda menentukan parameter ini, Anda tidak perlu mengemas file aplikasi di Maven. Paket di jalur yang ditentukan digunakan untuk menerapkan aplikasi. Anda dapat menentukan jalur absolut atau relatif. accessKeyId: # ID AccessKey yang digunakan untuk mengakses sumber daya Alibaba Cloud. Untuk mengurangi risiko keamanan, kami merekomendasikan Anda menggunakan ID AccessKey dari Pengguna Resource Access Management (RAM). accessKeySecret: # Rahasia AccessKey yang digunakan untuk mengakses sumber daya Alibaba Cloud. Untuk mengurangi risiko keamanan, kami merekomendasikan Anda menggunakan Rahasia AccessKey dari Pengguna RAM. - Lengkapi Konfigurasi Pengemasan
Di direktori root proyek yang dikemas, buat file konfigurasi paket dalam format
YAML. Jika proyek yang dikemas dibuat untuk submodul Maven, buat file tersebut di direktori submodul. Namai file tersebuttoolkit_package.yamldan tambahkan informasi berikut:apiVersion: V1 kind: AppPackage spec: packageType: # Jenis paket penyebaran aplikasi. Nilai valid adalah War, FatJar, Image, dan url. packageUrl: # URL paket. Jika Anda mengatur parameter packageType ke url, Anda dapat mengatur parameter ini ke alamat paket yang digunakan untuk menerapkan aplikasi. Jika parameter ini dibiarkan kosong, paket build Maven saat ini digunakan untuk menerapkan aplikasi Anda. imageUrl: # URL gambar. Parameter ini hanya berlaku jika Anda mengatur parameter packageType ke Image. Anda juga dapat membangun gambar Docker di lingkungan lokal Anda untuk menerapkan aplikasi. - Lengkapi Konfigurasi Penyebaran
Di direktori root proyek yang dikemas, buat file penyebaran dalam format
YAML. Namai file tersebuttoolkit_deploy.yamldan tambahkan informasi berikut:apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # ID aplikasi yang akan diterapkan. Jika Anda menentukan parameter appId, Anda tidak perlu menentukan parameter namespaceId dan appName. namespaceId: # ID namespace mikroservis tempat aplikasi akan diterapkan. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. appName: # Nama aplikasi. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. updateStrategy: type: GrayBatchUpdate # Mode rilis bertahap. grayUpdate: # Pengaturan rilis bertahap. gray: x # Nilai integer, yang menentukan jumlah instans yang akan dirilis secara bertahap. batchUpdate: # Pengaturan untuk batch rilis bertahap. batch: x # Nilai integer, yang menentukan jumlah batch. releaseType: xxx # Tipe rilis. Nilai auto menunjukkan rilis otomatis. Nilai manual menunjukkan rilis manual. batchWaitTime: x # Nilai integer, yang menentukan interval antara dua batch berturut-turut. Unit: menit.
- Lengkapi Konfigurasi Akun
- Bangun Pekerjaan PenyebaranBuka direktori tempat file
pom.xmlberada. Jika Anda ingin menerapkan submodul Maven, buka direktori tempat filepom.xmlsubmodul berada. Kemudian, jalankan perintah berikut:
Berikut adalah deskripsi parameter perintah:mvn clean package toolkit:deploy -Dtoolkit_profile=toolkit_profile.yaml -Dtoolkit_package=toolkit_package.yaml -Dtoolkit_deploy=toolkit_deploy.yamltoolkit:deploy: Menginstruksikan sistem untuk menerapkan aplikasi setelah operasi pengemasan selesai.-Dtoolkit_profile: Menentukan file konfigurasi akun. Jika file konfigurasi akun berada di direktori yang sama denganpom.xmldan nama file adalah.toolkit_profile.yaml, parameter ini tidak diperlukan karena plugin akan secara otomatis mendeteksinya. Perhatikan bahwa nama file dimulai dengan titik (.).-Dtoolkit_package: Menentukan file paket. Jika file paket berada di direktori yang sama denganpom.xmldan nama file adalah.toolkit_package.yaml, parameter ini tidak diperlukan karena plugin akan secara otomatis mendeteksinya. Perhatikan bahwa nama file dimulai dengan titik (.).-Dtoolkit_deploy: Menentukan file penyebaran. Jika file penyebaran berada di direktori yang sama denganpom.xmldan nama file adalah.toolkit_deploy.yaml, parameter ini tidak diperlukan karena plugin akan secara otomatis mendeteksinya. Perhatikan bahwa nama file dimulai dengan titik (.).-Ddeploy_version: Menentukan versi yang akan diterapkan. Versi yang ditentukan memiliki prioritas lebih tinggi daripada versi yang dikonfigurasi dalam file konfigurasi penyebaran.Catatan toolkit-maven-plugin versi 1.0.6 dan seterusnya mendukung parameter ini.
Setelah menjalankan perintah pengemasan, informasi berikut akan ditampilkan. Jika BUILD SUCCESS muncul, penyebaran berhasil.
Item konfigurasi lainnya
- Tentukan Parameter Pengemasan
File paket mendukung parameter berikut:
apiVersion: V1 kind: AppPackage spec: packageType: # Jenis paket penyebaran aplikasi. Nilai valid adalah War, FatJar, Image, dan url. imageUrl: # URL gambar. Parameter ini diperlukan jika Anda menggunakan gambar untuk menerapkan aplikasi. packageUrl: # URL paket. Jika Anda mengatur parameter packageType ke url, Anda dapat mengatur parameter ini ke alamat paket yang digunakan untuk menerapkan aplikasi. build: docker: dockerfile: # File yang digunakan untuk membangun gambar Docker Anda. Parameter ini diperlukan jika Anda ingin membangun gambar di lingkungan lokal Anda untuk menerapkan aplikasi. imageRepoAddress: # Alamat repositori gambar Alibaba Cloud yang ingin Anda gunakan. Parameter ini diperlukan jika Anda ingin membangun gambar di lingkungan lokal Anda untuk menerapkan aplikasi. imageTag: # Tag gambar. Parameter ini diperlukan jika Anda ingin membangun gambar di lingkungan lokal Anda untuk menerapkan aplikasi. imageRepoUser: # Nama pengguna yang digunakan untuk mengakses repositori gambar Alibaba Cloud. Parameter ini diperlukan jika Anda ingin membangun gambar di lingkungan lokal Anda untuk menerapkan aplikasi. imageRepoPassword: # Kata sandi yang digunakan untuk mengakses repositori gambar Alibaba Cloud. Parameter ini diperlukan jika Anda ingin membangun gambar di lingkungan lokal Anda untuk menerapkan aplikasi. oss: bucket: # Nama Bucket Object Storage Service (OSS) tujuan. Parameter ini diperlukan jika Anda ingin menggunakan Bucket OSS kustom untuk menyimpan paket penyebaran. key: # Jalur Bucket OSS. Parameter ini diperlukan jika Anda ingin menggunakan Bucket OSS kustom untuk menyimpan paket penyebaran. accessKeyId: # ID AccessKey yang digunakan untuk mengakses OSS. Parameter ini diperlukan jika Anda ingin menggunakan Bucket OSS kustom untuk menyimpan paket penyebaran. accessKeySecret: # Rahasia AccessKey yang digunakan untuk mengakses OSS. Parameter ini diperlukan jika Anda ingin menggunakan Bucket OSS kustom untuk menyimpan paket penyebaran. - Tentukan Parameter Penyebaran
Klik di sini untuk menampilkan parameter yang didukung oleh file penyebaran.
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appName: # Nama aplikasi. namespaceId: # Namespace mikroservis tempat aplikasi akan diterapkan. appId: # ID aplikasi. Plugin menerapkan aplikasi yang diidentifikasi oleh ID yang ditentukan. Jika Anda tidak menentukan parameter ini, nilai namespaceId dan appName digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. version: # Versi yang akan diterapkan. Format default terdiri dari nilai hari, jam, menit, dan detik. jdk: # Versi Java Development Kit (JDK) yang bergantung pada paket yang diterapkan. Open JDK 7 dan Open JDK 8 didukung. Parameter ini tidak tersedia jika Anda menerapkan aplikasi menggunakan gambar. webContainer: # Versi kontainer Tomcat yang bergantung pada paket yang diterapkan. apache-tomcat-7.0.91 didukung. Parameter ini tidak tersedia jika Anda menerapkan aplikasi menggunakan gambar. batchWaitTime: # Interval antara dua batch berturut-turut. command: # Perintah yang digunakan untuk memulai gambar. Perintah harus merupakan objek yang dapat dieksekusi di kontainer. Misalnya, Anda dapat mengatur perintah menjadi sleep. Jika Anda menentukan parameter ini, perintah startup asli gambar menjadi tidak valid. commandArgs: # Parameter perintah startup gambar. Parameter ini diperlukan oleh perintah startup sebelumnya. - 1d envs: # Variabel lingkungan kontainer. - name: envtmp0 value: '0' - name: envtmp1 value: '1' liveness: # Memeriksa status kesehatan kontainer. Kontainer yang gagal melewati pemeriksaan kesehatan dihentikan dan kemudian dipulihkan. exec: # Anda perlu menentukan salah satu parameter exec, tcpSocket, dan httpGet. command: - sleep - 1s tcpSocket: # Anda perlu menentukan salah satu parameter exec, tcpSocket, dan httpGet. host: "192.168.1.109" # (Opsional) Alamat IP host. Jika parameter ini dibiarkan kosong, nilai default, yaitu alamat IP pod, digunakan. port: "18081" # Nomor port. Nilainya harus berupa string. httpGet: # Anda perlu menentukan salah satu parameter exec, tcpSocket, dan httpGet. host: "192.168.1.109" # (Opsional) Alamat IP host. Jika parameter ini dibiarkan kosong, nilai default, yaitu alamat IP pod, digunakan. port: "18081" # Nomor port. Nilainya harus berupa string. path: "/health" scheme: "HTTP" # Nilai valid adalah HTTP dan HTTPS. httpHeaders: - name: "color" value: "blue" initialDelaySeconds: 5 timeoutSeconds: 11 periodSeconds: 5 successThreshold: 1 # Nilainya tetap 1 dan tidak dapat diubah. failureThreshold: 3 readiness: # Memeriksa status startup aplikasi. Kontainer yang gagal melewati pemeriksaan kesehatan beberapa kali dihentikan dan kemudian dimulai ulang. Kontainer yang gagal melewati pemeriksaan kesehatan tidak menerima lalu lintas dari instance Server Load Balancer (SLB). exec: # Anda perlu menentukan salah satu parameter exec, tcpSocket, dan httpGet. command: - sleep - 1s tcpSocket: # Anda perlu menentukan salah satu parameter exec, tcpSocket, dan httpGet. host: "192.168.1.109" # (Opsional) Alamat IP host. Jika parameter ini dibiarkan kosong, nilai default, yaitu alamat IP pod, digunakan. port: "18081" # Nomor port. Nilainya harus berupa string. httpGet: # Anda perlu menentukan salah satu parameter exec, tcpSocket, dan httpGet. host: "192.168.1.109" # (Opsional) Alamat IP host. Jika parameter ini dibiarkan kosong, nilai default, yaitu alamat IP pod, digunakan. port: "18081" # Nomor port. Nilainya harus berupa string. path: "/health" scheme: "HTTP" # Nilai valid adalah HTTP dan HTTPS. httpHeaders: - name: "color" value: "blue" initialDelaySeconds: 5 timeoutSeconds: 11 periodSeconds: 5 successThreshold: 2 failureThreshold: 3 preStop: # Hook siklus hidup yang dipicu ketika kontainer akan dihapus. exec: command: - /bin/bash - -c - ls /tmp httpGet: host: "192.168.1.109" # (Opsional) Alamat IP host. Jika parameter ini dibiarkan kosong, nilai default, yaitu alamat IP pod, digunakan. port: "18081" # Nomor port. Nilainya harus berupa string. path: "/health" scheme: "HTTP" # Nilai valid adalah HTTP dan HTTPS. httpHeaders: - name: "color" value: "blue" postStart: # Hook siklus hidup yang dipicu setelah kontainer dibuat. exec: command: - /bin/bash - -c - ls /tmp httpGet: host: "192.168.1.109" # (Opsional) Alamat IP host. Jika parameter ini dibiarkan kosong, nilai default, yaitu alamat IP pod, digunakan. port: "18081" # Nomor port. Nilainya harus berupa string. path: "/health" scheme: "HTTP" # Nilai valid adalah HTTP dan HTTPS. httpHeaders: - name: "color" value: "blue" configMountDescs: # Pengaturan sumber daya konfigurasi. - type: "ConfigMap" # Nilai valid adalah ConfigMap dan Secret. name: "configtest" mountPath: "/home/admin" # Jika Anda menentukan direktori untuk parameter ini, mountItems diperlukan untuk mengatur target mount ke file. mountItems: # Mengatur target mount ke file. - key: "test-name" path: "test" useSubPath: true # Jika target mount adalah file, nilai true menunjukkan untuk mempertahankan file asli, sedangkan nilai false menunjukkan untuk menimpa file asli. javaStartUpConfig: # Parameter startup Java. Atur parameter berdasarkan kebutuhan bisnis Anda. initialHeapSize: # Ukuran awal memori heap. original: 1000 startup: "-Xms1000m" maxHeapSize: # Ukuran maksimum memori heap. original: 1000 startup: "-Xmx1000m" newSize: # Ukuran awal generasi muda. original: 200 startup: "-XX:NewSize=200m" maxNewSize: # Ukuran maksimum generasi muda. original: 200 startup: "-XX:MaxNewSize=200m" survivorRatio: # Rasio ruang Eden terhadap ruang Survivor. original: 2 startup: "-XX:SurvivorRatio=2" newRatio: # Rasio generasi tua terhadap generasi muda. original: 8 startup: "-XX:NewRatio=8" permSize: # Ukuran generasi permanen. original: 512 startup: "-XX:PermSize=512m" maxPermSize: # Ukuran maksimum generasi permanen. original: 512 startup: "-XX:MaxPermSize=200m" maxDirectMemorySize: # Ukuran maksimum memori langsung. original: 100 startup: "-XX:MaxDirectMemorySize=100m" threadStackSize: # Ukuran tumpukan utas. original: 500 startup: "-XX:ThreadStackSize=500" hsfserverPort: # Port server HSF. original: 12200 startup: "-Dhsf.server.port=12200" hsfserverMinPoolSize: # Ukuran minimum kolam utas HSF. original: 50 startup: "-Dhsf.server.min.poolsize=50" hsfserverMaxPoolSize: # Ukuran maksimum kolam utas HSF. original: 720 startup: "-Dhsf.server.max.poolsize=720" youngGarbageCollector: # Kebijakan pengumpulan sampah (GC) untuk generasi muda. original: "UseSerialGC" # Nilai valid adalah UseSerialGC, UseG1GC, UseParNewGC, dan UseParallelGC. startup: "-XX:+UseSerialGC" # Jika parameter asli diatur ke UseG1GC, UseParNewGC, atau UseParallelGC, nilai parameter ini adalah string kosong. oldGarbageCollector: # Kebijakan GC untuk generasi tua. original: "UseConcMarkSweepGC" # Nilai valid adalah UseConcMarkSweepGC, UseSerialGC, UseG1GC, UseConcMarkSweepGC, UseParNewGC, UseParallelOldGC, dan UseParallelGC. startup: "-XX:+UseConcMarkSweepGC" # Tentukan nilai dalam format -XX:+<kebijakan GC>. concGCThreads: # Jumlah utas GC konkuren. original: 5 startup: "-XX:ConcGCThreads=5" parallelGCThreads: # Jumlah utas GC paralel. original: 5 startup: "-XX:ParallelGCThreads=5" g1HeapRegionSize: # Ukuran wilayah Garbage-First (G1). original: 50 startup: "-XX:G1HeapRegionSize=50m" gclogFilePath: # Direktori log GC. original: "/tmp/" startup: "-Xloggc:/tmp/" useGCLogFileRotation: # Menentukan apakah akan mengaktifkan rotasi log GC. original: true startup: "-XX:+UseGCLogFileRotation" numberOfGCLogFiles: # Jumlah log GC. original: 5 startup: "-XX:NumberOfGCLogFiles=5" gclogFileSize: # Ukuran log GC. original: 100 startup: "-XX:GCLogFileSize=100m" heapDumpOnOutOfMemoryError: # Menentukan apakah akan mengaktifkan dump out-of-memory (OOM). original: true startup: "-XX:+HeapDumpOnOutOfMemoryError" heapDumpPath: # Jalur file untuk dump OOM. original: "/tmp/dumpfile" startup: "-XX:HeapDumpPath=/tmp/dumpfile" customParams: # Parameter kustom. original: "-Dtest=true" startup: "-Dtest=true" deployAcrossZones: "true" # Menentukan apakah akan menerapkan aplikasi lintas zona. Kami merekomendasikan Anda mengaktifkan fitur ini. Nilainya harus berupa string Boolean. deployAcrossNodes: "true" # Menentukan apakah akan menerapkan aplikasi lintas node. Kami merekomendasikan Anda mengaktifkan fitur ini. Nilainya harus berupa string Boolean. customTolerations: # Pengaturan toleransi penjadwalan. - key: aa operator: Exists effect: NoSchedule - key: bb operator: Equal value: "111" effect: "NoExecute" tolerationSeconds: 111 customAffinity: # Aturan afinitas kustom. nodeAffinity: # Aturan afinitas node. requiredDuringSchedulingIgnoredDuringExecution: nodeSelectorTerms: - matchExpressions: - key: "beta.kubernetes.io/arch" operator: "Gt" values: - "11" preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 preference: matchExpressions: - key: "beta.kubernetes.io/arch" operator: "Gt" values: - "11" podAffinity: # Aturan afinitas aplikasi (pod). requiredDuringSchedulingIgnoredDuringExecution: - namespaces: - "default" topologyKey: "failure-domain.beta.kubernetes.io/zone" labelSelector: matchExpressions: - key: "beta.kubernetes.io/arch" operator: "In" values: - "11" preferredDuringSchedulingIgnoredDuringExecution: - weight: 1 podAffinityTerm: namespaces: - "default" topologyKey: "failure-domain.beta.kubernetes.io/region" labelSelector: matchExpressions: - key: "beta.kubernetes.io/arch" operator: "Exists" values: [] podAntiAffinity: # Aturan anti-afinitas aplikasi (pod). requiredDuringSchedulingIgnoredDuringExecution: - namespaces: - "default" topologyKey: "kubernetes.io/hostname" labelSelector: matchExpressions: - key: "beta.kubernetes.io/arch" operator: "In" values: - "11" preferredDuringSchedulingIgnoredDuringExecution: - weight: 2 podAffinityTerm: namespaces: - "default" topologyKey: "kubernetes.io/hostname" labelSelector: matchExpressions: - key: "beta.kubernetes.io/arch" operator: "In" values: - "11"
Skenario tipikal
- Skenario 1: Bangun Paket WAR atau FatJar di Lingkungan Lokal untuk Menerapkan AplikasiMisalnya, Anda memiliki aplikasi yang diterapkan menggunakan paket WAR atau FatJar ke EDAS di wilayah China (Beijing), dan Anda ingin membangun paket WAR atau FatJar di lingkungan lokal untuk menerapkan ulang aplikasi. Berikut adalah deskripsi konfigurasi pengemasan dan penyebaran:
- File Paket:
apiVersion: V1 kind: AppPackage spec: packageType: War - File Penyebaran:
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # ID aplikasi. Plugin menerapkan aplikasi yang diidentifikasi oleh ID yang ditentukan. Jika Anda tidak menentukan parameter ini, nilai namespaceId dan appName digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. namespaceId: # (Opsional) Namespace mikroservis tempat aplikasi akan diterapkan. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. appName: # (Opsional) Nama aplikasi. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan.
- File Paket:
- Skenario 2: Gunakan URL Gambar yang Ada untuk Menerapkan AplikasiMisalnya, Anda memiliki aplikasi yang diterapkan menggunakan gambar di wilayah China (Beijing), dan Anda ingin menggunakan gambar yang ada (registry.cn-beijing.aliyuncs.com/test/gateway:latest) untuk menerapkan ulang aplikasi. Berikut adalah deskripsi konfigurasi pengemasan dan penyebaran:
- File Paket:
apiVersion: V1 kind: AppPackage spec: packageType: Image imageUrl: registry.cn-beijing.aliyuncs.com/test/gateway:latest - File Penyebaran:
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # ID aplikasi. Plugin menerapkan aplikasi yang diidentifikasi oleh ID yang ditentukan. Jika Anda tidak menentukan parameter ini, nilai namespaceId dan appName digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. namespaceId: # (Opsional) Namespace mikroservis tempat aplikasi akan diterapkan. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. appName: # (Opsional) Nama aplikasi. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan.
- File Paket:
- Skenario 3: Bangun Gambar di Lingkungan Lokal dan Unggah Gambar ke Repositori untuk Menerapkan AplikasiMisalnya, Anda memiliki aplikasi yang diterapkan menggunakan gambar di wilayah China (Beijing), dan Anda ingin mengompilasi serta membangun gambar di lingkungan lokal lalu mengunggah gambar ke repositori gambar Alibaba Cloud untuk menerapkan ulang aplikasi. Berikut adalah deskripsi konfigurasi pengemasan dan penyebaran:
- File Paket:
apiVersion: V1 kind: AppPackage spec: packageType: Image build: docker: dockerfile: Dockerfile # File Docker. imageRepoAddress: # Alamat repositori gambar. imageTag: # Tag gambar. imageRepoUser: # Nama pengguna yang digunakan untuk mengakses repositori gambar. imageRepoPassword: # Kata sandi yang digunakan untuk mengakses repositori gambar. - File Penyebaran:
apiVersion: V1 kind: AppDeployment spec: type: kubernetes target: appId: # ID aplikasi. Plugin menerapkan aplikasi yang diidentifikasi oleh ID yang ditentukan. Jika Anda tidak menentukan parameter ini, nilai namespaceId dan appName digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. namespaceId: # (Opsional) Namespace mikroservis tempat aplikasi akan diterapkan. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan. appName: # (Opsional) Nama aplikasi. Jika nilai appId tidak tersedia, nilai namespaceId dan appName dapat digunakan untuk mengidentifikasi aplikasi yang akan diterapkan.
- File Paket: