

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
<a name="build-spec-ref"></a>

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, lihat[Bagaimana cara CodeBuild kerja](concepts.md#concepts-how-it-works).

**Topics**
+ [Nama file buildspec dan lokasi penyimpanan](#build-spec-ref-name-storage)
+ [Sintaks Buildspec](#build-spec-ref-syntax)
+ [Contoh Buildspec](#build-spec-ref-example)
+ [Versi Buildspec](#build-spec-ref-versions)
+ [Referensi buildspec build batch](batch-build-buildspec.md)

## Nama file buildspec dan lokasi penyimpanan
<a name="build-spec-ref-name-storage"></a>

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.yml` `buildspec_release.yml`
+ Simpan file buildspec di tempat lain selain root direktori sumber Anda, seperti `config/buildspec.yml` atau 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-project` kan `update-project` perintah 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 build](create-project.md) atau [Ubah pengaturan proyek build](change-project.md).
+ Jalan AWS CLI `start-build` kan 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 secara manual](run-build.md).
+ Dalam AWS CloudFormation template, atur `BuildSpec` properti `Source` dalam sumber daya jenis `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 ](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-properties-codebuild-project-source.html) di Panduan *AWS CloudFormation Pengguna*.

## Sintaks Buildspec
<a name="build-spec-ref-syntax"></a>

File buildspec harus dinyatakan dalam [ format YAML. ](http://yaml.org/) 

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-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:
  # build-fanout:
        
phases:
  install:
    run-as: {{Linux-user-name}}
    on-failure: ABORT | CONTINUE | RETRY | RETRY-{{count}} | RETRY-{{regex}} | RETRY-{{count}}-{{regex}}
    runtime-versions:
      {{runtime}}: {{version}}
      {{runtime}}: {{version}}
    commands:
      - {{command}}
      - {{command}}
    finally:
      - {{command}}
      - {{command}}
    
  pre\_build:
    run-as: {{Linux-user-name}}
    on-failure: ABORT | CONTINUE | RETRY | RETRY-{{count}} | RETRY-{{regex}} | RETRY-{{count}}-{{regex}}
    commands:
      - {{command}}
      - {{command}}
    finally:
      - {{command}}
      - {{command}}
    
  build:
    run-as: {{Linux-user-name}}
    on-failure: ABORT | CONTINUE | RETRY | RETRY-{{count}} | RETRY-{{regex}} | RETRY-{{count}}-{{regex}}
    commands:
      - {{command}}
      - {{command}}
    finally:
      - {{command}}
      - {{command}}
    
  post\_build:
    run-as: {{Linux-user-name}}
    on-failure: ABORT | CONTINUE | RETRY | RETRY-{{count}} | RETRY-{{regex}} | RETRY-{{count}}-{{regex}}
    commands:
      - {{command}}
      - {{command}}
    finally:
      - {{command}}
      - {{command}}
    
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:
  key: {{key}}
  fallback-keys:
    - {{fallback-key}}
    - {{fallback-key}}
  action: restore | save
  paths:
    - {{path}}
    - {{path}}
```

Buildspec berisi yang berikut:

### versi
<a name="build-spec.version"></a>

Pemetaan yang diperlukan. Merupakan versi buildspec. Kami menyarankan Anda menggunakan`0.2`.

**catatan**  
Meskipun versi 0.1 masih didukung, kami sarankan Anda menggunakan versi 0.2 bila memungkinkan. Untuk informasi selengkapnya, lihat [Versi Buildspec](#build-spec-ref-versions).

### berjalan seperti
<a name="build-spec.run-as"></a>

Urutan opsional. Tersedia untuk pengguna Linux saja. Menentukan pengguna Linux yang menjalankan perintah dalam file buildspec ini. `run-as`memberikan 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
<a name="build-spec.env"></a>

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 ](https://docs.aws.amazon.com/IAM/latest/UserGuide/id_credentials_access-keys.html) di Panduan *AWS Identity and Access Management * Pengguna. 
 String ditentukan menggunakan Parameter Store. Untuk informasi selengkapnya, lihat [ Panduan Konsol Penyimpanan Parameter Manajer [ Sistem ](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-walk.html#sysman-paramstore-console) dan Panduan Konsol Penyimpanan Parameter Manajer Sistem ](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html) di Panduan Pengguna * Amazon EC2 Systems Manager. * 
 String ditentukan menggunakan AWS Secrets Manager. Untuk informasi selengkapnya, lihat [Manajemen kunci](security-key-management.md). 

**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 ** **  <a name="build-spec.shell"></a>
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 ** **  <a name="build-spec.env.variables"></a>
Diperlukan jika `env` ditentukan, dan Anda ingin menentukan variabel lingkungan khusus dalam teks biasa. Berisi pemetaan {{value}} sk {{key}} alar/, di mana setiap pemetaan mewakili satu variabel lingkungan khusus dalam teks biasa. {{key}}adalah nama variabel lingkungan khusus, dan {{value}} merupakan nilai variabel itu.  
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-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 nilai`my_value`, dan Anda menetapkan variabel lingkungan bernama `MY_VAR` dengan nilai`other_value`, `my_value` maka 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 menetapkan variabel lingkungan bernama `PATH` dengan nilai`$PATH:/usr/share/ant/bin`, `/usr/local/sbin:/usr/local/bin` maka diganti dengan nilai `$PATH:/usr/share/ant/bin` literal.  
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](run-build.md). 
+ 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](create-project.md) dan [Ubah pengaturan proyek build di AWS CodeBuild](change-project.md).
+ Nilai dalam deklarasi buildspec memiliki prioritas terendah.

env/penyimpanan parameter ** **  <a name="build-spec.env.parameter-store"></a>
Diperlukan jika `env` ditentukan, dan Anda ingin mengambil variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store. Berisi pemetaan {{value}} sk {{key}} alar/, di mana setiap pemetaan mewakili satu variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store. {{key}}adalah nama yang Anda gunakan nanti dalam perintah build untuk merujuk ke variabel lingkungan khusus ini, dan {{value}} merupakan nama variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store. Untuk menyimpan nilai sensitif, lihat Peny [ impanan Parameter ](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-paramstore.html) dan [ Panduan Manajer Sistem: Membuat dan menguji parameter String (konsol) ](https://docs.aws.amazon.com/systems-manager/latest/userguide/sysman-paramstore-console.html) di Panduan * Pengguna * Amazon EC2 Systems Manager.   
 CodeBuild Untuk mengizinkan pengambilan variabel lingkungan khusus yang disimpan di Amazon EC2 Systems Manager Parameter Store, Anda harus menambahkan `ssm:GetParameters` tindakan ke peran CodeBuild layanan Anda. Untuk informasi selengkapnya, lihat [Memungkinkan CodeBuild untuk berinteraksi dengan orang lain AWS layanan](setting-up-service-role.md).  
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_VAR` dengan nilai`my_value`, dan Anda mengambil variabel lingkungan bernama `MY_VAR` dengan nilai`other_value`, `my_value` maka 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`, `/usr/local/sbin:/usr/local/bin` maka diganti dengan nilai `$PATH:/usr/share/ant/bin` literal.  
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](run-build.md). 
+ 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](create-project.md) dan [Ubah pengaturan proyek build di AWS CodeBuild](change-project.md).
+ Nilai dalam deklarasi buildspec memiliki prioritas terendah.

pengelola lingkungan/rahasia ** **  <a name="build-spec.env.secrets-manager"></a>
Diperlukan jika Anda ingin mengambil variabel lingkungan khusus yang disimpan di AWS Secrets Manager. Tentukan Manajer Rahasia `reference-key` menggunakan 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 tentukan`version-id`. Jika Anda tidak menentukan tahap versi atau ID versi, defaultnya adalah mengambil versi dengan nilai tahap versi`AWSCURRENT`.   
{{<version-id>}}  
(Opsional) Menentukan pengenal 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` adalah`MY_SECRET_VAR`. Anda mengakses variabel selama build menggunakan `LOCAL_SECRET_VAR` nama.  

```
env:
  secrets-manager:
    LOCAL_SECRET_VAR: "TestSecret:MY_SECRET_VAR"
```
Untuk informasi selengkapnya, lihat [Apa itu AWS Secrets Manager](https://docs.aws.amazon.com/secretsmanager/latest/userguide/intro.html) dalam * Panduan Pengguna AWS Secrets Manager *. 

env/variabel yang diekspor ** **  <a name="build-spec.env.exported-variables"></a>
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 ](https://docs.aws.amazon.com/codepipeline/latest/userguide/actions-variables.html) 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.  
 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 ** **  <a name="build-spec.env.git-credential-helper"></a>
Pemetaan opsional. Digunakan untuk menunjukkan apakah CodeBuild menggunakan pembantu kredensi Git untuk memberikan kredenSIAL Git. `yes`jika digunakan. Jika tidak, `no` atau tidak ditentukan. Untuk informasi selengkapnya, lihat [ git ](https://git-scm.com/docs/gitcredentials) di situs web Git.   
 `git-credential-helper`tidak didukung untuk build yang dipicu oleh webhook untuk repositori Git publik.

### proxy
<a name="build-spec.proxy"></a>

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](run-codebuild-in-explicit-proxy-server.md). 

proksi/unggah-artefak ** **  <a name="build-spec.proxy.upload-artifacts"></a>
Pemetaan opsional. Setel ke `yes` jika Anda ingin build Anda di server proxy eksplisit untuk mengunggah artefak. Nilai default-nya `no`. 

proksi/log ** **  <a name="build-spec.proxy.logs"></a>
Pemetaan opsional. Setel ke `yes` untuk build Anda di server proxy eksplisit untuk membuat CloudWatch log. Nilai default-nya `no`. 

### fase
<a name="build-spec.phases"></a>

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](build-env-ref-cmd.md)

fase/\*/run-as ** **  <a name="build-spec.phases.run-as"></a>
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 ditentukan User-2, maka semua perintah dalam file buildspec dijalankan sebagai * perintah User-1 * kecuali dalam `install` fase, yang dijalankan sebagai. User-2

fase/\*/pada kegagalan ** **  <a name="build-spec.phases.on-failure"></a>
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-{{count}}`- Coba ulang build untuk jumlah yang ditentukan, seperti yang diwakili oleh {{count}} dengan pesan kesalahan yang cocok dengan ekspresi `.*` reguler. Perhatikan bahwa {{count}} harus antara 0 dan 100. Misalnya, nilai yang valid termasuk `RETRY-4` dan`RETRY-8`.
+ `RETRY-{{regex}}`- Coba ulang build hingga 3 kali, dan gunakan {{regex}} untuk menyertakan ekspresi reguler agar sesuai dengan pesan kesalahan yang ditentukan. Misalnya, nilai yang valid termasuk `Retry-.*Error: Unable to connect to database.*` dan`RETRY-invalid+`.
+ `RETRY-{{count}}-{{regex}}`- Coba lagi build untuk sejumlah kali tertentu, seperti yang diwakili oleh{{count}}. Perhatikan bahwa {{count}} harus antara 0 dan 100. Anda juga dapat menggunakan {{regex}} untuk menyertakan ekspresi reguler untuk mencocokkan pesan kesalahan. Misalnya, nilai yang valid termasuk `Retry-3-.*connection timed out.*` dan`RETRY-8-invalid+`.
Jika properti ini tidak ditentukan, proses kegagalan mengikuti fase transisi seperti yang ditunjukkan pada[Bangun transisi fase](view-build-details-phases.md).  
A `on-failure` tribut tidak didukung saat menggunakan komputasi Lambda atau kapasitas cadangan. Atribut ini hanya berfungsi dengan gambar komputasi EC2 yang disediakan oleh. CodeBuild

fase/\*/ akhirnya ** **  <a name="build-spec.phases.finally"></a>
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, mele CodeBuild watkan dua perintah yang tersisa dan menjalankan 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 ** **  <a name="build-spec.phases.install"></a>
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 dapat menggunakan fase ini untuk menginstal kerangka pengujian kode seperti Mocha atau RSpec.    
phases/install/versi ** runtime- **  
<a name="runtime-versions-in-build-spec"></a>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 `.x` untuk menentukan yang CodeBuild menggunakan versi utama tersebut dengan versi minor terbarunya, atau `latest` untuk menggunakan versi mayor dan minor terbaru (misalnya,`ruby: 3.2`,`nodejs: 18.x`, atau`java: 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](build-env-ref-available.md).   

```
phases:
  install:
    runtime-versions:
      java: corretto8
      python: 3.x
      ruby: "$MY_RUBY_VAR"
```
Anda dapat menentukan satu atau lebih runtime di `runtime-versions` bagian 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.   
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: 29` dan `java: openjdk11` konflik, jadi jika keduanya ditentukan, build gagal.  
Untuk informasi selengkapnya tentang runtime yang tersedia, lihat[Runtime yang tersedia](available-runtimes.md).  
 Jika Anda menentukan `runtime-versions` bagian 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 ** **  <a name="build-spec.phases.pre_build"></a>
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_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 ** **  <a name="build-spec.phases.build"></a>
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 `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 ** **  <a name="build-spec.phases.post_build"></a>
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_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.<a name="reports-buildspec-file"></a>

### melaporkan
<a name="build-spec.reports"></a>

**laporan-nama-kelompok-atau-arn **  <a name="build-spec.reports.report-name-or-arn"></a>
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_NAME` Untuk informasi selengkapnya, lihat [Penamaan grup laporan](test-report-group-naming.md).

laporan/<report-group>/file ** **  <a name="build-spec.reports.files"></a>
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-directory` Lokasi dapat mencakup yang berikut:  
+ Satu file (misalnya,`my-test-report-file.json`).
+ Satu file dalam subdirektori (misalnya, `{{my-subdirectory}}/my-test-report-file.json` atau`{{my-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 secara rekursif mulai dari subdirektori bernama. {{my-subdirectory}}

laporan/<report-group>/file-format ** **  <a name="build-spec.reports.file-format"></a>
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`   
XML TestNG  
 `VISUALSTUDIOTRX`   
Visual Studio TRX
**Laporan cakupan kode**    
 `CLOVERXML`   
Clover XML  
 `COBERTURAXML`   
Cobertura XML  
 `JACOCOXML`   
JaCoCo XML  
 `SIMPLECOV`   
SimpleCov JSON  
CodeBuild menerima laporan cakupan kode JSON yang dihasilkan oleh [ simplecov](https://github.com/simplecov-ruby/simplecov), bukan [ simplecov-json. ](https://github.com/vicentllongo/simplecov-json)

laporan/<report-group>/direktori dasar ** **  <a name="build-spec.reports.base-directory"></a>
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 ** **  <a name="build-spec.reports.discard-paths"></a>
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 berisi`yes`, semua file uji ditempatkan di direktori output yang sama. Misalnya, jika jalur ke hasil tes adalah`com/myapp/mytests/TestResult.xml`, menentukan `yes` akan menempatkan file ini di`/TestResult.xml`. <a name="artifacts-build-spec"></a>

### artefak
<a name="build-spec.artifacts"></a>

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 ** **  <a name="build-spec.artifacts.files"></a>
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, `{{my-subdirectory}}/my-file.jar` atau`{{my-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 secara rekursif mulai dari subdirektori bernama. {{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 seperti `echo $CODEBUILD_SRC_DIR` selama build. Lokasi untuk setiap lingkungan build mungkin sedikit berbeda. 

artefak/nama ** **  <a name="build-spec.artifacts.name"></a>
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 `overrideArtifactName` bendera ditetapkan 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 Anda membuat atau memperbarui proyek. Untuk informasi selengkapnya, lihat [Membuat proyek build (konsol)](create-project.md#create-project-console). 
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](http://pubs.opengroup.org/onlinepubs/9699919799/).   
+ 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](build-env-ref-env-vars.md). 

  ```
  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 ** **  <a name="build-spec.artifacts.discard-paths"></a>
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 berisi`yes`, semua artefak build ditempatkan di direktori output yang sama. Misalnya, jika jalur ke file dalam artefak keluaran build adalah`com/mycompany/app/HelloWorld.java`, menentukan `yes` akan menempatkan file ini di`/HelloWorld.java`. 

artefak/direktori dasar ** **  <a name="build-spec.artifacts.base-directory"></a>
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 dengan`my-directory`.
Direktori tingkat atas yang cocok tidak disertakan dalam artefak keluaran build, hanya file dan subdirektori mereka.   
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/mengecualikan jalur ** **  <a name="build-spec.artifacts.exclude-paths"></a>
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 ** **  <a name="build-spec.artifacts.enable-symlinks"></a>
Tidak wajib. Jika tipe output adalah`ZIP`, menentukan apakah tautan simbolik internal dipertahankan dalam file ZIP. Jika ini berisi`yes`, semua tautan simbolik internal di sumber akan dipertahankan dalam file ZIP artefak. 

artefak/prefiks S3 ** **  <a name="build-spec.artifacts.s3-prefix"></a>
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 ** **  <a name="build-spec.artifacts.secondary-artifacts"></a>
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.   
[`artifacts/files`](#build-spec.artifacts.files)Urutan 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
<a name="build-spec.cache"></a>

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 adalah`No Cache`.

cache/kunci ** **  <a name="build-spec.cache.key"></a>
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 ** **  <a name="build-spec.cache.fallback-keys"></a>
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 ** **  <a name="build-spec.cache.action"></a>
Urutan opsional. Menentukan tindakan yang akan dilakukan pada cache. Nilai yang valid meliputi:  
+ `restore`yang hanya mengembalikan cache tanpa menyimpan pembaruan.
+ `save`yang hanya menyimpan cache tanpa memulihkan versi sebelumnya.
Jika tidak ada nilai yang diberikan, CodeBuild default untuk melakukan pemulihan dan penyimpanan.

cache/jalur ** **  <a name="build-spec.cache.paths"></a>
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, `{{my-subdirectory}}/my-file.jar` atau`{{my-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 secara rekursif mulai dari subdirektori bernama. {{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
<a name="build-spec-ref-example"></a>

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_HOME` dan nilai`/usr/lib/jvm/java-8-openjdk-amd64`, ditetapkan.
+ Variabel lingkungan khusus bernama `dockerLoginPassword` Anda yang disimpan di Amazon EC2 Systems Manager Parameter Store akan 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 untuk menginstal artefak keluaran build di repositori internalnya), `docker login` (untuk masuk ke Docker dengan kata sandi yang sesuai dengan nilai variabel lingkungan khusus yang `dockerLoginPassword` Anda tetapkan di Amazon EC2 Systems Manager Parameter Store), dan beberapa perintah. `echo` Per `echo` intah disertakan di sini untuk menunjukkan bagaimana CodeBuild menjalankan perintah dan urutan menjalankannya. 
+ `files`mewakili file untuk diunggah ke lokasi keluaran build. Dalam contoh ini, mengun CodeBuild ggah file `messageUtil-1.0.jar` tunggal. `messageUtil-1.0.jar`File dapat ditemukan di direktori relatif yang dinamai `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 hanya untuk contoh ini. Dalam skenario Anda sendiri, nama file dan direktori ini akan berbeda. 
+ `reports`mewakili dua grup laporan yang menghasilkan laporan selama pembuatan:
  + `arn:aws:codebuild:your-region:your-aws-account-id:report-group/report-group-name-1`menentukan 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.
  + `reportGroupCucumberJson`menentukan grup laporan baru. Jika nama proyek adalah`my-project`, grup laporan dengan nama `my-project-reportGroupCucumberJson` dibuat saat build dijalankan. Hasil pengujian yang dihasilkan oleh kerangka pengujian ada di`cucumber/target/cucumber-tests.xml`. Format file pengujian adalah `CucumberJson` dan jalur dihapus dari file yang berisi hasil pengujian.

## Versi Buildspec
<a name="build-spec-ref-versions"></a>

Tabel berikut mencantumkan versi buildspec dan perubahan antar versi.


| Versi | Perubahan | 
| --- | --- | 
| 0.2 |  +   `environment_variables`telah diganti namanya menjadi`env`.  <br />+   `plaintext`telah diganti namanya menjadi`variables`.  <br />+   Pro `type` perti untuk `artifacts` telah usang.  <br />+  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 contoh yang sama dari shell default di lingkungan build.   | 
| 0.1 | Ini adalah definisi awal dari format spesifikasi build. | 