Buat referensi spesifikasi untuk CodeBuild - AWS CodeBuild

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 YAMAL, yang CodeBuild digunakan untuk menjalankan build. Anda dapat menyertakan buildspec sebagai bagian dari kode sumber atau Anda dapat menentukan buildspec saat membuat proyek build. Untuk informasi tentang cara kerja spesifikasi build, lihatCara kerja CodeBuild.

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. Sebagai contoh, Anda dapat:

  • Gunakan file buildspec yang berbeda untuk build yang berbeda di repositori yang sama, seperti dan. buildspec_debug.yml buildspec_release.yml

  • Simpan file buildspec di tempat lain selain root direktori sumber Anda, seperti config/buildspec.yml atau di bucket S3. Bucket S3 harus berada di AWS Wilayah yang sama dengan proyek build Anda. Tentukan file buildspec menggunakan ARN (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:

  • Jalankan update-project perintah AWS CLI create-project or, atur buildspec nilai ke jalur ke file buildspec alternatif relatif terhadap nilai variabel lingkungan bawaan. CODEBUILD_SRC_DIR Anda juga dapat melakukan hal yang setara dengan create project operasi di AWS SDK. Untuk informasi selengkapnya, lihat Membuat proyek pembangunan atau Mengubah pengaturan proyek pembangunan.

  • Jalankan AWS CLI start-build perintah, atur buildspecOverride nilai ke jalur ke file buildspec alternatif relatif terhadap nilai variabel lingkungan bawaan. CODEBUILD_SRC_DIR Anda juga dapat melakukan hal yang setara dengan start build operasi di AWS SDK. Untuk informasi selengkapnya, lihat Jalankan build.

  • Dalam AWS CloudFormation template, atur BuildSpec properti Source dalam sumber daya tipe AWS::CodeBuild::Project ke jalur ke file buildspec alternatif relatif terhadap nilai variabel lingkungan bawaan. CODEBUILD_SRC_DIR Untuk informasi selengkapnya, lihat BuildSpec properti di sumber AWS CodeBuild proyek di Panduan AWS CloudFormation Pengguna.

Sintaks Buildspec

File buildspec harus diekspresikan dalam format YAMB.

Jika perintah berisi karakter, atau string karakter, yang tidak didukung oleh YAMM, Anda harus melampirkan perintah dalam tanda kutip (“”). Perintah berikut diapit tanda kutip karena titik dua (:) diikuti oleh spasi tidak diperbolehkan di YAMAL. Tanda kutip dalam perintah diloloskan (\”).

"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-name env: shell: shell-tag variables: key: "value" key: "value" parameter-store: key: "value" key: "value" exported-variables: - variable - variable secrets-manager: key: secret-id:json-key:version-stage:version-id git-credential-helper: no | yes proxy: upload-artifacts: no | yes logs: no | yes batch: fast-fail: false | true # build-list: # build-matrix: # build-graph: phases: install: run-as: Linux-user-name on-failure: ABORT | CONTINUE runtime-versions: runtime: version runtime: version commands: - command - command finally: - command - command # steps: pre_build: run-as: Linux-user-name on-failure: ABORT | CONTINUE commands: - command - command finally: - command - command # steps: build: run-as: Linux-user-name on-failure: ABORT | CONTINUE commands: - command - command finally: - command - command # steps: post_build: run-as: Linux-user-name on-failure: ABORT | CONTINUE commands: - command - command finally: - command - command # steps: reports: report-group-name-or-arn: files: - location - location base-directory: location discard-paths: no | yes file-format: report-format artifacts: files: - location - location name: artifact-name discard-paths: no | yes base-directory: location exclude-paths: excluded paths enable-symlinks: no | yes s3-prefix: prefix secondary-artifacts: artifactIdentifier: files: - location - location name: secondary-artifact-name discard-paths: no | yes base-directory: location artifactIdentifier: files: - location - location discard-paths: no | yes base-directory: location cache: paths: - path - path

Buildspec berisi berikut ini:

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.

jalan-sebagai

Urutan opsional. Hanya tersedia untuk pengguna Linux. Menentukan pengguna Linux yang menjalankan perintah dalam file buildspec ini. run-asmemberikan izin baca dan jalankan pengguna yang ditentukan. Saat 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 satu fase dengan menggunakan run-as di 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 kustom.

catatan

Untuk melindungi informasi sensitif, berikut ini disembunyikan di CodeBuild log:

env/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 env ditentukan, dan Anda ingin menentukan variabel lingkungan kustom dalam teks biasa. Berisi pemetaan skalar kunci/nilai, di mana setiap pemetaan mewakili variabel lingkungan kustom tunggal dalam teks biasa. kunci adalah nama variabel lingkungan kustom, dan nilai adalah 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 file AWS CLI. Untuk nilai sensitif, sebaiknya gunakan parameter-store atau secrets-manager pemetaan 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_VAR dengan nilaimy_value, dan Anda menetapkan variabel lingkungan bernama MY_VAR dengan nilaiother_value, my_value maka diganti denganother_value. Demikian pula, jika image Docker sudah berisi variabel lingkungan bernama PATH dengan nilai/usr/local/sbin:/usr/local/bin, dan Anda menetapkan variabel lingkungan bernama PATH dengan nilai$PATH:/usr/share/ant/bin, /usr/local/sbin:/usr/local/bin maka digantikan oleh nilai $PATH:/usr/share/ant/bin literal.

Jangan mengatur variabel lingkungan apa pun dengan nama yang dimulai denganCODEBUILD_. Awalan ini dicadangkan untuk penggunaan internal .

Jika variabel lingkungan dengan nama yang sama didefinisikan di beberapa tempat, nilainya ditentukan sebagai berikut:

env/parameter-toko

Diperlukan jika env ditentukan, dan Anda ingin mengambil variabel lingkungan kustom yang disimpan di Amazon EC2 Systems Manager Parameter Store. Berisi pemetaan skalar kunci/nilai, di mana setiap pemetaan mewakili variabel lingkungan kustom tunggal yang disimpan di Amazon EC2 Systems Manager Parameter Store. key adalah nama yang Anda gunakan nanti dalam perintah build untuk merujuk ke variabel lingkungan kustom ini, dan value adalah nama variabel lingkungan kustom yang disimpan di Amazon EC2 Systems Manager Parameter Store. Untuk menyimpan nilai sensitif, lihat Systems Manager Parameter Store and Walkthrough: Membuat dan menguji parameter String (konsol) di Panduan Pengguna Amazon EC2 Systems Manager.

penting

CodeBuild Untuk memungkinkan mengambil variabel lingkungan kustom yang disimpan di Amazon EC2 Systems Manager Parameter Store, Anda harus menambahkan tindakan ssm:GetParameters ke peran layanan CodeBuild Anda. Untuk informasi selengkapnya, lihat Membuat peran CodeBuild layanan.

Variabel lingkungan apa pun 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_VAR dengan nilaimy_value, dan Anda mengambil variabel lingkungan bernama MY_VAR dengan nilaiother_value, maka my_value diganti dengan. other_value Demikian pula, jika image Docker sudah berisi variabel lingkungan bernama PATH dengan nilai/usr/local/sbin:/usr/local/bin, dan Anda mengambil variabel lingkungan bernama PATH dengan nilai$PATH:/usr/share/ant/bin, maka digantikan /usr/local/sbin:/usr/local/bin oleh nilai literal. $PATH:/usr/share/ant/bin

Jangan menyimpan variabel lingkungan apa pun dengan nama yang dimulai denganCODEBUILD_. Awalan ini dicadangkan untuk penggunaan internal .

Jika variabel lingkungan dengan nama yang sama didefinisikan di beberapa tempat, nilainya ditentukan sebagai berikut:

env/rahasia-manajer

Diperlukan jika Anda ingin mengambil variabel lingkungan khusus yang disimpan di AWS Secrets Manager. Tentukan Secrets Manager reference-key menggunakan pola berikut:

<key>: <secret-id>:<json-key>:<version-stage>:<version-id>

<key>

(Wajib) Nama variabel lingkungan lokal. Gunakan nama ini untuk mengakses variabel selama pembuatan.

<secret-id>

(Wajib) Nama atau Amazon Resource Name (ARN) yang berfungsi sebagai pengidentifikasi unik untuk rahasia tersebut. Untuk mengakses rahasia di AWS akun Anda, cukup tentukan nama rahasia. Untuk mengakses rahasia di AWS akun yang berbeda, tentukan rahasia ARN.

<json-key>

(Opsional) Menentukan nama kunci pasangan nilai kunci Secrets Manager yang nilainya ingin Anda ambil. Jika Anda tidak menentukanjson-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 menggunakanversion-stage, jangan tentukanversion-id. Jika Anda tidak menentukan tahap versi atau ID versi, defaultnya adalah mengambil versi dengan nilai tahap versi. AWSCURRENT

<version-id>

(Opsional) Menentukan identifier unik dari versi rahasia yang ingin Anda gunakan. Jika Anda menentukan version-id, jangan tentukan version-stage. Jika Anda tidak menentukan tahap versi atau ID versi, defaultnya adalah mengambil versi dengan nilai tahap versi. AWSCURRENT

Dalam contoh berikut, TestSecret adalah nama pasangan kunci-nilai yang disimpan di Secrets Manager. Kuncinya TestSecret adalahMY_SECRET_VAR. Anda mengakses variabel selama pembuatan menggunakan LOCAL_SECRET_VAR nama.

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 daftar variabel lingkungan yang ingin Anda ekspor. Tentukan nama setiap variabel yang ingin Anda ekspor pada baris terpisah di bawahexported-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 selanjutnya dalam pipeline. Untuk informasi selengkapnya, lihat Bekerja dengan variabel di Panduan AWS CodePipeline Pengguna.

Selama build, nilai variabel tersedia dimulai dengan install fase. Ini dapat diperbarui antara awal install fase dan akhir post_build fase. Setelah post_build fase berakhir, nilai variabel yang diekspor tidak dapat berubah.

catatan

Berikut ini tidak dapat diekspor:

  • Rahasia Penyimpanan Parameter Amazon EC2 Systems Manager yang ditentukan dalam proyek build.

  • Rahasia Secrets Manager yang ditentukan dalam proyek build

  • Variabel lingkungan yang dimulai denganAWS_.

env/git-credential-helper

Pemetaan opsional. Digunakan untuk menunjukkan jika CodeBuild menggunakan pembantu kredensi Git untuk memberikan kredensi Git. yesjika digunakan. Jika tidak, no atau tidak ditentukan. Untuk informasi selengkapnya, lihat gitcredentials di situs web Git.

catatan

git-credential-helpertidak didukung untuk build yang dipicu oleh webhook untuk repositori Git publik.

proxy

Urutan opsional. Digunakan untuk merepresentasikan setelan jika Anda menjalankan build di server proxy eksplisit. Untuk informasi selengkapnya, lihat Jalankan CodeBuild di server proxy eksplisit.

proxy/upload-artefak

Pemetaan opsional. Setel ke yes jika Anda ingin build di server proxy eksplisit untuk mengunggah artefak. Nilai default-nya no.

proksi/log

Pemetaan opsional. Setel ke yes build Anda di server proxy eksplisit untuk membuat CloudWatch log. Nilai default-nya no.

fase

Urutan yang diperlukan. Merupakan perintah yang CodeBuild 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 satu perintah yang bergantung pada status 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 pendekatannya di. Kerang dan perintah dalam membangun lingkungan

fase/*/ run-as

Urutan opsional. Gunakan dalam fase build untuk menentukan pengguna Linux yang menjalankan perintahnya. Jika juga run-as ditentukan secara global untuk semua perintah di bagian atas file buildspec, maka pengguna tingkat fase diutamakan. Misalnya, jika secara global run-as menentukan User-1, dan untuk install fase hanya run-as pernyataan yang menentukan User-2, maka semua perintah di kemudian file buildspec dijalankan sebagai User-1 kecuali perintah dalam fase, yang dijalankan sebagai User-2. install

fase/*/kegagalan

Urutan opsional. Menentukan tindakan yang harus diambil jika kegagalan terjadi selama fase. Ini dapat berupa salah satu dari nilai berikut:

  • ABORT- Batalkan bangunan.

  • CONTINUE- Lanjutkan ke fase berikutnya.

Jika properti ini tidak ditentukan, proses kegagalan mengikuti fase transisi seperti yang ditunjukkan padaTransisi fase.

fase/*/ akhirnya

Blok opsional. Perintah yang ditentukan dalam finally blok dijalankan setelah perintah di commands blok. Perintah dalam finally blok dijalankan bahkan jika perintah di commands blok gagal. Misalnya, jika commands blok berisi tiga perintah dan yang pertama gagal, CodeBuild lewati dua perintah yang tersisa dan jalankan perintah apa pun di finally blok. Fase ini berhasil ketika semua perintah di commands dan finally blok 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 install fase hanya untuk menginstal paket di lingkungan build. Misalnya, Anda mungkin menggunakan fase ini untuk menginstal kerangka pengujian kode seperti Mocha atau RSpec.

fase/instal/versi runtime

Urutan opsional. Versi runtime didukung dengan Ubuntu standard image 5.0 atau yang lebih baru dan Amazon Linux 2 standard image 4.0 atau yang lebih baru. Jika ditentukan, setidaknya satu runtime harus disertakan dalam bagian ini. Tentukan runtime menggunakan versi tertentu, versi mayor diikuti oleh .x untuk menentukan yang CodeBuild menggunakan versi mayor tersebut dengan versi minor terbarunya, atau latest untuk menggunakan versi mayor dan minor terbaru (misalnya,, ruby: 3.2nodejs: 18.x, ataujava: latest). Anda dapat menentukan runtime menggunakan angka atau variabel lingkungan. Misalnya, jika Anda menggunakan Amazon Linux 2 image standar 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 beberapa runtime di runtime-versions bagian file buildspec Anda. Jika runtime Anda bergantung pada runtime lain, Anda juga dapat menentukan runtime dependennya dalam file buildspec. Jika Anda tidak menentukan runtime apa pun dalam file buildspec, CodeBuild pilih runtime default yang tersedia di gambar yang Anda gunakan. Jika Anda menentukan satu atau beberapa runtime, hanya CodeBuild menggunakan runtime tersebut. Jika runtime dependen tidak ditentukan, CodeBuild coba pilih runtime dependen untuk Anda.

Jika dua runtime yang ditentukan bertentangan, build gagal. Misalnya, android: 29 dan java: openjdk11 konflik, jadi jika keduanya ditentukan, build gagal.

Untuk informasi selengkapnya tentang runtime yang tersedia, lihatRuntime yang tersedia.

catatan

Jika Anda menentukan runtime-versions bagian dan menggunakan gambar selain Ubuntu Standard Image 2.0 atau yang lebih baru, atau Amazon Linux 2 (AL2) image standar 1.0 atau yang lebih baru, build akan mengeluarkan peringatan, "Skipping install of runtimes. Runtime version selection is not supported by this build image.

fase/instal/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/pre_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.

fases/pre_build/ perintah

Urutan yang pre_build diperlukan 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 mungkin menggunakan fase ini untuk menjalankan Mocha, RSpec, atau sbt.

fase/build/ perintah

Diperlukan build jika 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 image Docker ke Amazon ECR. Kemudian Anda dapat mengirim pemberitahuan build melalui Amazon SNS.

fases/post_build/ perintah

Diperlukan post_build jika 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

report-group-name-or-arn

Urutan opsional. Menentukan grup laporan yang dikirimkan laporan. 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 membuat 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 dalam buildspec seperti. $REPORT_GROUP_NAME Untuk informasi selengkapnya, lihat Laporkan penamaan grup.

<report-group>laporan// file

Urutan yang diperlukan. Merupakan lokasi yang berisi data mentah hasil tes yang dihasilkan oleh laporan. Berisi urutan skalar, dengan setiap skalar mewakili lokasi terpisah di mana CodeBuild dapat menemukan file pengujian, relatif terhadap lokasi build asli atau, jika disetel, file. base-directory Lokasi dapat mencakup yang berikut:

  • Satu file (misalnya,my-test-report-file.json).

  • Sebuah file tunggal dalam subdirektori (misalnya, my-subdirectory/my-test-report-file.json ataumy-parent-subdirectory/my-subdirectory/my-test-report-file.json).

  • '**/*'mewakili semua file secara rekursif.

  • my-subdirectory/*mewakili semua file dalam subdirektori bernama my-subdirectory.

  • my-subdirectory/**/*mewakili semua file rekursif mulai dari subdirektori bernama my-subdirectory.

<report-group>laporan// file-format

Pemetaan opsional. Merupakan format file laporan. Jika tidak ditentukan, JUNITXML digunakan. 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

TestNG XML

VISUALSTUDIOTRX

Studio Visual TRX

Laporan cakupan kode
CLOVERXML

XML semanggi

COBERTURAXML

XML Cobertura

JACOCOXML

JaCoCo XML

SIMPLECOV

SimpleCov JSON

<report-group>laporan//direktori dasar

Pemetaan opsional. Merupakan satu atau beberapa direktori tingkat atas, relatif terhadap lokasi build asli, yang CodeBuild digunakan untuk menentukan tempat menemukan file pengujian mentah.

<report-group>laporan// buangan-jalur

Tidak wajib. Menentukan apakah direktori file laporan diratakan dalam output. Jika ini tidak ditentukan, atau berisino, file laporan adalah output dengan struktur direktori mereka utuh. Jika ini berisiyes, semua file pengujian ditempatkan di direktori output yang sama. Misalnya, jika jalur ke hasil tes adalahcom/myapp/mytests/TestResult.xml, menentukan yes akan menempatkan file ini di/TestResult.xml.

artefak

Urutan opsional. Merupakan informasi tentang di mana CodeBuild dapat menemukan output build dan bagaimana CodeBuild mempersiapkannya untuk diunggah ke bucket keluaran S3. Urutan ini tidak diperlukan jika, misalnya, Anda sedang membangun dan mendorong image Docker ke Amazon ECR, atau Anda menjalankan pengujian unit pada kode sumber Anda, tetapi tidak membangunnya.

catatan

Metadata Amazon S3 memiliki CodeBuild header bernama yang berisi CodeBuild build x-amz-meta-codebuild-buildarn yang menerbitkan buildArn artefak ke Amazon S3. Ditambahkan untuk memungkinkan pelacakan sumber untuk notifikasi dan referensi dari mana artefak tersebut dihasilkan. buildArn

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).

  • Sebuah file tunggal dalam subdirektori (misalnya, my-subdirectory/my-file.jar ataumy-parent-subdirectory/my-subdirectory/my-file.jar).

  • '**/*'mewakili semua file secara rekursif.

  • my-subdirectory/*mewakili semua file dalam subdirektori bernama my-subdirectory.

  • my-subdirectory/**/*mewakili semua file rekursif mulai dari subdirektori bernama my-subdirectory.

