Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.
Buat referensi spesifikasi untuk CodeBuild
Topik ini memberikan informasi referensi penting tentang file spesifikasi build (buildspec). Buildspec adalah kumpulan perintah build dan pengaturan terkait, dalam format YAML, yang digunakan untuk menjalankan CodeBuild build. Anda dapat menyertakan buildspec sebagai bagian dari kode sumber atau Anda dapat menentukan buildspec saat Anda membuat proyek build. Untuk informasi tentang cara kerja spesifikasi build, lihatBagaimana cara CodeBuild kerja.
Topik
Nama file buildspec dan lokasi penyimpanan
Jika Anda menyertakan buildspec sebagai bagian dari kode sumber, secara default, file buildspec harus diberi nama buildspec.yml dan ditempatkan di root direktori sumber Anda.
Anda dapat mengganti nama dan lokasi file buildspec default. Misalnya, Anda dapat:
-
Gunakan file buildspec yang berbeda untuk build yang berbeda di repositori yang sama, seperti dan.
buildspec_debug.ymlbuildspec_release.yml -
Simpan file buildspec di tempat lain selain root direktori sumber Anda, seperti
config/buildspec.ymlatau dalam bucket S3. Bucket S3 harus berada di Wil AWS ayah yang sama dengan proyek build Anda. Tentukan file buildspec menggunakan ARN-nya (misalnya,).arn:aws:s3:::<my-codebuild-sample2>/buildspec.yml
Anda hanya dapat menentukan satu buildspec untuk proyek build, terlepas dari nama file buildspec.
Untuk mengganti nama file buildspec default, lokasi, atau keduanya, lakukan salah satu hal berikut:
-
Jalan AWS CLI
create-projectkanupdate-projectperintah or, aturbuildspecnilai ke jalur ke file buildspec alternatif relatif terhadap nilai variabel lingkungan bawaan.CODEBUILD_SRC_DIRAnda juga dapat melakukan hal yang setara dengancreate projectoperasi di AWS SDK. Untuk informasi selengkapnya, lihat Membuat proyek build atau Ubah pengaturan proyek build. -
Jalan AWS CLI
start-buildkan perintah, aturbuildspecOverridenilai ke jalur ke file buildspec alternatif relatif terhadap nilai variabel lingkungan bawaan.CODEBUILD_SRC_DIRAnda juga dapat melakukan hal yang setara denganstart buildoperasi di AWS SDK. Untuk informasi selengkapnya, lihat Jalankan build secara manual. -
Dalam AWS CloudFormation template, atur
BuildSpecpropertiSourcedalam sumber daya jenisAWS::CodeBuild::Projectke jalur ke file buildspec alternatif relatif terhadap nilai variabel lingkungan bawaan.CODEBUILD_SRC_DIRUntuk informasi selengkapnya, lihat BuildSpec properti di sumber AWS CodeBuild proyek di Panduan AWS CloudFormation Pengguna.
Sintaks Buildspec
File buildspec harus dinyatakan dalam format YAML.
Jika perintah berisi karakter, atau string karakter, yang tidak didukung oleh YAML, Anda harus melampirkan perintah dalam tanda kutip (“”). Perintah berikut terlampir dalam tanda kutip karena titik dua (:) diikuti oleh spasi tidak diperbolehkan di YAML. Tanda kutip dalam perintah lolos (\”).
"export PACKAGE_NAME=$(cat package.json | grep name | head -1 | awk -F: '{ print $2 }' | sed 's/[\",]//g')"
Buildspec memiliki sintaks berikut:
version: 0.2 run-as:Linux-user-nameenv: shell:shell-tagvariables:key: "value"key: "value" parameter-store:key: "value"key: "value" exported-variables: -variable-variablesecrets-manager:key:secret-id:json-key:version-stage:version-idgit-credential-helper: no | yes proxy: upload-artifacts: no | yes logs: no | yes batch: fast-fail: false | true # build-list: # build-matrix: # build-graph: # build-fanout: phases: install: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexruntime-versions:runtime:versionruntime:versioncommands: -command-commandfinally: -command-commandpre_build: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexcommands: -command-commandfinally: -command-commandbuild: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexcommands: -command-commandfinally: -command-commandpost_build: run-as:Linux-user-nameon-failure: ABORT | CONTINUE | RETRY | RETRY-count| RETRY-regex| RETRY-count-regexcommands: -command-commandfinally: -command-commandreports:report-group-name-or-arn: files: -location-locationbase-directory:locationdiscard-paths: no | yes file-format:report-formatartifacts: files: -location-locationname:artifact-namediscard-paths: no | yes base-directory:locationexclude-paths:excluded pathsenable-symlinks: no | yes s3-prefix:prefixsecondary-artifacts:artifactIdentifier: files: -location-locationname:secondary-artifact-namediscard-paths: no | yes base-directory:locationartifactIdentifier: files: -location-locationdiscard-paths: no | yes base-directory:locationcache: key:keyfallback-keys: -fallback-key-fallback-keyaction: restore | save paths: -path-path
Buildspec berisi yang berikut:
versi
Pemetaan yang diperlukan. Merupakan versi buildspec. Kami menyarankan Anda menggunakan0.2.
catatan
Meskipun versi 0.1 masih didukung, kami sarankan Anda menggunakan versi 0.2 bila memungkinkan. Untuk informasi selengkapnya, lihat Versi Buildspec.
berjalan seperti
Urutan opsional. Tersedia untuk pengguna Linux saja. Menentukan pengguna Linux yang menjalankan perintah dalam file buildspec ini. run-asmemberikan izin baca dan jalankan pengguna yang ditentukan. Ketika Anda menentukan run-as di bagian atas file buildspec, itu berlaku secara global untuk semua perintah. Jika Anda tidak ingin menentukan pengguna untuk semua perintah file buildspec, Anda dapat menentukan satu untuk perintah dalam fase dengan menggunakan run-as salah satu blok. phases Jika tidak run-as ditentukan, maka semua perintah berjalan sebagai pengguna root.
env
Urutan opsional. Merupakan informasi untuk satu atau lebih variabel lingkungan khusus.
catatan
Untuk melindungi informasi sensitif, berikut ini disembunyikan di CodeBuild log:
-
AWS ID kunci akses. Untuk informasi selengkapnya, lihat Mengelola Kunci Akses untuk Pengguna IAM di Panduan AWS Identity and Access Management Pengguna.
-
String ditentukan menggunakan Parameter Store. Untuk informasi selengkapnya, lihat Panduan Konsol Penyimpanan Parameter Manajer Sistem dan Panduan Konsol Penyimpanan Parameter Manajer Sistem di Panduan Pengguna Amazon EC2 Systems Manager.
-
String ditentukan menggunakan AWS Secrets Manager. Untuk informasi selengkapnya, lihat Manajemen kunci.
catatan
Masking cocok dengan nilai persis yang disimpan di Amazon EC2 Systems Manager Parameter Store atau AWS Secrets Manager. Jika perintah build mengubah rahasia sebelum muncul di log, hasilnya adalah string berbeda yang tidak ditutupi. Misalnya, mengkodekannya dengan Base64, membalikkannya, mengubah huruf besar/kecil, atau menggabungkannya dengan teks lain menciptakan nilai berbeda yang dapat muncul di log build.
Untuk menjaga nilai tetap tertutup, simpan dalam bentuk yang digunakan build Anda. Misalnya, jika build Anda memerlukan Base64-encoded nilai, simpan Base64-encoded string langsung di AWS Secrets Manager atau Amazon EC2 Systems Manager Parameter Store. Dengan cara ini, nilai yang dicatat cocok dengan nilai yang disimpan.
- lingkungan/cangkang
-
Urutan opsional. Menentukan shell yang didukung untuk sistem operasi Linux atau Windows.
Untuk sistem operasi Linux, tag shell yang didukung adalah:
-
bash -
/bin/sh
Untuk sistem operasi Windows, tag shell yang didukung adalah:
-
powershell.exe -
cmd.exe
-
- env/variabel
-
Diperlukan jika
envditentukan, dan Anda ingin menentukan variabel lingkungan khusus dalam teks biasa. Berisi pemetaanvalueskkeyalar/, di mana setiap pemetaan mewakili satu variabel lingkungan khusus dalam teks biasa.keyadalah nama variabel lingkungan khusus, danvaluemerupakan nilai variabel itu.penting
Kami sangat tidak menyarankan penyimpanan nilai sensitif dalam variabel lingkungan. Variabel lingkungan dapat ditampilkan dalam teks biasa menggunakan alat seperti CodeBuild konsol dan AWS CLI. Untuk nilai sensitif, sebaiknya gunakan
parameter-storeatausecrets-managerpemetaan sebagai gantinya, seperti yang dijelaskan nanti di bagian ini.Setiap variabel lingkungan yang Anda tetapkan menggantikan variabel lingkungan yang ada. Misalnya, jika image Docker sudah berisi variabel lingkungan bernama
MY_VARdengan nilaimy_value, dan Anda menetapkan variabel lingkungan bernamaMY_VARdengan nilaiother_value,my_valuemaka diganti denganother_value. Demikian pula, jika image Docker sudah berisi variabel lingkungan bernamaPATHdengan nilai/usr/local/sbin:/usr/local/bin, dan Anda menetapkan variabel lingkungan bernamaPATHdengan nilai$PATH:/usr/share/ant/bin,/usr/local/sbin:/usr/local/binmaka diganti dengan nilai$PATH:/usr/share/ant/binliteral.Jangan mengatur variabel lingkungan apa pun dengan nama yang dimulai dengan
CODEBUILD_. Awalan ini dicadangkan untuk penggunaan internal .Jika variabel lingkungan dengan nama yang sama didefinisikan di beberapa tempat, nilainya ditentukan sebagai berikut:
-
Nilai dalam panggilan operasi mulai build memiliki prioritas tertinggi. Anda dapat menambahkan atau mengganti variabel lingkungan saat Anda membuat build. Untuk informasi selengkapnya, lihat Jalankan AWS CodeBuild build secara manual.
-
Nilai dalam definisi proyek build akan diutamakan berikutnya. Anda dapat menambahkan variabel lingkungan di tingkat proyek saat Anda membuat atau mengedit proyek. Untuk informasi selengkapnya, lihat Membuat proyek pembangunan di AWS CodeBuild dan Ubah pengaturan proyek build di AWS CodeBuild.
-
Nilai dalam deklarasi buildspec memiliki prioritas terendah.
-
- env/penyimpanan parameter
-
Diperlukan jika
envditentukan, dan Anda ingin mengambil variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store. Berisi pemetaanvalueskkeyalar/, di mana setiap pemetaan mewakili satu variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store.keyadalah nama yang Anda gunakan nanti dalam perintah build untuk merujuk ke variabel lingkungan khusus ini, danvaluemerupakan nama variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store. Untuk menyimpan nilai sensitif, lihat Peny impanan Parameter dan Panduan Manajer Sistem: Membuat dan menguji parameter String (konsol) di Panduan Pengguna Amazon EC2 Systems Manager.penting
CodeBuild Untuk mengizinkan pengambilan variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store, Anda harus menambahkan
ssm:GetParameterstindakan ke peran CodeBuild layanan Anda. Untuk informasi selengkapnya, lihat Memungkinkan CodeBuild untuk berinteraksi dengan orang lain AWS layanan.Setiap variabel lingkungan yang Anda ambil dari Amazon EC2 Systems Manager Parameter Store menggantikan variabel lingkungan yang ada. Misalnya, jika image Docker sudah berisi variabel lingkungan bernama
MY_VARdengan nilaimy_value, dan Anda mengambil variabel lingkungan bernamaMY_VARdengan nilaiother_value,my_valuemaka diganti denganother_value. Demikian pula, jika image Docker sudah berisi variabel lingkungan bernamaPATHdengan nilai/usr/local/sbin:/usr/local/bin, dan Anda mengambil variabel lingkungan bernamaPATHdengan nilai$PATH:/usr/share/ant/bin,/usr/local/sbin:/usr/local/binmaka diganti dengan nilai$PATH:/usr/share/ant/binliteral.Jangan menyimpan variabel lingkungan apa pun dengan nama yang dimulai dengan
CODEBUILD_. Awalan ini dicadangkan untuk penggunaan internal .Jika variabel lingkungan dengan nama yang sama didefinisikan di beberapa tempat, nilainya ditentukan sebagai berikut:
-
Nilai dalam panggilan operasi mulai build memiliki prioritas tertinggi. Anda dapat menambahkan atau mengganti variabel lingkungan saat Anda membuat build. Untuk informasi selengkapnya, lihat Jalankan AWS CodeBuild build secara manual.
-
Nilai dalam definisi proyek build akan diutamakan berikutnya. Anda dapat menambahkan variabel lingkungan di tingkat proyek saat Anda membuat atau mengedit proyek. Untuk informasi selengkapnya, lihat Membuat proyek pembangunan di AWS CodeBuild dan Ubah pengaturan proyek build di AWS CodeBuild.
-
Nilai dalam deklarasi buildspec memiliki prioritas terendah.
-
- pengelola lingkungan/rahasia
-
Diperlukan jika Anda ingin mengambil variabel lingkungan khusus yang disimpan di AWS Secrets Manager. Tentukan Manajer Rahasia
reference-keymenggunakan pola berikut::<key><secret-id>:<json-key>:<version-stage>:<version-id><key>-
(Diperlukan) Nama variabel lingkungan lokal. Gunakan nama ini untuk mengakses variabel selama build.
<secret-id>-
(Diperlukan) Nama atau Nama Sumber Daya Amazon (ARN) yang berfungsi sebagai pengidentifikasi unik untuk rahasia. Untuk mengakses rahasia di AWS akun Anda, cukup tentukan nama rahasia. Untuk mengakses rahasia di AWS akun yang berbeda, tentukan ARN rahasia.
<json-key>-
(Opsional) Menentukan nama kunci pasangan kunci-nilai Manajer Rahasia yang nilainya ingin Anda ambil. Jika Anda tidak menentukan a
json-key, CodeBuild mengambil seluruh teks rahasia. <version-stage>-
(Opsional) Menentukan versi rahasia yang ingin Anda ambil dengan label pementasan yang dilampirkan ke versi. Label pementasan digunakan untuk melacak versi yang berbeda selama proses rotasi. Jika Anda menggunakan
version-stage, jangan tentukanversion-id. Jika Anda tidak menentukan tahap versi atau ID versi, defaultnya adalah mengambil versi dengan nilai tahap versiAWSCURRENT. <version-id>-
(Opsional) Menentukan pengenal unik dari versi rahasia yang ingin Anda gunakan. Jika Anda menentukan
version-id, jangan tentukanversion-stage. Jika Anda tidak menentukan tahap versi atau ID versi, defaultnya adalah mengambil versi dengan nilai tahap versiAWSCURRENT.
Dalam contoh berikut,
TestSecretadalah nama pasangan kunci-nilai yang disimpan di Secrets Manager. KuncinyaTestSecretadalahMY_SECRET_VAR. Anda mengakses variabel selama build menggunakanLOCAL_SECRET_VARnama.env: secrets-manager: LOCAL_SECRET_VAR: "TestSecret:MY_SECRET_VAR"Untuk informasi selengkapnya, lihat Apa itu AWS Secrets Manager dalam Panduan Pengguna AWS Secrets Manager .
- env/variabel yang diekspor
-
Pemetaan opsional. Digunakan untuk membuat daftar variabel lingkungan yang ingin Anda ekspor. Tentukan nama setiap variabel yang ingin Anda ekspor pada baris terpisah di bawahnya
exported-variables. Variabel yang ingin Anda ekspor harus tersedia di wadah Anda selama pembuatan. Variabel yang Anda ekspor dapat menjadi variabel lingkungan.Variabel lingkungan yang diekspor digunakan bersama dengan AWS CodePipeline untuk mengekspor variabel lingkungan dari tahap pembuatan saat ini ke tahap berikutnya dalam pipeline. Untuk informasi selengkapnya, lihat Bek erja dengan variabel di Panduan AWS CodePipeline Pengguna.
Selama build, nilai variabel tersedia dimulai dengan
installfase. Ini dapat diperbarui antara awalinstallfase dan akhirpost_buildfase. Setelahpost_buildfase berakhir, nilai variabel yang diekspor tidak dapat berubah.catatan
Berikut ini tidak dapat diekspor:
-
Rahasia Penyimpanan Parameter Pengelola Sistem Amazon EC2 yang ditentukan dalam proyek build.
-
Rahasia Manajer Rahasia ditentukan dalam proyek pembangunan
-
Variabel lingkungan yang dimulai dengan
AWS_.
-
- env/git-kredential-pembantu
-
Pemetaan opsional. Digunakan untuk menunjukkan apakah CodeBuild menggunakan pembantu kredensi Git untuk memberikan kredenSIAL Git.
yesjika digunakan. Jika tidak,noatau tidak ditentukan. Untuk informasi selengkapnya, lihat gitdi situs web Git. catatan
git-credential-helpertidak didukung untuk build yang dipicu oleh webhook untuk repositori Git publik.
proxy
Urutan opsional. Digunakan untuk mewakili pengaturan jika Anda menjalankan build Anda di server proxy eksplisit. Untuk informasi selengkapnya, lihat Jalan CodeBuild kan di server proxy eksplisit.
- proksi/unggah-artefak
-
Pemetaan opsional. Setel ke
yesjika Anda ingin build Anda di server proxy eksplisit untuk mengunggah artefak. Nilai default-nyano. - proksi/log
-
Pemetaan opsional. Setel ke
yesuntuk build Anda di server proxy eksplisit untuk membuat CloudWatch log. Nilai default-nyano.
fase
Urutan yang diperlukan. Merupakan perintah CodeBuild yang berjalan selama setiap fase build.
catatan
Di buildspec versi 0.1, CodeBuild jalankan setiap perintah dalam instance terpisah dari shell default di lingkungan build. Ini berarti bahwa setiap perintah berjalan secara terpisah dari semua perintah lainnya. Oleh karena itu, secara default, Anda tidak dapat menjalankan perintah tunggal yang bergantung pada keadaan perintah sebelumnya (misalnya, mengubah direktori atau mengatur variabel lingkungan). Untuk mengatasi batasan ini, kami sarankan Anda menggunakan versi 0.2, yang memecahkan masalah ini. Jika Anda harus menggunakan buildspec versi 0.1, kami merekomendasikan pendekatan di. Shell dan perintah di lingkungan build
- fase/*/run-as
-
Urutan opsional. Gunakan dalam fase build untuk menentukan pengguna Linux yang menjalankan perintahnya. Jika juga
run-asditentukan secara global untuk semua perintah di bagian atas file buildspec, maka pengguna tingkat fase diutamakan. Misalnya, jika secara globalrun-asmenentukan User-1, dan untukinstallfase hanyarun-aspernyataan yang ditentukan User-2, maka semua perintah dalam file buildspec dijalankan sebagai perintah User-1 kecuali dalaminstallfase, yang dijalankan sebagai. User-2 - fase/*/pada kegagalan
-
Urutan opsional. Menentukan tindakan yang harus diambil jika kegagalan terjadi selama fase. Ini dapat berupa salah satu dari nilai berikut:
-
ABORT- Batalkan pembangunan. -
CONTINUE- Lanjutkan ke fase berikutnya. -
RETRY- Coba ulang build hingga 3 kali dengan pesan kesalahan yang cocok dengan ekspresi.*reguler. -
RETRY-- Coba ulang build untuk jumlah yang ditentukan, seperti yang diwakili olehcountcountdengan pesan kesalahan yang cocok dengan ekspresi.*reguler. Perhatikan bahwacountharus antara 0 dan 100. Misalnya, nilai yang valid termasukRETRY-4danRETRY-8. -
RETRY-- Coba ulang build hingga 3 kali, dan gunakanregexregexuntuk menyertakan ekspresi reguler agar sesuai dengan pesan kesalahan yang ditentukan. Misalnya, nilai yang valid termasukRetry-.*Error: Unable to connect to database.*danRETRY-invalid+. -
RETRY-- Coba lagi build untuk sejumlah kali tertentu, seperti yang diwakili olehcount-regexcount. Perhatikan bahwacountharus antara 0 dan 100. Anda juga dapat menggunakanregexuntuk menyertakan ekspresi reguler untuk mencocokkan pesan kesalahan. Misalnya, nilai yang valid termasukRetry-3-.*connection timed out.*danRETRY-8-invalid+.
Jika properti ini tidak ditentukan, proses kegagalan mengikuti fase transisi seperti yang ditunjukkan padaBangun transisi fase.
penting
A
on-failuretribut tidak didukung saat menggunakan komputasi Lambda atau kapasitas cadangan. Atribut ini hanya berfungsi dengan gambar komputasi EC2 yang disediakan oleh. CodeBuild -
- fase/*/ akhirnya
-
Blok opsional. Perintah yang ditentukan dalam
finallyblok dijalankan setelah perintah dicommandsblok. Perintah dalamfinallyblok dijalankan bahkan jika perintah dicommandsblok gagal. Misalnya, jikacommandsblok berisi tiga perintah dan yang pertama gagal, mele CodeBuild watkan dua perintah yang tersisa dan menjalankan perintah apa pun difinallyblok. Fase ini berhasil ketika semua perintah dicommandsdanfinallyblok berjalan dengan sukses. Jika ada perintah dalam fase gagal, fase gagal.
Nama fase build yang diizinkan adalah:
- fase/instal
-
Urutan opsional. Merupakan perintah, jika ada, yang CodeBuild berjalan selama instalasi. Kami menyarankan Anda menggunakan
installfase hanya untuk menginstal paket di lingkungan build. Misalnya, Anda dapat menggunakan fase ini untuk menginstal kerangka pengujian kode seperti Mocha atau RSpec.- phases/install/versi runtime-
-
Urutan opsional. Versi runtime didukung dengan gambar standar Ubuntu 5.0 atau yang lebih baru dan gambar standar Amazon Linux 2 4.0 atau lebih baru. Jika ditentukan, setidaknya satu runtime harus disertakan dalam bagian ini. Tentukan runtime menggunakan versi tertentu, versi utama diikuti oleh
.xuntuk menentukan yang CodeBuild menggunakan versi utama tersebut dengan versi minor terbarunya, ataulatestuntuk menggunakan versi mayor dan minor terbaru (misalnya,ruby: 3.2,nodejs: 18.x, ataujava: latest). Anda dapat menentukan runtime menggunakan angka atau variabel lingkungan. Misalnya, jika Anda menggunakan gambar standar Amazon Linux 2 4.0, maka berikut ini menentukan bahwa versi 17 dari Java, versi minor terbaru dari python versi 3, dan versi yang terkandung dalam variabel lingkungan Ruby diinstal. Untuk informasi selengkapnya, lihat Gambar Docker disediakan oleh CodeBuild.phases: install: runtime-versions: java: corretto8 python: 3.x ruby: "$MY_RUBY_VAR"Anda dapat menentukan satu atau lebih runtime di
runtime-versionsbagian file buildspec Anda. Jika runtime Anda bergantung pada runtime lain, Anda juga dapat menentukan runtime dependen dalam file buildspec. Jika Anda tidak menentukan runtime apa pun dalam file buildspec, pilih runtime CodeBuild default yang tersedia dalam gambar yang Anda gunakan. Jika Anda menentukan satu atau lebih runtime, hanya CodeBuild menggunakan runtime tersebut. Jika runtime dependen tidak ditentukan, CodeBuild coba pilih runtime dependen untuk Anda.catatan
Jika versi runtime tidak ditentukan, CodeBuild gunakan versi default. Versi default dapat berubah ketika versi default sebelumnya mencapai akhir masa pakai (EOL). Untuk menghindari perubahan tak terduga pada lingkungan build, sebaiknya tentukan versi runtime di file buildspec.
Jika dua runtime tertentu bertentangan, build gagal. Misalnya,
android: 29danjava: openjdk11konflik, jadi jika keduanya ditentukan, build gagal.Untuk informasi selengkapnya tentang runtime yang tersedia, lihatRuntime yang tersedia.
catatan
Jika Anda menentukan
runtime-versionsbagian dan menggunakan gambar selain Ubuntu Standard Image 2.0 atau yang lebih baru, atau gambar standar Amazon Linux 2 (AL2) 1.0 atau yang lebih baru, build mengeluarkan peringatan, "Skipping install of runtimes. Runtime version selection is not supported by this build image.”
- phases/install/perintah
-
Urutan opsional. Berisi urutan skalar, di mana setiap skalar mewakili satu perintah yang CodeBuild berjalan selama instalasi. CodeBuild menjalankan setiap perintah, satu per satu, dalam urutan yang tercantum, dari awal hingga akhir.
- fase/pra_build
-
Urutan opsional. Merupakan perintah, jika ada, yang CodeBuild berjalan sebelum build. Misalnya, Anda dapat menggunakan fase ini untuk masuk ke Amazon ECR, atau Anda dapat menginstal dependensi npm.
- phases/pre_build/perintah
-
Urutan yang
pre_builddiperlukan jika ditentukan. Berisi urutan skalar, di mana setiap skalar mewakili satu perintah yang CodeBuild berjalan sebelum build. CodeBuildmenjalankan setiap perintah, satu per satu, dalam urutan yang tercantum, dari awal hingga akhir.
- fase/membangun
-
Urutan opsional. Merupakan perintah, jika ada, yang CodeBuild berjalan selama pembuatan. Misalnya, Anda dapat menggunakan fase ini untuk menjalankan Mocha, RSpec, atau sbt.
- phases/build/perintah
-
Diperlukan
buildjika ditentukan. Berisi urutan skalar, di mana setiap skalar mewakili satu perintah yang CodeBuild berjalan selama pembuatan. CodeBuild menjalankan setiap perintah, satu per satu, dalam urutan yang tercantum, dari awal hingga akhir.
- fase/post_build
-
Urutan opsional. Merupakan perintah, jika ada, yang CodeBuild berjalan setelah build. Misalnya, Anda dapat menggunakan Maven untuk mengemas artefak build ke dalam file JAR atau WAR, atau Anda dapat mendorong gambar Docker ke Amazon ECR. Kemudian Anda dapat mengirim pemberitahuan build melalui Amazon SNS.
- phases/post_build/perintah
-
Diperlukan
post_buildjika ditentukan. Berisi urutan skalar, di mana setiap skalar mewakili satu perintah yang CodeBuild berjalan setelah build. CodeBuild menjalankan setiap perintah, satu per satu, dalam urutan yang tercantum, dari awal hingga akhir.
melaporkan
- laporan-nama-kelompok-atau-arn
-
Urutan opsional. Menentukan grup laporan tempat laporan dikirim. Sebuah proyek dapat memiliki maksimal lima kelompok laporan. Tentukan ARN dari grup laporan yang ada, atau nama grup laporan baru. Jika Anda menentukan nama, CodeBuild buat grup laporan menggunakan nama proyek Anda dan nama yang Anda tentukan dalam format
<project-name>-<report-group-name>. Nama grup laporan juga dapat diatur menggunakan variabel lingkungan di buildspec seperti.$REPORT_GROUP_NAMEUntuk informasi selengkapnya, lihat Penamaan grup laporan. - laporan/<report-group>/file
-
Urutan yang diperlukan. Merupakan lokasi yang berisi data mentah hasil pengujian yang dihasilkan oleh laporan. Berisi urutan skalar, dengan setiap skalar mewakili lokasi terpisah di mana CodeBuild dapat menemukan file uji, relatif terhadap lokasi build asli atau, jika disetel,.
base-directoryLokasi dapat mencakup yang berikut:-
Satu file (misalnya,
my-test-report-file.json). -
Satu file dalam subdirektori (misalnya,
ataumy-subdirectory/my-test-report-file.json).my-parent-subdirectory/my-subdirectory/my-test-report-file.json -
'**/*'mewakili semua file secara rekursif. -
mewakili semua file dalam subdirektori bernamamy-subdirectory/*my-subdirectory. -
mewakili semua file secara rekursif mulai dari subdirektori bernama.my-subdirectory/**/*my-subdirectory
-
- laporan/<report-group>/file-format
-
Pemetaan opsional. Merupakan format file laporan. Jika tidak ditentukan,
JUNITXMLdigunakan. Nilai ini tidak peka huruf besar/kecil. Kemungkinan nilainya adalah:Laporan pengujian
-
CUCUMBERJSON -
Mentimun JSON
-
JUNITXML -
JUnit XML
-
NUNITXML -
nUnit XML
-
NUNIT3XML -
NUnit 3 XML
-
TESTNGXML -
XML TestNG
-
VISUALSTUDIOTRX -
Visual Studio TRX
Laporan cakupan kode
-
CLOVERXML -
Clover XML
-
COBERTURAXML -
Cobertura XML
-
JACOCOXML -
JaCoCo XML
-
SIMPLECOV -
SimpleCov JSON
catatan
CodeBuild menerima laporan cakupan kode JSON yang dihasilkan oleh simplecov
, bukan simplecov-json.
-
- laporan/<report-group>/direktori dasar
-
Pemetaan opsional. Merupakan satu atau lebih direktori tingkat atas, relatif terhadap lokasi build asli, yang CodeBuild digunakan untuk menentukan di mana menemukan file pengujian mentah.
- laporan/<report-group>/jalur buang
-
Tidak wajib. Menentukan apakah direktori file laporan diratakan dalam output. Jika ini tidak ditentukan, atau berisi
no, file laporan dikeluarkan dengan struktur direktori mereka utuh. Jika ini berisiyes, semua file uji ditempatkan di direktori output yang sama. Misalnya, jika jalur ke hasil tes adalahcom/myapp/mytests/TestResult.xml, menentukanyesakan menempatkan file ini di/TestResult.xml.
artefak
Urutan opsional. Merupakan informasi tentang di mana CodeBuild dapat menemukan output build dan bagaimana mempersi CodeBuild apkannya untuk diunggah ke bucket keluaran S3. Urutan ini tidak diperlukan jika, misalnya, Anda membangun dan mendorong gambar Docker ke Amazon ECR, atau Anda menjalankan pengujian unit pada kode sumber Anda, tetapi tidak membangunnya.
catatan
Metadata Amazon S3 memiliki CodeBuild header bernama x-amz-meta-codebuild-buildarn yang berisi buildArn CodeBuild build yang menerbitkan artefak ke Amazon S3. Dit buildArn ambahkan untuk memungkinkan pelacakan sumber untuk pemberitahuan dan referensi dari mana bangunan artefak dihasilkan.
- artefak/file
-
Urutan yang diperlukan. Merupakan lokasi yang berisi artefak keluaran build di lingkungan build. Berisi urutan skalar, dengan setiap skalar mewakili lokasi terpisah di mana CodeBuild dapat menemukan artefak keluaran build, relatif terhadap lokasi build asli atau, jika disetel, direktori dasar. Lokasi dapat mencakup yang berikut:
-
Satu file (misalnya,
my-file.jar). -
Satu file dalam subdirektori (misalnya,
ataumy-subdirectory/my-file.jar).my-parent-subdirectory/my-subdirectory/my-file.jar -
'**/*'mewakili semua file secara rekursif. -
mewakili semua file dalam subdirektori bernamamy-subdirectory/*my-subdirectory. -
mewakili semua file secara rekursif mulai dari subdirektori bernama.my-subdirectory/**/*my-subdirectory
Saat Anda menentukan lokasi artefak keluaran build, CodeBuild dapat menemukan lokasi build asli di lingkungan build. Anda tidak perlu menyiapkan lokasi keluaran artefak build Anda dengan jalur ke lokasi build asli atau menentukan
./atau serupa. Jika Anda ingin mengetahui jalur ke lokasi ini, Anda dapat menjalankan perintah sepertiecho $CODEBUILD_SRC_DIRselama build. Lokasi untuk setiap lingkungan build mungkin sedikit berbeda. -
- artefak/nama
-
Nama opsional. Menentukan nama untuk artefak build Anda. Nama ini digunakan jika salah satu dari berikut ini benar.
-
Anda menggunakan CodeBuild API untuk membuat build dan
overrideArtifactNamebendera ditetapkan padaProjectArtifactsobjek saat proyek diperbarui, proyek dibuat, atau build dimulai. -
Anda menggunakan CodeBuild konsol untuk membuat build, nama ditentukan dalam file buildspec, dan Anda memilih Aktifkan versi semantik saat Anda membuat atau memperbarui proyek. Untuk informasi selengkapnya, lihat Membuat proyek build (konsol).
Anda dapat menentukan nama dalam file buildspec yang dihitung pada waktu pembuatan. Nama yang ditentukan dalam file buildspec menggunakan bahasa perintah Shell. Misalnya, Anda dapat menambahkan tanggal dan waktu untuk nama artefak Anda sehingga selalu unik. Nama artefak yang unik mencegah artefak dituliskan. Untuk informasi selengkapnya, lihat bahasa perintah Shell
. -
Ini adalah contoh nama artefak yang ditambahkan dengan tanggal artefak dibuat.
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: myname-$(date +%Y-%m-%d) -
Ini adalah contoh nama artefak yang menggunakan variabel CodeBuild lingkungan. Untuk informasi selengkapnya, lihat Variabel lingkungan di lingkungan build.
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: myname-$AWS_REGION -
Ini adalah contoh nama artefak yang menggunakan variabel CodeBuild lingkungan dengan tanggal pembuatan artefak ditambahkan padanya.
version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: $AWS_REGION-$(date +%Y-%m-%d)
Anda dapat menambahkan informasi jalur ke nama sehingga artefak bernama ditempatkan di direktori berdasarkan jalur dalam nama. Dalam contoh ini, artefak build ditempatkan di output di bawah
builds/<build number>/my-artifacts.version: 0.2 phases: build: commands: - rspec HelloWorld_spec.rb artifacts: files: - '**/*' name: builds/$CODEBUILD_BUILD_NUMBER/my-artifacts -
- artefak/jalur buang
-
Tidak wajib. Menentukan apakah direktori artefak build diratakan dalam output. Jika ini tidak ditentukan, atau berisi
no, artefak build dikeluarkan dengan struktur direktorinya utuh. Jika ini berisiyes, semua artefak build ditempatkan di direktori output yang sama. Misalnya, jika jalur ke file dalam artefak keluaran build adalahcom/mycompany/app/HelloWorld.java, menentukanyesakan menempatkan file ini di/HelloWorld.java. - artefak/direktori dasar
-
Pemetaan opsional. Merupakan satu atau lebih direktori tingkat atas, relatif terhadap lokasi build asli, yang CodeBuild digunakan untuk menentukan file dan subdirektori mana yang akan disertakan dalam artefak keluaran build. Nilai yang valid meliputi:
-
Direktori tingkat atas tunggal (misalnya,
my-directory). -
'my-directory*'mewakili semua direktori tingkat atas dengan nama yang dimulai denganmy-directory.
Direktori tingkat atas yang cocok tidak disertakan dalam artefak keluaran build, hanya file dan subdirektori mereka.
Anda dapat menggunakan
filesdandiscard-pathsuntuk lebih membatasi file dan subdirektori mana yang disertakan. Misalnya, untuk struktur direktori berikut:. ├── my-build-1 │ └── my-file-1.txt └── my-build-2 ├── my-file-2.txt └── my-subdirectory └── my-file-3.txtDan untuk
artifactsurutan berikut:artifacts: files: - '*/my-file-3.txt' base-directory: my-build-2Subdirektori dan file berikut akan disertakan dalam artefak keluaran build:
. └── my-subdirectory └── my-file-3.txtSedangkan untuk
artifactsurutan berikut:artifacts: files: - '**/*' base-directory: 'my-build*' discard-paths: yesFile-file berikut akan disertakan dalam artefak keluaran build:
. ├── my-file-1.txt ├── my-file-2.txt └── my-file-3.txt -
- artefak/mengecualikan jalur
-
Pemetaan opsional. Merupakan satu atau lebih jalur, relatif terhadap
base-directory, yang CodeBuild akan dikecualikan dari artefak build. Karakter tanda bintang (*) cocok dengan karakter nol atau karakter lain dari komponen nama tanpa melintasi batas folder. Tanda bintang ganda (**) cocok dengan nol atau lebih karakter komponen nama di semua direktori.Contoh jalur pengecualian meliputi:
-
Untuk mengecualikan file dari semua direktori:
"**/file-name/**/*" -
Untuk mengecualikan semua folder titik:
"**/.*/**/*" -
Untuk mengecualikan semua file titik:
"**/.*"
-
- artefak/aktifkan symlink
-
Tidak wajib. Jika tipe output adalah
ZIP, menentukan apakah tautan simbolik internal dipertahankan dalam file ZIP. Jika ini berisiyes, semua tautan simbolik internal di sumber akan dipertahankan dalam file ZIP artefak. - artefak/prefiks S3
-
Tidak wajib. Menentukan awalan yang digunakan saat artefak dikeluarkan ke bucket Amazon S3 dan jenis namespace adalah
BUILD_ID. Saat digunakan, jalur keluaran di bucket adalah<s3-prefix>/<build-id>/<name>.zip. - artefak/artefak sekunder
-
Urutan opsional. Merupakan satu atau lebih definisi artefak sebagai pemetaan antara pengidentifikasi artefak dan definisi artefak. Setiap pengidentifikasi artefak di blok ini harus cocok dengan artefak yang ditentukan dalam
secondaryArtifactsatribut proyek Anda. Setiap definisi terpisah memiliki sintaks yang sama denganartifactsblok di atas.catatan
artifacts/filesUrutan selalu diperlukan, bahkan ketika hanya ada artefak sekunder yang ditentukan.
Misalnya, jika proyek Anda memiliki struktur berikut:
{ "name": "sample-project", "secondaryArtifacts": [ { "type": "S3", "location": "<output-bucket1>", "artifactIdentifier": "artifact1", "name": "secondary-artifact-name-1" }, { "type": "S3", "location": "<output-bucket2>", "artifactIdentifier": "artifact2", "name": "secondary-artifact-name-2" } ] }Kemudian buildspec Anda terlihat seperti berikut:
version: 0.2 phases: build: commands: - echo Building... artifacts: files: - '**/*' secondary-artifacts: artifact1: files: - directory/file1 name: secondary-artifact-name-1 artifact2: files: - directory/file2 name: secondary-artifact-name-2
cache
Urutan opsional. Merupakan informasi tentang di mana CodeBuild dapat mempersiapkan file untuk mengunggah cache ke bucket cache S3. Urutan ini tidak diperlukan jika jenis cache proyek adalahNo Cache.
- cache/kunci
-
Urutan opsional. Merupakan kunci utama yang digunakan saat mencari atau mengembalikan cache. CodeBuild melakukan kecocokan yang tepat untuk kunci utama.
Berikut adalah contoh untuk kuncinya:
key: npm-key-$(codebuild-hash-files package-lock.json) } - cache/kunci fallback
-
Urutan opsional. Merupakan daftar kunci fallback yang digunakan secara berurutan ketika cache tidak dapat ditemukan menggunakan kunci primer. Hingga lima kunci fallback didukung, dan masing-masing dicocokkan menggunakan pencarian awalan. Urutan ini akan diabaikan jika kunci tidak disediakan.
Berikut adalah contoh untuk kunci fallback:
fallback-keys: - npm-key-$(codebuild-hash-files package-lock.json) } - npm-key- - npm- - cache/tindakan
-
Urutan opsional. Menentukan tindakan yang akan dilakukan pada cache. Nilai yang valid meliputi:
-
restoreyang hanya mengembalikan cache tanpa menyimpan pembaruan. -
saveyang hanya menyimpan cache tanpa memulihkan versi sebelumnya.
Jika tidak ada nilai yang diberikan, CodeBuild default untuk melakukan pemulihan dan penyimpanan.
-
- cache/jalur
-
Urutan yang diperlukan. Merupakan lokasi cache. Berisi urutan skalar, dengan setiap skalar mewakili lokasi terpisah di mana CodeBuild dapat menemukan artefak keluaran build, relatif terhadap lokasi build asli atau, jika disetel, direktori dasar. Lokasi dapat mencakup yang berikut:
-
Satu file (misalnya,
my-file.jar). -
Satu file dalam subdirektori (misalnya,
ataumy-subdirectory/my-file.jar).my-parent-subdirectory/my-subdirectory/my-file.jar -
'**/*'mewakili semua file secara rekursif. -
mewakili semua file dalam subdirektori bernamamy-subdirectory/*my-subdirectory. -
mewakili semua file secara rekursif mulai dari subdirektori bernama.my-subdirectory/**/*my-subdirectory
-
penting
Karena deklarasi buildspec harus YAML yang valid, spasi dalam deklarasi buildspec penting. Jika jumlah spasi dalam deklarasi buildspec Anda tidak valid, build mungkin segera gagal. Anda dapat menggunakan validator YAML untuk menguji apakah deklarasi buildspec Anda adalah YAML yang valid.
Jika Anda menggunakan AWS CLI, atau AWS SDK untuk mendeklarasikan buildspec saat Anda membuat atau memperbarui proyek build, buildspec harus berupa string tunggal yang dinyatakan dalam format YAML, bersama dengan spasi putih dan karakter escape baris baru yang diperlukan. Ada contoh di bagian selanjutnya.
Jika Anda menggunakan AWS CodePipeline konsol CodeBuild or alih-alih file buildspec.yml, Anda dapat menyisipkan perintah untuk fase saja. build Alih-alih menggunakan sintaks sebelumnya, Anda mencantumkan, dalam satu baris, semua perintah yang ingin Anda jalankan selama fase build. Untuk beberapa perintah, pisahkan setiap perintah dengan && (misalnya,mvn test && mvn
package).
Anda dapat menggunakan CodePipeline konsol CodeBuild or alih-alih file buildspec.yml untuk menentukan lokasi artefak keluaran build di lingkungan build. Alih-alih menggunakan sintaks sebelumnya, Anda mencantumkan, dalam satu baris, semua lokasi. Untuk beberapa lokasi, pisahkan setiap lokasi dengan koma (misalnya,buildspec.yml, target/my-app.jar).
Contoh Buildspec
Berikut adalah contoh file buildspec.yml.
version: 0.2 env: variables: JAVA_HOME: "/usr/lib/jvm/java-8-openjdk-amd64" parameter-store: LOGIN_PASSWORD: /CodeBuild/dockerLoginPassword phases: install: commands: - echo Entered the install phase... - apt-get update -y - apt-get install -y maven finally: - echo This always runs even if the update or install command fails pre_build: commands: - echo Entered the pre_build phase... - docker login -u User -p $LOGIN_PASSWORD finally: - echo This always runs even if the login command fails build: commands: - echo Entered the build phase... - echo Build started on `date` - mvn install finally: - echo This always runs even if the install command fails post_build: commands: - echo Entered the post_build phase... - echo Build completed on `date` reports: arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1: files: - "**/*" base-directory: 'target/tests/reports' discard-paths: no reportGroupCucumberJson: files: - 'cucumber/target/cucumber-tests.xml' discard-paths: yes file-format: CUCUMBERJSON # default is JUNITXML artifacts: files: - target/messageUtil-1.0.jar discard-paths: yes secondary-artifacts: artifact1: files: - target/artifact-1.0.jar discard-paths: yes artifact2: files: - target/artifact-2.0.jar discard-paths: yes cache: paths: - '/root/.m2/**/*'
Berikut adalah contoh dari buildspec sebelumnya, dinyatakan sebagai string tunggal, untuk digunakan dengan AWS CLI, atau SDK. AWS
"version: 0.2\n\nenv:\n variables:\n JAVA_HOME: \"/usr/lib/jvm/java-8-openjdk-amd64\\"\n parameter-store:\n LOGIN_PASSWORD: /CodeBuild/dockerLoginPassword\n phases:\n\n install:\n commands:\n - echo Entered the install phase...\n - apt-get update -y\n - apt-get install -y maven\n finally:\n - echo This always runs even if the update or install command fails \n pre_build:\n commands:\n - echo Entered the pre_build phase...\n - docker login -u User -p $LOGIN_PASSWORD\n finally:\n - echo This always runs even if the login command fails \n build:\n commands:\n - echo Entered the build phase...\n - echo Build started on `date`\n - mvn install\n finally:\n - echo This always runs even if the install command fails\n post_build:\n commands:\n - echo Entered the post_build phase...\n - echo Build completed on `date`\n\n reports:\n reportGroupJunitXml:\n files:\n - \"**/*\"\n base-directory: 'target/tests/reports'\n discard-paths: false\n reportGroupCucumberJson:\n files:\n - 'cucumber/target/cucumber-tests.xml'\n file-format: CUCUMBERJSON\n\nartifacts:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n secondary-artifacts:\n artifact1:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n artifact2:\n files:\n - target/messageUtil-1.0.jar\n discard-paths: yes\n cache:\n paths:\n - '/root/.m2/**/*'"
Berikut adalah contoh perintah dalam build fase, untuk digunakan dengan CodePipeline konsol CodeBuild atau.
echo Build started on `date` && mvn install
Dalam contoh-contoh ini:
-
Variabel lingkungan khusus, dalam teks biasa, dengan kunci
JAVA_HOMEdan nilai/usr/lib/jvm/java-8-openjdk-amd64, ditetapkan. -
Variabel lingkungan khusus bernama
dockerLoginPasswordAnda yang disimpan di Amazon EC2 Systems Manager Parameter Store akan direferensikan nanti dalam perintah build dengan menggunakan kunciLOGIN_PASSWORD. -
Anda tidak dapat mengubah nama fase build ini. Perintah yang dijalankan dalam contoh ini adalah
apt-get update -ydanapt-get install -y maven(untuk menginstal Apache Maven),mvn install(untuk mengkompilasi, menguji, dan mengemas kode sumber ke dalam artefak keluaran build dan untuk menginstal artefak keluaran build di repositori internalnya),docker login(untuk masuk ke Docker dengan kata sandi yang sesuai dengan nilai variabel lingkungan khusus yangdockerLoginPasswordAnda tetapkan di Amazon EC2 Systems Manager Parameter Store), dan beberapa perintah.echoPerechointah disertakan di sini untuk menunjukkan bagaimana CodeBuild menjalankan perintah dan urutan menjalankannya. -
filesmewakili file untuk diunggah ke lokasi keluaran build. Dalam contoh ini, mengun CodeBuild ggah filemessageUtil-1.0.jartunggal.messageUtil-1.0.jarFile dapat ditemukan di direktori relatif yang dinamaitargetdi lingkungan build. Karenadiscard-paths: yesditentukan,messageUtil-1.0.jardiunggah langsung (dan bukan ketargetdirektori perantara). Nama filemessageUtil-1.0.jardan nama direktori relatiftargetdidasarkan pada cara Apache Maven membuat dan menyimpan artefak keluaran build hanya untuk contoh ini. Dalam skenario Anda sendiri, nama file dan direktori ini akan berbeda. -
reportsmewakili dua grup laporan yang menghasilkan laporan selama pembuatan:-
arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1menentukan ARN dari grup laporan. Hasil pengujian yang dihasilkan oleh kerangka pengujian ada ditarget/tests/reportsdirektori. Format file adalahJunitXmldan jalur tidak dihapus dari file yang berisi hasil pengujian. -
reportGroupCucumberJsonmenentukan grup laporan baru. Jika nama proyek adalahmy-project, grup laporan dengan namamy-project-reportGroupCucumberJsondibuat saat build dijalankan. Hasil pengujian yang dihasilkan oleh kerangka pengujian ada dicucumber/target/cucumber-tests.xml. Format file pengujian adalahCucumberJsondan jalur dihapus dari file yang berisi hasil pengujian.
-
Versi Buildspec
Tabel berikut mencantumkan versi buildspec dan perubahan antar versi.
| Versi | Perubahan |
|---|---|
| 0.2 |
|
| 0.1 | Ini adalah definisi awal dari format spesifikasi build. |