Siapkan CI/CD pipeline dengan menggunakan AWS CodePipeline dan AWS CDK - AWS Prescriptive Guidance

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

Siapkan CI/CD pipeline dengan menggunakan AWS CodePipeline dan AWS CDK

Konstantin Zarudaev, Yasha Dabas, Lars Kinder, dan Cizer Pereira, Amazon Web Services

Beranda

Pemberitahuan: AWS CodeCommit tidak lagi tersedia untuk pelanggan baru. Pelanggan yang sudah ada AWS CodeCommit dapat terus menggunakan layanan seperti biasa. Belajarlah lagiMengotomatiskan proses pembuatan dan rilis perangkat lunak Anda dengan integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) supports repeatable builds and rapid delivery of new features to your users. You can quickly and easily test each code change, and you can catch and fix bugs before releasing your software. By running each change through your staging and release process, you can verify the quality of your application or infrastructure code. CI/CDmewujudkan budaya, seperangkat prinsip operasi, dan kumpulan praktik yang membantu tim pengembangan aplikasi menyampaikan perubahan kode lebih sering dan andal. Implementasinya juga dikenal sebagai pipa CI/CD.

Pola ini mendefinisikan pipeline integrasi berkelanjutan dan pengiriman berkelanjutan (CI/CD) yang dapat digunakan kembali di Amazon Web Services (AWS) dengan repositori AWS. CodeCommit CodePipeline Pipeline AWS ditulis menggunakan AWS Cloud Development Kit (AWS CDK) v2.

Dengan menggunakan CodePipeline, Anda dapat memodelkan berbagai tahapan proses rilis perangkat lunak Anda melalui antarmuka AWS Management Console, AWS Command Line Interface (AWS CLI), AWS, atau CloudFormation AWS. SDKs Pola ini menunjukkan implementasi CodePipeline dan komponennya menggunakan AWS CDK. Selain membangun pustaka, AWS CDK menyertakan toolkit (perintah CLIcdk), yang merupakan alat utama untuk berinteraksi dengan aplikasi AWS CDK Anda. Di antara fungsi lainnya, toolkit menyediakan kemampuan untuk mengonversi satu atau lebih tumpukan ke CloudFormation templat dan menerapkannya ke akun AWS.

Pipeline mencakup pengujian untuk memvalidasi keamanan pustaka pihak ketiga Anda, dan membantu memastikan rilis otomatis yang dipercepat di lingkungan yang ditentukan. Anda dapat meningkatkan keamanan keseluruhan aplikasi Anda dengan menempatkannya melalui proses validasi.

Maksud dari pola ini adalah untuk mempercepat penggunaan CI/CD pipeline Anda untuk menyebarkan kode Anda sambil memastikan sumber daya yang Anda terapkan mematuhi praktik terbaik. DevOps Setelah menerapkan kode contoh, Anda akan memiliki AWS CodePipeline dengan proses linting, pengujian, pemeriksaan keamanan, penerapan, dan pasca-penerapan. Pola ini juga mencakup langkah-langkah untuk Makefile. Menggunakan Makefile, pengembang dapat mereproduksi CI/CD langkah-langkah secara lokal dan meningkatkan kecepatan proses pengembangan.

Prasyarat dan batasan

Prasyarat

  • Akun AWS yang aktif

  • Pemahaman dasar sebagai berikut:

    • AWS CDK

    • AWS CloudFormation

    • AWS CodePipeline

    • TypeScript

Batasan

Pola ini TypeScript hanya menggunakan AWS CDK. Ini tidak mencakup bahasa lain yang didukung oleh AWS CDK.

Versi produk

Gunakan versi terbaru dari alat-alat berikut:

  • Antarmuka Baris Perintah AWS (AWS CLI)

  • cfn_nag

  • git-remote-codecommit

  • Node.js

Arsitektur

Tumpukan teknologi target

  • AWS CDK

  • AWS CloudFormation

  • AWS CodeCommit

  • AWS CodePipeline

Arsitektur target

Pipeline dipicu oleh perubahan dalam AWS CodeCommit repository ()SampleRepository. Pada awalnya, CodePipeline membangun artefak, memperbarui dirinya sendiri, dan memulai proses penyebaran. Pipeline yang dihasilkan menyebarkan solusi ke tiga lingkungan independen:

  • Dev - Pemeriksaan kode tiga langkah di lingkungan pengembangan aktif

  • Uji - Integrasi dan lingkungan uji regresi

  • Prod - Lingkungan produksi

Tiga langkah yang termasuk dalam tahap Dev adalah linting, keamanan, dan pengujian unit. Langkah-langkah ini berjalan secara paralel untuk mempercepat proses. Untuk memastikan bahwa pipa hanya menyediakan artefak yang berfungsi, itu akan berhenti berjalan setiap kali langkah dalam proses gagal. Setelah penerapan tahap Dev, pipeline menjalankan tes validasi untuk memverifikasi hasilnya. Jika berhasil, pipeline kemudian akan menyebarkan artefak ke lingkungan Pengujian, yang berisi validasi pasca-penerapan. Langkah terakhir adalah menyebarkan artefak ke lingkungan Prod.