Bila Anda menentukan lokasi artefak keluaran build, CodeBuild dapat menemukan lokasi build asli di lingkungan build. Anda tidak perlu menambahkan 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 seperti echo $CODEBUILD_SRC_DIR selama pembuatan. Lokasi untuk setiap lingkungan bangunan mungkin sedikit berbeda.

artefak/nama

Nama opsional. Menentukan nama untuk artefak build Anda. Nama ini digunakan ketika salah satu dari berikut ini benar.

  • Anda menggunakan CodeBuild API untuk membuat build dan overrideArtifactName flag disetel pada ProjectArtifacts objek 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 membuat atau memperbarui proyek. Untuk informasi selengkapnya, lihat Buat 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 unik mencegah artefak ditimpa. 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 bawahbuilds/<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 berisino, artefak build adalah keluaran dengan struktur direktorinya utuh. Jika ini berisiyes, semua artefak build ditempatkan di direktori keluaran yang sama. Misalnya, jika jalur ke file dalam artefak keluaran build adalahcom/mycompany/app/HelloWorld.java, menentukan yes akan menempatkan file ini. /HelloWorld.java

artefak/direktori dasar

Pemetaan opsional. Merupakan satu atau beberapa 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:

  • Sebuah direktori tingkat atas tunggal (misalnya,my-directory).

  • 'my-directory*'mewakili semua direktori tingkat atas dengan nama yang dimulai dengan. my-directory

