

Amazon CodeCatalyst tidak lagi terbuka untuk pelanggan baru. Pelanggan yang sudah ada dapat terus menggunakan layanan ini seperti biasa. Lihat informasi yang lebih lengkap di [Cara bermigrasi dari CodeCatalyst](migration.md).

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

# Bekerja dengan manajemen siklus hidup sebagai penulis cetak biru
<a name="lifecycle-management-dev"></a>

Manajemen siklus hidup memungkinkan Anda menyimpan sejumlah besar proyek yang disinkronkan dari satu sumber praktik terbaik yang umum. Ini menskalakan propagasi perbaikan dan pemeliharaan sejumlah proyek di seluruh siklus pengembangan perangkat lunak mereka. Manajemen siklus hidup merampingkan kampanye internal, perbaikan keamanan, audit, peningkatan runtime, perubahan praktik terbaik, dan praktik pemeliharaan lainnya karena standar tersebut didefinisikan di satu tempat dan secara otomatis selalu diperbarui secara terpusat saat standar baru diterbitkan.

Ketika versi baru cetak biru Anda diterbitkan, semua proyek yang berisi cetak biru tersebut diminta untuk memperbarui ke versi terbaru. Sebagai penulis cetak biru, Anda juga dapat melihat versi cetak biru tertentu yang berisi setiap proyek untuk tujuan kepatuhan. Ketika ada konflik dalam repositori sumber yang ada, manajemen siklus hidup membuat permintaan tarik. Untuk semua sumber daya lainnya, seperti Dev Environment, semua pembaruan manajemen siklus hidup secara ketat membuat sumber daya baru. Pengguna bebas untuk menggabungkan atau tidak menggabungkan permintaan tarik tersebut. Ketika permintaan tarik tertunda digabungkan, versi cetak biru, termasuk opsi, yang digunakan dalam proyek Anda kemudian diperbarui. Untuk mempelajari tentang bekerja dengan manajemen siklus hidup sebagai pengguna cetak biru, lihat dan. [Menggunakan manajemen siklus hidup pada proyek yang ada](lifecycle-management-user.md#using-lm-existing-projects) [Menggunakan manajemen siklus hidup pada beberapa cetak biru dalam sebuah proyek](lifecycle-management-user.md#using-lm-multiple-bp)

**Topics**
+ [Menguji manajemen siklus hidup untuk keluaran bundel dan konflik gabungan](test-lm.md)
+ [Menggunakan strategi gabungan untuk menghasilkan bundel dan menentukan file](merge-strategies-lm.md)
+ [Mengakses objek konteks untuk detail proyek](context-objects-lm.md)

# Menguji manajemen siklus hidup untuk keluaran bundel dan konflik gabungan
<a name="test-lm"></a>

Anda dapat menguji manajemen siklus hidup cetak biru secara lokal dan menggabungkan resolusi konflik. Serangkaian bundel di bawah `synth/` direktori yang mewakili berbagai fase pembaruan siklus hidup dihasilkan. Untuk menguji manajemen siklus hidup, Anda dapat menjalankan perintah yarn berikut pada cetak biru Anda:. `yarn blueprint: resynth` Untuk mempelajari lebih lanjut tentang resintesis dan bundel, lihat [Resintesis](custom-bp-concepts.md#resynthesis-concept) dan. [Menghasilkan file dengan resynthesis](merge-strategies-lm.md#three-way-merge-lm)

# Menggunakan strategi gabungan untuk menghasilkan bundel dan menentukan file
<a name="merge-strategies-lm"></a>

Anda dapat menggunakan strategi penggabungan untuk menghasilkan bundel dengan resynthesis dan menentukan file untuk pembaruan manajemen siklus hidup cetak biru kustom. Dengan memanfaatkan strategi resythensis dan menggabungkan, Anda dapat mengelola pembaruan dan mengontrol file mana yang diperbarui selama penerapan. Anda juga dapat menulis strategi Anda sendiri untuk mengontrol bagaimana perubahan digabungkan ke dalam CodeCatalyst proyek yang ada.

**Topics**
+ [Menghasilkan file dengan resynthesis](#three-way-merge-lm)
+ [Menggunakan strategi penggabungan](#vended-merge-strategies-lm)
+ [Menentukan file untuk pembaruan manajemen siklus hidup](#specify-files-lm-updates)
+ [Menulis strategi penggabungan](#write-merge-strategies-lm)

## Menghasilkan file dengan resynthesis
<a name="three-way-merge-lm"></a>

Resintesis dapat menggabungkan kode sumber yang dihasilkan oleh cetak biru dengan kode sumber yang sebelumnya dihasilkan oleh cetak biru yang sama, memungkinkan perubahan pada cetak biru untuk disebarkan ke proyek yang ada. Penggabungan dijalankan dari `resynth()` fungsi di seluruh bundel keluaran cetak biru. Resintesis pertama menghasilkan tiga bundel yang mewakili berbagai aspek cetak biru dan status proyek. Ini dapat dijalankan secara manual secara lokal dengan `yarn blueprint:resynth` perintah, yang akan membuat bundel jika belum ada. Bekerja secara manual dengan bundel akan memungkinkan Anda untuk mengejek dan menguji perilaku resintesis secara lokal. Secara default, cetak biru hanya menjalankan resintesis di seluruh repositori di bawah `src/*` karena hanya bagian dari bundel yang biasanya berada di bawah kendali sumber. Untuk informasi selengkapnya, lihat [Resintesis](custom-bp-concepts.md#resynthesis-concept).
+ `existing-bundle`- Bundel ini merupakan representasi dari status proyek yang ada. Ini secara buatan dibangun oleh komputasi sintesis untuk memberikan konteks cetak biru tentang apa yang ada dalam proyek yang disebarkannya (jika ada). Jika sesuatu sudah ada di lokasi ini saat menjalankan resynthesis secara lokal, itu akan diatur ulang dan dihormati sebagai tiruan. Jika tidak, itu akan diatur ke isi`ancestor-bundle`.
+ `ancestor-bundle`- Ini adalah bundel yang mewakili keluaran cetak biru jika disintesis dengan beberapa opsi dan/atau versi sebelumnya. Jika ini adalah pertama kalinya cetak biru ini ditambahkan ke proyek, maka leluhurnya tidak ada, jadi itu disetel ke konten yang sama dengan. `existing-bundle` Secara lokal, jika bundel ini sudah ada di lokasi ini, itu akan dihormati sebagai tiruan.
+ `proposed-bundle`- Ini adalah bundel yang mengolok-olok cetak biru jika disintesis dengan beberapa opsi dan/atau versi baru. Ini adalah bundel yang sama yang akan diproduksi oleh `synth()` fungsi. Secara lokal, bundel ini selalu diganti.

Setiap bundel dibuat selama fase resintesis yang dapat diakses dari kelas cetak biru di bawah. `this.context.resynthesisPhase`
+ `resolved-bundle`- Ini adalah bundel terakhir, yang merupakan representasi dari apa yang dikemas dan dikerahkan ke proyek. CodeCatalyst Anda dapat melihat file dan perbedaan mana yang dikirim ke mekanisme penerapan. Ini adalah output dari `resynth()` fungsi menyelesaikan penggabungan antara tiga bundel lainnya.

Penggabungan tiga arah diterapkan dengan mengambil perbedaan antara `ancestor-bundle` dan `proposed-bundle` dan menambahkannya ke `existing-bundle` untuk menghasilkan. `resolved-bundle` Semua strategi penggabungan menyelesaikan file ke file. `resolved-bundle` Resintesis menyelesaikan jangkauan bundel ini dengan strategi penggabungan cetak biru selama `resynth()` dan menghasilkan bundel yang diselesaikan dari hasilnya.

## Menggunakan strategi penggabungan
<a name="vended-merge-strategies-lm"></a>

Anda dapat menggunakan strategi gabungan yang dijual oleh pustaka cetak biru. Strategi ini menyediakan cara untuk menyelesaikan output file dan konflik untuk file yang disebutkan di [Menghasilkan file dengan resynthesis](#three-way-merge-lm) bagian.
+ `alwaysUpdate`- Strategi yang selalu menyelesaikan file yang diusulkan.
+ `neverUpdate`- Strategi yang selalu menyelesaikan file yang ada.
+ `onlyAdd`- Strategi yang menyelesaikan file yang diusulkan ketika file yang ada belum ada. Jika tidak, selesaikan ke file yang ada.
+ `threeWayMerge`- Strategi yang melakukan penggabungan tiga arah antara file leluhur yang ada, diusulkan, dan yang sama. File yang diselesaikan mungkin berisi penanda konflik jika file tidak dapat digabungkan dengan bersih. Isi file yang disediakan harus dikodekan UTF-8 agar strategi menghasilkan output yang berarti. Strategi ini mencoba mendeteksi apakah file input biner. Jika strategi mendeteksi konflik gabungan dalam file biner, selalu mengembalikan file yang diusulkan.
+ `preferProposed`- Strategi yang melakukan penggabungan tiga arah antara file leluhur yang ada, diusulkan, dan yang sama. Strategi ini menyelesaikan konflik dengan memilih sisi file yang diusulkan dari setiap konflik.
+ `preferExisting`- Strategi yang melakukan penggabungan tiga arah antara file leluhur yang ada, diusulkan, dan yang sama. Strategi ini menyelesaikan konflik dengan memilih sisi file yang ada dari setiap konflik.

Untuk melihat kode sumber untuk strategi penggabungan, lihat repositori [sumber terbuka GitHub ](https://github.com/aws/codecatalyst-blueprints/blob/main/packages/blueprints/blueprint/src/resynthesis/merge-strategies/merge-strategies.ts#L17).

## Menentukan file untuk pembaruan manajemen siklus hidup
<a name="specify-files-lm-updates"></a>

Selama resintesis, cetak biru mengontrol bagaimana perubahan digabungkan ke dalam repositori sumber yang ada. Namun, Anda mungkin tidak ingin mendorong pembaruan ke setiap file dalam cetak biru Anda. Misalnya, kode contoh seperti stylesheet CSS dimaksudkan untuk spesifik proyek. Strategi penggabungan tiga arah adalah opsi default jika Anda tidak menentukan strategi lain. Cetak biru dapat menentukan file mana yang mereka miliki dan file mana yang tidak mereka miliki dengan menentukan strategi penggabungan pada konstruksi repositori itu sendiri. Cetak biru dapat memperbarui strategi penggabungannya, dan strategi terbaru dapat digunakan selama resintesis.

```
const sourceRepo = new SourceRepository(this, {
      title: 'my-repo',
    });
    sourceRepo.setResynthStrategies([
      {
        identifier: 'dont-override-sample-code',
        description: 'This strategy is applied accross all sample code. The blueprint will create sample code, but skip attempting to update it.',
        strategy: MergeStrategies.neverUpdate,
        globs: [
          '**/src/**',
          '**/css/**',
        ],
      },
    ]);
```

Beberapa strategi penggabungan dapat ditentukan, dan strategi terakhir diutamakan. File yang tidak terungkap secara default three-way-merge mirip dengan Git. Ada beberapa strategi gabungan yang disediakan melalui `MergeStrategies` konstruksi, tetapi Anda dapat menulis sendiri. Strategi yang disediakan mematuhi driver [strategi git merge](https://git-scm.com/docs/merge-strategies).

## Menulis strategi penggabungan
<a name="write-merge-strategies-lm"></a>

Selain menggunakan salah satu strategi penggabungan build yang disediakan, Anda juga dapat menulis strategi Anda sendiri. Strategi harus mematuhi antarmuka strategi standar. Anda harus menulis fungsi strategi yang mengambil versi file dari,, dan `existing-bundle` `proposed-bundle``ancestor-bundle`, dan menggabungkannya menjadi satu file yang diselesaikan. Sebagai contoh:

```
type StrategyFunction = (
   /**
   * file from the ancestor bundle (if it exists)
   */
    commonAncestorFile: ContextFile | undefined, 
   /**
   * file from the existing bundle (if it exists)
   */
    existingFile: ContextFile | undefined,
   /**
   * file from the proposed bundle (if it exists)
   */ 
    proposedFile: ContextFile | undefined, 
    options?: {}) 
    /**
    * Return: file you'd like in the resolved bundle
    * passing undefined will delete the file from the resolved bundle
    */ 
=> ContextFile | undefined;
```

Jika file tidak ada (tidak terdefinisi), maka jalur file itu tidak ada di bundel lokasi tertentu.

**Contoh:**

```
strategies: [
          {
            identifier: 'dont-override-sample-code',
            description: 'This strategy is applied across all sample code. The blueprint will create sample code, but skip attempting to update it.',
            strategy: (ancestor, existing, proposed) => {
                const resolvedfile = ...
                ...
                // do something
                ...
                return resolvedfile
            },
            globs: [
              '**/src/**',
              '**/css/**',
            ],
          },
        ],
```

# Mengakses objek konteks untuk detail proyek
<a name="context-objects-lm"></a>

Sebagai penulis cetak biru, Anda dapat mengakses konteks dari proyek cetak biru selama sintesis untuk mendapatkan informasi seperti ruang dan nama proyek, atau file yang ada di repositori sumber proyek. Anda juga bisa mendapatkan detail seperti fase resintesis yang dihasilkan cetak biru. Misalnya, Anda dapat mengakses konteks untuk mengetahui apakah Anda mensintesis ulang untuk menghasilkan bundel leluhur atau bundel yang diusulkan. Konteks kode yang ada kemudian dapat digunakan untuk mengubah kode Anda di repositori Anda. Misalnya, Anda dapat menulis strategi resintesis Anda sendiri untuk menetapkan standar kode tertentu. Strategi dapat ditambahkan ke `blueprint.ts` file untuk cetak biru kecil, atau Anda dapat membuat file terpisah untuk strategi.

Contoh berikut menunjukkan bagaimana Anda dapat menemukan file dalam konteks proyek, menetapkan pembuat alur kerja, dan menetapkan strategi resynthesis yang dijual cetak biru untuk file tertentu:

```
const contextFiles = this.context.project.src.findAll({
      fileGlobs: ['**/package.json'],
    });

    // const workflows = this.context.project.src.findAll({
    //   fileGlobs: ['**/.codecatalyst/**.yaml'],
    // });

    const security = new WorkflowBuilder(this, {
      Name: 'security-workflow',
    });
    new Workflow(this, repo, security.getDefinition());
    repo.setResynthStrategies([
      {
        identifier: 'force-security',
        globs: ['**/.codecatalyst/security-workflow.yaml'],
        strategy: MergeStrategies.alwaysUpdate,
      },
    ]);


    for (const contextFile of contextFiles) {
      const packageObject = JSON.parse(contextFile.buffer.toString());
      new SourceFile(internalRepo, contextFile.path, JSON.stringify({
        ...packageObject,
      }, null, 2));
    }
  }
```