

 **Bantu tingkatkan halaman ini** 

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

Untuk berkontribusi pada panduan pengguna ini, pilih **Edit halaman ini pada GitHub** tautan yang terletak di panel kanan setiap halaman.

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

# Bekerja dengan Proyek CD Argo
<a name="argocd-projects"></a>

Argo CD Projects (AppProject) menyediakan pengelompokan logis dan kontrol akses untuk Aplikasi. Proyek menentukan repositori Git, cluster target, dan ruang nama yang dapat digunakan Aplikasi, memungkinkan batas multi-tenancy dan keamanan dalam instance CD Argo bersama.

## Kapan menggunakan Proyek
<a name="_when_to_use_projects"></a>

Gunakan Proyek untuk:
+ Pisahkan aplikasi berdasarkan tim, lingkungan, atau unit bisnis
+ Batasi tim repositori mana yang dapat digunakan
+ Batasi kluster dan ruang nama mana yang dapat diterapkan oleh tim
+ Menerapkan kuota sumber daya dan jenis sumber daya yang diizinkan
+ Menyediakan penerapan aplikasi swalayan dengan pagar pembatas

## Proyek Default
<a name="_default_project"></a>

Setiap kemampuan Argo CD mencakup `default` proyek yang memungkinkan akses ke semua repositori, cluster, dan ruang nama. Meskipun berguna untuk pengujian awal, buat proyek khusus dengan batasan eksplisit untuk penggunaan produksi.