Direktori tingkat atas yang cocok tidak disertakan dalam artefak keluaran build, hanya file dan subdirektorinya.

Anda dapat menggunakan files dan discard-paths untuk 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.txt

Dan untuk artifacts urutan berikut:

artifacts: files: - '*/my-file-3.txt' base-directory: my-build-2

Subdirektori dan file berikut akan disertakan dalam artefak keluaran build:

. └── my-subdirectory └── my-file-3.txt

Sedangkan untuk artifacts urutan berikut:

artifacts: files: - '**/*' base-directory: 'my-build*' discard-paths: yes

File-file berikut akan disertakan dalam artefak keluaran build:

. ├── my-file-1.txt ├── my-file-2.txt └── my-file-3.txt
artefak/tidak termasuk jalur

Pemetaan opsional. Merupakan satu atau lebih jalur, relatif terhadapbase-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 dari komponen nama di semua direktori.

Contoh jalur pengecualian meliputi yang berikut:

  • Untuk mengecualikan file dari semua direktori: "**/file-name/**/*"

  • Untuk mengecualikan semua folder titik: "**/.*/**/*"

  • Untuk mengecualikan semua file titik: "**/.*"

Tidak wajib. Jika jenis outputZIP, menentukan apakah link simbolik internal dipertahankan dalam file ZIP. Jika ini berisiyes, semua tautan simbolis internal di sumber akan disimpan dalam artefak file ZIP.

