Tutorial ini menunjukkan kepada Anda cara:
- Membuat sistem continuous integration Jenkins untuk menjalankan build menggunakan agen Jenkins on demand di Compute Engine.
- Menyimpan artefak build di Cloud Storage
- Menerapkan kebijakan siklus proses untuk memindahkan artefak build lama di Cloud Storage ke opsi penyimpanan yang lebih terjangkau.
Arsitektur
Diagram berikut menguraikan arsitektur tutorial.
Dalam diagram, akun layanan ditambahkan ke Jenkins agar dapat membuat instance agen dan mengirim artefak ke Cloud Storage untuk penyimpanan jangka panjang. Jenkins menyediakan instance dengan cepat ketika menjalankan build. Seiring bertambahnya usia artefak build, artefak build akan berpindah melalui berbagai kelas penyimpanan untuk membatasi biaya retensinya.
Tujuan
- Membuat image dasar dengan Packer untuk menjalankan build Jenkins Anda.
- Menyediakan Jenkins menggunakan Cloud Marketplace.
- Mengonfigurasi Jenkins untuk men-deploy agen build efemeral.
- Mengupload artefak build ke Cloud Storage.
- Mengonfigurasi kebijakan siklus proses untuk mengoptimalkan biaya Cloud Storage Anda.
Biaya
Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:
- Compute Engine
- Cloud Storage
Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda,
gunakan kalkulator harga.
Gunakan Kalkulator Harga untuk membuat perkiraan biaya berdasarkan penggunaan yang Anda proyeksikan.
Sebelum memulai
- Login ke akun Google Cloud Anda. Jika Anda baru menggunakan Google Cloud, buat akun untuk mengevaluasi performa produk kami dalam skenario dunia nyata. Pelanggan baru juga mendapatkan kredit gratis senilai $300 untuk menjalankan, menguji, dan men-deploy workload.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Compute Engine API.
-
Di konsol Google Cloud, pada halaman pemilih project, pilih atau buat project Google Cloud.
-
Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.
-
Enable the Compute Engine API.
Menyiapkan lingkungan Anda
Di bagian ini, Anda akan mengonfigurasi infrastruktur dan identitas yang diperlukan untuk menyelesaikan tutorial. Anda dapat menjalankan tutorial selanjutnya dari dalam Cloud Shell.
Mengonfigurasi IAM
Buat akun layanan Identity and Access Management (IAM) untuk mendelegasikan izin ke Jenkins. Dengan akun ini, Jenkins dapat menyimpan data di Cloud Storage dan meluncurkan instance di Compute Engine. Jenkins menjalankan build Anda dalam instance efemeral dan menyimpan artefak build di Cloud Storage.
Membuat akun layanan
Buat akun layanan itu sendiri:
gcloud iam service-accounts create jenkins --display-name jenkins
Simpan alamat email akun layanan dan ID project Google Cloud terkini dalam variabel lingkungan untuk digunakan dalam perintah selanjutnya:
export SA_EMAIL=$(gcloud iam service-accounts list \ --filter="displayName:jenkins" --format='value(email)') export PROJECT=$(gcloud info --format='value(config.project)')
Ikat peran berikut ke akun layanan Anda:
gcloud projects add-iam-policy-binding $PROJECT \ --role roles/storage.admin --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.instanceAdmin.v1 \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.networkAdmin \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/compute.securityAdmin \ --member serviceAccount:$SA_EMAIL gcloud projects add-iam-policy-binding $PROJECT --role roles/iam.serviceAccountActor \ --member serviceAccount:$SA_EMAIL
Mendownload kunci akun layanan
Setelah memberikan izin yang sesuai untuk akun layanan, Anda harus membuat dan mendownload kuncinya. Simpan kunci di tempat yang aman. Anda akan menggunakannya di langkah berikutnya saat mengonfigurasi plugin JClouds untuk melakukan autentikasi dengan Compute Engine API.
Buat file kunci:
gcloud iam service-accounts keys create jenkins-sa.json --iam-account $SA_EMAIL
Di Cloud Shell, klik Lainnya more_vert, lalu klik Download file.
Ketik
jenkins-sa.json
.Klik Download untuk menyimpan file di perangkat.
Membuat image agen Jenkins
Selanjutnya, Anda membuat image Compute Engine yang dapat digunakan kembali, yang berisi software dan alat yang diperlukan untuk dijalankan sebagai eksekutor Jenkins.
Membuat kunci SSH untuk Cloud Shell
Nantinya dalam tutorial ini, Anda menggunakan
Packer
untuk mem-build image, yang memerlukan perintah ssh
untuk berkomunikasi dengan instance
build Anda. Untuk mengaktifkan akses SSH, buat dan upload kunci SSH di Cloud Shell:
Buat pasangan kunci SSH. Jika sudah ada, perintah ini menggunakan pasangan kunci tersebut; jika tidak, metode ini akan membuat kode baru:
ls ~/.ssh/id_rsa.pub || ssh-keygen -N ""
Tambahkan kunci SSH publik Cloud Shell ke metadata project Anda:
gcloud compute project-info describe \ --format=json | jq -r '.commonInstanceMetadata.items[] | select(.key == "ssh-keys") | .value' > sshKeys.pub echo "$USER:$(cat ~/.ssh/id_rsa.pub)" >> sshKeys.pub gcloud compute project-info add-metadata --metadata-from-file ssh-keys=sshKeys.pub
Membuat gambar dasar pengukuran
Langkah berikutnya adalah menggunakan
Packer
untuk membuat image virtual machine (VM) dasar pengukuran bagi agen build Anda, yang berfungsi
sebagai efemeral build eksekutor di Jenkins. Agen Jenkins paling dasar hanya
memerlukan Java untuk diinstal. Anda dapat menyesuaikan gambar dengan menambahkan perintah shell
di bagian provisioners
dalam konfigurasi Packer atau dengan menambahkan
penyedia Packer
lainnya.
Di Cloud Shell, download dan ekstrak rilis Packer terbaru. Contoh berikut menggunakan Packer 1.7.10. Anda dapat memeriksa situs Hashicorp untuk melihat apakah ada versi yang lebih baru:
wget https://releases.hashicorp.com/packer/1.7.10/packer_1.7.10_linux_amd64.zip unzip packer_1.7.10_linux_amd64.zip
Buat file konfigurasi untuk build image Packer Anda:
export PROJECT=$(gcloud info --format='value(config.project)') cat > jenkins-agent.json <<EOF { "builders": [ { "type": "googlecompute", "project_id": "$PROJECT", "source_image_family": "ubuntu-2004-lts", "source_image_project_id": "ubuntu-os-cloud", "zone": "us-central1-a", "disk_size": "50", "image_name": "jenkins-agent-{{timestamp}}", "image_family": "jenkins-agent", "ssh_username": "ubuntu" } ], "provisioners": [ { "type": "shell", "inline": ["sudo apt-get update && sudo apt-get install -y default-jdk"] } ] } EOF
Buat image dengan menjalankan Packer:
./packer build jenkins-agent.json
Setelah build selesai, nama disk image akan ditampilkan dengan format
jenkins-agent-[TIMESTAMP]
, tempat[TIMESTAMP]
yang merupakan epoch waktu saat build dimulai.==> Builds finished. The artifacts of successful builds are: --> googlecompute: A disk image was created: jenkins-agent-1612997575
Menginstal Jenkins
Di bagian ini, Anda menggunakan Cloud Marketplace untuk menyediakan instance Jenkins. Anda dapat menyesuaikan instance ini untuk menggunakan image agen yang Anda buat di bagian sebelumnya.
Klik Launch.
Ubah kolom Machine Type menjadi 4 vCPUs 15 GB Memory, n1-standard-4.
Klik Deploy dan tunggu hingga instance Jenkins Anda selesai disediakan. Setelah selesai, Anda akan melihat:
Buka instance Jenkins di browser dengan mengklik link Site Address.
Login ke Jenkins menggunakan Admin user dan Admin password yang ditampilkan di panel detail.
Instance Jenkins Anda sekarang siap digunakan.
Mengonfigurasi plugin Jenkins
Jenkins mengharuskan plugin untuk membuat agen on demand di Compute Engine dan untuk menyimpan artefak di Cloud Storage. Anda perlu menginstal dan mengonfigurasi plugin ini.
Menginstal plugin
- Pada UI Jenkins, pilih Manage Jenkins.
- Klik Manage Plugins.
- Klik tab Available.
Gunakan panel Filter untuk menemukan plugin berikut dan pilih kotak di sampingnya:
- Plugin Compute Engine
- Plugin Cloud Storage
Gambar berikut menunjukkan plugin Cloud Storage yang dipilih:
Klik Download sekarang dan instal setelah mulai ulang.
Klik kotak centang Restart Jenkins saat penginstalan selesai dan tidak ada tugas yang sedang berjalan. Jenkins memulai ulang dan menyelesaikan penginstalan plugin.
Membuat kredensial plugin
Anda harus membuat Google Credentials
untuk plugin baru:
- Login ke Jenkins lagi, lalu klik Manage Jenkins.
- Klik Kedensial.
- Klik Jenkins pada Store.
- Di panel utama UI, klik Global credentials (unrestricted).
Buat kredensial Google:
- Klik Add Credentials.
- Setel Kind ke Akun Layanan Google dari kunci pribadi.
- Di kolom Project Name, masukkan ID project Google Cloud Anda.
- Klik Choose File.
- Pilih file
jenkins-sa.json
yang sebelumnya Anda download dari Cloud Shell. Klik OK.
Klik Jenkins.
Mengonfigurasi plugin Compute Engine
Konfigurasikan plugin Compute Engine dengan kredensial yang digunakan untuk menyediakan instance agen Anda.
- Klik Manage Jenkins.
- Klik Manage Nodes and Clouds.
- Klik Configure Clouds.
- Klik Add a new Cloud.
- Klik Compute Engine.
Tetapkan setelan berikut dan ganti
[YOUR_PROJECT_ID]
dengan ID project Google Cloud Anda:- Nama:
gce
- ID Project:
[YOUR_PROJECT_ID]
- Batas Instance:
8
- Nama:
Pilih akun layanan dari menu drop-down Kredensial Akun Layanan. Akun tersebut tercantum sebagai ID project Google Cloud Anda.
Mengonfigurasi konfigurasi instance Jenkins
Setelah plugin Compute Engine dikonfigurasi, Anda dapat mengonfigurasi konfigurasi instance Jenkins untuk berbagai konfigurasi build yang Anda inginkan.
- Di halaman Configure Clouds, klik Tambahkan add untuk Konfigurasi Instance.
Masukkan setelan Umum berikut:
- Nama:
ubuntu-2004
- Deskripsi:
Ubuntu agent
- Label:
ubuntu-2004
- Nama:
Masukkan informasi berikut untuk setelan Lokasi:
- Region<:
us-central1
- Zone:
us-central1-f
- Region<:
Klik Lanjutan.
Untuk Machine Configuration, pilih Machine Type dari n1-standard-1.
Pada bagian Networking, pilih setelan berikut:
- Network: Biarkan dalam setelan default.
- Subnetwork: Biarkan dalam setelan default.
- Pilih Lampirkan IP Eksternal?.
Pilih opsi berikut untuk setelan Boot Disk:
- Untuk Image project, pilih project Google Cloud Anda.
- Untuk Image name, pilih image yang telah Anda buat sebelumnya menggunakan Packer.
Klik Save untuk mempertahankan perubahan konfigurasi Anda.
Membuat tugas Jenkins untuk menguji konfigurasi
Jenkins dikonfigurasi untuk meluncurkan instance secara otomatis saat tugas yang
dipicu memerlukan agen dengan label ubuntu-2004
. Buat tugas
yang menguji apakah konfigurasi berfungsi seperti yang diharapkan.
- Klik Create new job di antarmuka Jenkins.
- Masukkan
test
sebagai nama item. - Klik Freestyle project, lalu klik OK.
- Centang kotak Execute concurrent build jika diperlukan dan Batasi tempat project dapat berjalan.
- Di kolom Label Expression, masukkan
ubuntu-2004
. - Di bagian Build, klik Add build step.
- Klik Execute Shell.
Di kotak perintah, masukkan string pengujian:
echo "Hello world!"
Klik Save.
Klik Build Now untuk memulai build.
Mengupload artefak build ke Cloud Storage
Anda mungkin ingin menyimpan artefak build untuk analisis atau pengujian di masa mendatang. Konfigurasi tugas Jenkins Anda untuk membuat artefak dan menguploadnya ke Cloud Storage. Log build diupload ke bucket yang sama.
Di Cloud Shell, buat bucket penyimpanan untuk artefak Anda:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil mb gs://$PROJECT-jenkins-artifacts
Pada daftar tugas di UI Jenkins, klik test.
Klik Konfigurasikan.
Di bagian Build, tetapkan kolom teks Perintah ke:
env > build_environment.txt
Di bagian Post-build Actions, klik Add post-build action.
Klik Plugin Cloud Storage.
Di kolom Storage Location, masukkan jalur artefak, dengan mengganti ID project Google Cloud Anda dengan
[YOUR_PROJECT_ID]
:gs://[YOUR_PROJECT_ID]-jenkins-artifacts/$JOB_NAME/$BUILD_NUMBER
Klik Add Operation.
Klik Classic Upload.
Di kolom File Pattern, masukkan
build_environment.txt
.Di kolom Storage Location, masukkan jalur penyimpanan, dengan mengganti ID project Google Cloud Anda dengan
[YOUR_PROJECT_ID]
:gs://[YOUR_PROJECT_ID]-jenkins-artifacts/$JOB_NAME/$BUILD_NUMBER
Klik Save.
Klik Build Now untuk memulai build baru. Build ini berjalan pada instance Compute Engine yang Anda sediakan sebelumnya. Setelah selesai, build akan mengupload file artefak,
build_environment.txt
, ke bucket Cloud Storage yang dikonfigurasi.Di Cloud Shell, lihat artefak build menggunakan
gsutil
:export PROJECT=$(gcloud info --format='value(config.project)') gsutil cat gs://$PROJECT-jenkins-artifacts/test/2/build_environment.txt
Mengonfigurasi Object Lifecycle Management
Anda akan lebih cenderung mengakses artefak build terbaru. Untuk menghemat biaya pada objek yang jarang diakses, gunakan object lifecycle management untuk memindahkan artefak dari performa kelas penyimpanan yang lebih tinggi ke kelas penyimpanan berbiaya lebih rendah dan berlatensi lebih tinggi.
Di Cloud Shell, buat konfigurasi siklus proses untuk mentransisi semua objek ke Nearline storage setelah 30 hari dan objek Nearline ke Coldline storage setelah 365 hari.
cat > artifact-lifecycle.json <<EOF { "lifecycle": { "rule": [ { "action": { "type": "SetStorageClass", "storageClass": "NEARLINE" }, "condition": { "age": 30, "matchesStorageClass": ["MULTI_REGIONAL", "STANDARD", "DURABLE_REDUCED_AVAILABILITY"] } }, { "action": { "type": "SetStorageClass", "storageClass": "COLDLINE" }, "condition": { "age": 365, "matchesStorageClass": ["NEARLINE"] } } ] } } EOF
Upload file konfigurasi ke bucket penyimpanan artefak Anda:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil lifecycle set artifact-lifecycle.json gs://$PROJECT-jenkins-artifacts
Pembersihan
Hapus agen Jenkins yang masih berjalan:
gcloud compute instances list --filter=metadata.jclouds-group=ubuntu-2004 --uri | xargs gcloud compute instances delete
Menggunakan Cloud Deployment Manager, hapus instance Jenkins:
gcloud deployment-manager deployments delete jenkins-1
Hapus bucket Cloud Storage:
export PROJECT=$(gcloud info --format='value(config.project)') gsutil -m rm -r gs://$PROJECT-jenkins-artifacts
Hapus akun layanan:
export SA_EMAIL=$(gcloud iam service-accounts list --filter="displayName:jenkins" --format='value(email)') gcloud iam service-accounts delete $SA_EMAIL
Langkah selanjutnya
- Pelajari deployment berkelanjutan dengan Jenkins
- Penerapan Jenkins pada Kubernetes Engine
- Pelajari arsitektur referensi, diagram, dan praktik terbaik tentang Google Cloud. Lihat Cloud Architecture Center kami.