Diagram berikut menunjukkan alur kerja dari CodeCommit repositori ke proses build dan update yang dilakukan oleh CodePipeline, tiga langkah lingkungan Dev, dan penerapan dan validasi berikutnya di masing-masing dari tiga lingkungan.

Lingkungan pengembang mencakup linting, keamanan, dan pengujian unit, semuanya mencakup penerapan dan validasi.

Alat

Layanan AWS

  • AWS Cloud Development Kit (AWS CDK) adalah kerangka kerja pengembangan perangkat lunak yang membantu Anda menentukan dan menyediakan infrastruktur AWS Cloud dalam kode.

  • AWS CloudFormation membantu Anda menyiapkan sumber daya AWS, menyediakannya dengan cepat dan konsisten, serta mengelolanya sepanjang siklus hidupnya di seluruh akun dan Wilayah AWS. Dalam pola ini CloudFormation template dapat digunakan untuk membuat CodeCommit repositori dan pipa CodePipeline CI/CD.

  • AWS CodeCommit adalah layanan kontrol versi yang membantu Anda menyimpan dan mengelola repositori Git secara pribadi, tanpa perlu mengelola sistem kontrol sumber Anda sendiri.

  • AWS CodePipeline adalah CI/CD layanan yang membantu Anda memodelkan dan mengonfigurasi berbagai tahapan rilis perangkat lunak dengan cepat dan mengotomatiskan langkah-langkah yang diperlukan untuk merilis perubahan perangkat lunak secara terus menerus.

  • AWS Command Line Interface (AWS CLI) adalah alat sumber terbuka yang membantu Anda berinteraksi dengan layanan AWS melalui perintah di shell baris perintah Anda.

Alat-alat lainnya

  • cfn_nag adalah alat sumber terbuka yang mencari pola dalam CloudFormation templat untuk mengidentifikasi potensi masalah keamanan.

  • git-remote-codecommitadalah utilitas untuk mendorong dan menarik kode dari CodeCommit repositori dengan memperluas Git.

  • Node.js adalah lingkungan JavaScript runtime berbasis peristiwa yang dirancang untuk membangun aplikasi jaringan yang dapat diskalakan.

Kode

Kode untuk pola ini tersedia di GitHub AWS CodePipeline dengan repositori CI/CD praktik.

Praktik terbaik

Tinjau sumber daya, seperti kebijakan AWS Identity and Access Management (IAM), untuk mengonfirmasi bahwa mereka selaras dengan praktik terbaik organisasi Anda.

Epik

TugasDeskripsiKeterampilan yang dibutuhkan

Instal alat di macOS atau Linux.

Jika Anda menggunakan macOS atau Linux, Anda dapat menginstal alat dengan menjalankan perintah berikut di terminal pilihan Anda atau menggunakan Homebrew untuk Linux.

brew install brew install git-remote-codecommit brew install ruby brew-gem brew-gem install cfn-nag
DevOps insinyur

Siapkan AWS CLI.

Untuk menyiapkan AWS CLI, gunakan petunjuk untuk sistem operasi Anda:

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Unduh atau kloning kode.

Untuk mendapatkan kode yang digunakan oleh pola ini, lakukan salah satu hal berikut:

  • Unduh kode sumber terbaru dari rilis di GitHub repo, dan unzip file yang diunduh ke dalam folder.

  • Kloning proyek dengan menjalankan perintah berikut.

git clone --depth 1 https://github.com/aws-samples/aws-codepipeline-cicd.git

Hapus .git direktori dari repositori kloning.

cd ./aws-codepipeline-cicd rm -rf ./.git

Nantinya, Anda akan menggunakan CodeCommit repositori AWS yang baru dibuat sebagai remote origin.

DevOps insinyur

Connect ke akun AWS.

Anda dapat terhubung dengan menggunakan token keamanan sementara atau otentikasi landing zone. Untuk mengonfirmasi bahwa Anda menggunakan akun dan Wilayah AWS yang benar, jalankan perintah berikut.

AWS_REGION="eu-west-1" ACCOUNT_NUMBER=$(aws sts get-caller-identity --query Account --output text) echo "${ACCOUNT_NUMBER}"
DevOps insinyur

Bootstrap lingkungan.

Untuk mem-bootstrap lingkungan AWS CDK, jalankan perintah berikut.

npm install npm run cdk bootstrap "aws://${ACCOUNT_NUMBER}/${AWS_REGION}"

Setelah Anda berhasil mem-bootstrap lingkungan, output berikut akan ditampilkan.

⏳ Bootstrapping environment aws://{account}/{region}... ✅ Environment aws://{account}/{region} bootstrapped

Untuk informasi selengkapnya tentang bootstrap AWS CDK, lihat dokumentasi AWS CDK.