artefak/awalan 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 ember 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 secondaryArtifacts atribut proyek Anda. Setiap definisi terpisah memiliki sintaks yang sama dengan artifacts blok 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 menyiapkan file untuk mengunggah cache ke bucket cache S3. Urutan ini tidak diperlukan jika jenis cache proyekNo Cache.

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).

  • Sebuah file tunggal dalam subdirektori (misalnya, my-subdirectory/my-file.jar ataumy-parent-subdirectory/my-subdirectory/my-file.jar).

  • '**/*'mewakili semua file secara rekursif.

  • my-subdirectory/*mewakili semua file dalam subdirektori bernama my-subdirectory.

  • my-subdirectory/**/*mewakili semua file rekursif mulai dari subdirektori bernama my-subdirectory.

penting

Karena deklarasi buildspec harus YAMM yang valid, spasi dalam deklarasi buildspec menjadi penting. Jika jumlah spasi dalam deklarasi buildspec Anda tidak valid, build mungkin akan segera gagal. Anda dapat menggunakan validator YAMAL untuk menguji apakah deklarasi buildspec Anda adalah YAMAL 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 diekspresikan dalam format YAMAL, bersama dengan spasi putih yang diperlukan dan karakter escape baris baru. Ada contoh di bagian selanjutnya.