Untuk detail tentang konfigurasi proyek default dan cara membatasinya, lihat [Proyek Default](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#the-default-project) dalam dokumentasi Argo CD.

## Buat Proyek
<a name="_create_a_project"></a>

Buat Proyek dengan menerapkan sumber `AppProject` daya ke cluster Anda.

 **Contoh: Proyek khusus tim** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  description: Applications for Team A

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'
    - 'https://github.com/my-org/shared-libs'


  # Source namespaces (required for EKS capability)
  sourceNamespaces:
    - argocd
    - team-a-dev
    - team-a-prod

  # Destination clusters and namespaces
  destinations:
    - name: dev-cluster
      namespace: team-a-dev
    - name: prod-cluster
      namespace: team-a-prod

  # Allowed resource types
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace

  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
```

Terapkan Proyek:

```
kubectl apply -f team-a-project.yaml
```

## Konfigurasi proyek
<a name="_project_configuration"></a>

### Repositori sumber
<a name="_source_repositories"></a>

Kontrol repositori Git mana yang dapat digunakan Aplikasi dalam proyek ini:

```
spec:
  sourceRepos:
    - 'https://github.com/my-org/app-*'  # Wildcard pattern
    - 'https://github.com/my-org/infra'  # Specific repo
```

Anda dapat menggunakan wildcard dan pola negasi (`!`awalan) untuk mengizinkan atau menolak repositori tertentu. Untuk detailnya, lihat [Mengelola Proyek](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) dalam dokumentasi Argo CD.

### Ruang nama sumber
<a name="_source_namespaces"></a>

Saat menggunakan kemampuan CD EKS Argo, `spec.sourceNamespaces` bidang ini **diperlukan** dalam AppProject definisi kustom Anda. Bidang ini menentukan ruang nama mana yang dapat berisi Aplikasi atau referensi proyek ApplicationSets ini:

**penting**  
Ini adalah bidang wajib untuk kemampuan EKS Argo CD, yang berbeda dari OSS Argo CD di mana bidang ini opsional.

#### AppProject Perilaku default
<a name="_default_appproject_behavior"></a>

`default` AppProject Secara otomatis menyertakan `argocd` namespace di. `sourceNamespaces` Jika Anda perlu membuat Aplikasi atau ApplicationSets di ruang nama tambahan, ubah `sourceNamespaces` bidang untuk menambahkan ruang nama tersebut:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: default
  namespace: argocd
spec:
  sourceNamespaces:
    - argocd           # Already included by default
    - team-a-apps      # Add additional namespaces as needed
    - team-b-apps
```

#### AppProject Konfigurasi kustom
<a name="_custom_appproject_configuration"></a>

Saat membuat kustom AppProject, Anda harus secara manual menyertakan namespace `argocd` sistem dan ruang nama lain di mana Anda berencana untuk membuat Aplikasi atau: ApplicationSets

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a-project
  namespace: argocd
spec:
  description: Applications for Team A

  # Required: Manually specify all namespaces
  sourceNamespaces:
    - argocd           # ArgoCD system namespace (required)
    - team-a-dev       # Custom namespace for dev Applications
    - team-a-prod      # Custom namespace for prod Applications

  # Source repositories this project can deploy from
  sourceRepos:
    - 'https://github.com/my-org/team-a-*'

  # Destination restrictions
  destinations:
    - namespace: 'team-a-*'
      server: https://kubernetes.default.svc
```

**catatan**  
Jika Anda menghilangkan namespace dari`sourceNamespaces`, Aplikasi atau ApplicationSets dibuat di namespace itu tidak akan dapat mereferensikan proyek ini, yang mengakibatkan kegagalan penerapan.

### Pembatasan tujuan
<a name="_destination_restrictions"></a>

Batasi di mana Aplikasi dapat menyebarkan:

```
spec:
  destinations:
    - name: prod-cluster  # Specific cluster by name
      namespace: production
    - name: '*'  # Any cluster
      namespace: team-a-*  # Namespace pattern
```

**penting**  
Gunakan nama cluster dan pola namespace tertentu daripada wildcard untuk Proyek produksi. Ini mencegah penyebaran yang tidak disengaja ke cluster atau ruang nama yang tidak sah.

Anda dapat menggunakan wildcard dan pola negasi untuk mengontrol tujuan. Untuk detailnya, lihat [Mengelola Proyek](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#managing-projects) dalam dokumentasi Argo CD.

### Pembatasan sumber daya
<a name="_resource_restrictions"></a>

Kontrol tipe sumber daya Kubernetes mana yang dapat digunakan:

 Sumber daya dengan **cakupan cluster**:

```
spec:
  clusterResourceWhitelist:
    - group: ''
      kind: Namespace
    - group: 'rbac.authorization.k8s.io'
      kind: Role
```

 Sumber daya dengan **cakupan ruang nama:**

```
spec:
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
    - group: ''
      kind: ConfigMap
    - group: 's3.services.k8s.aws'
      kind: Bucket
```

Gunakan daftar hitam untuk menolak sumber daya tertentu:

```
spec:
  namespaceResourceBlacklist:
    - group: ''
      kind: Secret  # Prevent direct Secret creation
```

## Tetapkan Aplikasi ke Proyek
<a name="_assign_applications_to_projects"></a>

Saat membuat Aplikasi, tentukan proyek di `spec.project` lapangan:

```
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: my-app
  namespace: argocd
spec:
  project: team-a  # Assign to team-a project
  source:
    repoURL: https://github.com/my-org/my-app
    path: manifests
  destination:
    name: prod-cluster
    namespace: team-a-prod
```

Aplikasi tanpa proyek tertentu menggunakan `default` proyek.

## Peran proyek dan RBAC
<a name="_project_roles_and_rbac"></a>

Proyek dapat menentukan peran khusus untuk kontrol akses berbutir halus. Petakan peran proyek ke pengguna dan grup Pusat AWS Identitas dalam konfigurasi kemampuan Anda untuk mengontrol siapa yang dapat menyinkronkan, memperbarui, atau menghapus aplikasi.

 **Contoh: Proyek dengan peran pengembang dan admin** 

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: team-a
  namespace: argocd
spec:
  sourceRepos:
    - '*'
  destinations:
    - name: '*'
      namespace: 'team-a-*'

  roles:
    - name: developer
      description: Developers can sync applications
      policies:
        - p, proj:team-a:developer, applications, sync, team-a/*, allow
        - p, proj:team-a:developer, applications, get, team-a/*, allow
      groups:
        - team-a-developers

    - name: admin
      description: Admins have full access
      policies:
        - p, proj:team-a:admin, applications, *, team-a/*, allow
      groups:
        - team-a-admins
```

Untuk detail tentang peran proyek, token JWT untuk CI/CD pipeline, dan konfigurasi RBAC, lihat [Peran Proyek](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/#project-roles) dalam dokumentasi Argo CD.

## Pola umum
<a name="_common_patterns"></a>

### Proyek Berbasis Lingkungan
<a name="_environment_based_projects"></a>

Buat proyek terpisah untuk setiap lingkungan:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: production
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/*'
  destinations:
    - name: prod-cluster
      namespace: '*'
  # Strict resource controls for production
  clusterResourceWhitelist: []
  namespaceResourceWhitelist:
    - group: 'apps'
      kind: Deployment
    - group: ''
      kind: Service
```

### Proyek Berbasis Tim
<a name="_team_based_projects"></a>

Isolasi tim dengan proyek khusus:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: platform-team
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/platform-*'
  destinations:
    - name: '*'
      namespace: 'platform-*'
  # Platform team can manage cluster resources
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
```

### Proyek Multi-cluster
<a name="_multi_cluster_projects"></a>

Terapkan ke beberapa cluster dengan kebijakan yang konsisten:

```
apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: global-app
  namespace: argocd
spec:
  sourceRepos:
    - 'https://github.com/my-org/global-app'
  destinations:
    - name: us-west-cluster
      namespace: app
    - name: eu-west-cluster
      namespace: app
    - name: ap-south-cluster
      namespace: app
```

## Praktik terbaik
<a name="_best_practices"></a>

 **Mulailah dengan Proyek yang membatasi**: Mulailah dengan izin sempit dan perluas sesuai kebutuhan daripada memulai dengan akses luas.

 **Gunakan pola namespace**: Manfaatkan wildcard dalam batasan namespace (seperti`team-a-*`) untuk memungkinkan fleksibilitas sambil mempertahankan batasan.

 **Proyek produksi terpisah: Gunakan Proyek** khusus untuk produksi dengan kontrol yang lebih ketat dan kebijakan sinkronisasi manual.

 **Tujuan Proyek Dokumen**: Gunakan `description` bidang untuk menjelaskan untuk apa setiap Proyek dan siapa yang harus menggunakannya.

 **Tinjau izin Proyek secara teratur**: Audit Proyek secara berkala untuk memastikan pembatasan masih selaras dengan kebutuhan tim dan persyaratan keamanan.

## Sumber daya tambahan
<a name="_additional_resources"></a>
+  [Konfigurasikan izin Argo CD](argocd-permissions.md)- Konfigurasikan integrasi RBAC dan Identity Center
+  [Buat Aplikasi](argocd-create-application.md)- Buat Aplikasi dalam Proyek
+  [Gunakan ApplicationSets](argocd-applicationsets.md)- Gunakan ApplicationSets dengan Proyek untuk penyebaran multi-cluster
+  [Dokumentasi Proyek CD Argo - Referensi](https://argo-cd.readthedocs.io/en/stable/user-guide/projects/) hulu lengkap