DevOps insinyur

Sintesis template.

Untuk mensintesis aplikasi AWS CDK, gunakan perintah. cdk synth

npm run cdk synth

Anda akan melihat output berikut.

Successfully synthesized to <path-to-directory>/aws-codepipeline-cicd/cdk.out Supply a stack id (CodePipeline, Dev-MainStack) to display its template.
DevOps insinyur

Menyebarkan CodePipeline tumpukan.

Sekarang setelah Anda melakukan bootstrap dan mensintesis CloudFormation template, Anda dapat menerapkannya. Penyebaran akan membuat CodePipeline pipa dan CodeCommit repositori, yang akan menjadi sumber dan pemicu pipa.

npm run cdk -- deploy CodePipeline --require-approval never

Setelah Anda menjalankan perintah, Anda akan melihat penyebaran informasi CodePipeline tumpukan dan output yang berhasil. CodePipeline.RepositoryNameIni memberi Anda nama CodeCommit repositori di akun AWS.

CodePipeline: deploying... CodePipeline: creating CloudFormation changeset... ✅ CodePipeline Outputs: CodePipeline.RepositoryName = SampleRepository Stack ARN: arn:aws:cloudformation:REGION:ACCOUNT-ID:stack/CodePipeline/STACK-ID
DevOps insinyur

Siapkan CodeCommit repositori dan cabang jarak jauh.

Setelah penerapan berhasil, CodePipeline akan memulai proses pertama pipeline, yang dapat Anda temukan di konsol CodePipeline AWS. Karena AWS CDK dan CodeCommit tidak memulai cabang default, proses pipeline awal ini akan gagal dan mengembalikan pesan kesalahan berikut.

The action failed because no branch named main was found in the selected AWS CodeCommit repository SampleRepository. Make sure you are using the correct branch name, and then try again. Error: null

Untuk memperbaiki kesalahan ini, siapkan remote origin sebagaiSampleRepository, dan buat main cabang yang diperlukan.

RepoName=$(aws cloudformation describe-stacks --stack-name CodePipeline --query "Stacks[0].Outputs[?OutputKey=='RepositoryName'].OutputValue" --output text) echo "${RepoName}" # git init git branch -m master main git remote add origin codecommit://${RepoName} git add . git commit -m "Initial commit" git push -u origin main
DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Lakukan perubahan untuk mengaktifkan pipeline.

Setelah penerapan awal berhasil, Anda harus memiliki CI/CD pipeline lengkap dengan main cabang untuk SampleRepository sebagai cabang sumber. Segera setelah Anda melakukan perubahan ke main cabang, pipeline akan memulai dan menjalankan urutan tindakan berikut:

  1. Dapatkan kode Anda dari CodeCommit repositori.

  2. Bangun kode Anda.

  3. Perbarui pipeline itu sendiri (UpdatePipeline).

  4. Jalankan tiga pekerjaan paralel untuk pemeriksaan linting, keamanan, dan pengujian unit.

  5. Jika berhasil, pipeline akan menyebarkan Main tumpukan dari ./lib/main-stack.ts ke lingkungan Dev.

  6. Jalankan pemeriksaan pasca-penerapan untuk sumber daya yang diterapkan. Anda dapat mengikuti semua CodePipeline langkah dan hasil di CodePipeline konsol.

  7. Jika berhasil, pipeline akan mengulangi penerapan dan validasi untuk lingkungan Test dan Prod.

DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Jalankan proses pengembangan dengan menggunakan Makefile.

Anda dapat menjalankan seluruh pipeline secara lokal dengan menggunakan make perintah, atau Anda dapat menjalankan langkah individual (misalnya,make linting).

Untuk menguji penggunaanmake, lakukan tindakan berikut:

  • Menerapkan pipa lokal: make

  • Jalankan hanya pengujian unit: make unittest

  • Terapkan ke akun saat ini: make deploy

  • Membersihkan lingkungan: make clean

Pengembang aplikasi, DevOps insinyur
TugasDeskripsiKeterampilan yang dibutuhkan

Hapus sumber daya aplikasi AWS CDK.

Untuk membersihkan aplikasi AWS CDK Anda, jalankan perintah berikut.

cdk destroy --all

Ketahuilah bahwa bucket Amazon Simple Storage Service (Amazon S3) yang dibuat selama bootstrap tidak dihapus secara otomatis. Mereka memerlukan kebijakan retensi yang memungkinkan penghapusan, atau Anda perlu menghapusnya secara manual di akun AWS Anda.

DevOps insinyur

Pemecahan Masalah

IsuSolusi

Template tidak berfungsi seperti yang diharapkan.

Jika ada yang tidak beres dan template tidak berfungsi, pastikan Anda memiliki yang berikut ini:

  • Versi alat yang tepat.

  • Akses ke akun AWS target (konektivitas jaringan).

  • Izin yang cukup untuk akun AWS target.

Sumber daya terkait