Jika Anda menggunakan CodeBuild atau AWS CodePipeline konsol alih-alih file buildspec.yl, 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 CodeBuild atau CodePipeline konsol alih-alih file buildspec.ymluntuk 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 buildspec sebelumnya, dinyatakan sebagai string tunggal, untuk digunakan dengan, atau SDK AWS CLI. 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 CodeBuild atau CodePipeline konsol.

echo Build started on `date` && mvn install

Dalam contoh ini:

  • Variabel lingkungan khusus, dalam teks biasa, dengan kunci JAVA_HOME dan nilai/usr/lib/jvm/java-8-openjdk-amd64, diatur.

  • Variabel lingkungan kustom bernama dockerLoginPassword Anda disimpan di Amazon EC2 Systems Manager Parameter Store direferensikan nanti dalam perintah build dengan menggunakan kunci. LOGIN_PASSWORD

  • Anda tidak dapat mengubah nama fase build ini. Perintah yang dijalankan dalam contoh ini adalah apt-get update -y dan apt-get install -y maven (untuk menginstal Apache Maven), mvn install (untuk mengkompilasi, menguji, dan mengemas kode sumber ke dalam artefak keluaran build dan menginstal artefak keluaran build di repositori internalnya), docker login (untuk masuk ke Docker dengan kata sandi yang sesuai dengan nilai variabel lingkungan khusus yang Anda tetapkan di Amazon dockerLoginPassword EC2 Systems Manager Parameter Store), dan beberapa perintah. echo echoPerintah disertakan di sini untuk menunjukkan bagaimana CodeBuild menjalankan perintah dan urutan menjalankannya.

  • filesmewakili file yang akan diunggah ke lokasi keluaran build. Dalam contoh ini, CodeBuild upload file messageUtil-1.0.jar tunggal. messageUtil-1.0.jarFile dapat ditemukan di direktori relatif bernama target di lingkungan build. Karena discard-paths: yes ditentukan, messageUtil-1.0.jar diunggah langsung (dan bukan ke target direktori perantara). Nama file messageUtil-1.0.jar dan nama direktori relatif target didasarkan pada cara Apache Maven membuat dan menyimpan artefak keluaran build untuk contoh ini saja. 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 di target/tests/reports direktori. Format file adalah JunitXml dan jalur tidak dihapus dari file yang berisi hasil pengujian.

    • reportGroupCucumberJsonmenentukan grup laporan baru. Jika nama proyek adalahmy-project, grup laporan dengan nama akan my-project-reportGroupCucumberJson dibuat saat build dijalankan. Hasil pengujian yang dihasilkan oleh kerangka pengujian ada dicucumber/target/cucumber-tests.xml. Format file pengujian adalah CucumberJson dan jalur dihapus dari file yang berisi hasil pengujian.

Versi Buildspec

Tabel berikut mencantumkan versi buildspec dan perubahan antar versi.

Versi Perubahan
0.2
  • environment_variablestelah diubah namanya menjadi. env

  • plaintexttelah diubah namanya menjadi. variables

  • typeProperti untuk artifacts telah usang.

  • Di versi 0.1, AWS CodeBuild jalankan setiap perintah build dalam instance terpisah dari shell default di lingkungan build. Di versi 0.2, CodeBuild jalankan semua perintah build dalam instance yang sama dari shell default di lingkungan build.

0.1 Ini adalah definisi awal dari format spesifikasi build.