Skip to content

Apa Itu Codefresh

Chetabahana edited this page Oct 13, 2019 · 113 revisions

Codefresh adalah salah satu layanan CI/CD untuk aplikasi berbasis Docker. Secara instan membangun, menguji, dan menggunakan gambar aplikasi umum di Kubernetes.

Table of Contents

Arsitektur

Akun

Invite

Internal

External

Integrasi

Layanan

GCP Billing

Billing juga dapat diintegrasikan via Google Marketplace

Format

Pipeline

Codefresh bekerja berdasarkan step (langkah) dan type yang diformasikan kedalam Yml format seperti contoh² di github. Setiap step dapat dijelaskan sbb:

step-id:
  description: [Free-text description]
  working-directory: [ID of another step or a relative path] 
  environment:
    - key=value
  [step contents]
  on-fail:
    - command
  on-success:
    - command
  on-finish:
    - command
  fail-fast: false # default true

Multi Step

Saluran pipa Anda tidak perlu dimulai dan diakhiri dalam satu langkah. Anda dapat menjalankan langkah-langkah paralel dalam pipa Codefresh. Anda dapat memiliki langkah "mulai" sebanyak yang Anda inginkan dan langkah "berakhir" sebanyak mungkin.

Konfigurasi

Codefresh menawarkan format bawaannya sendiri untuk membuat saluran pipa. Spesifikasi pipa didasarkan pada sintaks YAML yang memungkinkan Anda untuk menggambarkan saluran pipa Anda dengan cara yang sepenuhnya deklaratif.

File YAML terdiri dari serangkaian langkah yang dieksekusi dalam urutan yang ditentukan.

Fitur Deskripsi
Freestyle Menjalankan satu atau lebih perintah shell dalam wadah yang mirip dengan docker run.
Build Membangun gambar Docker seperti build docker
Push Mendorong gambar Docker ke registri Docker mirip dengan tag docker dan push docker
Git Clone Mengesampingkan perilaku git clone default
Composition Memulai Docker Komposisi seperti docker-compose. Buang begitu pipa selesai.
Launch Komposisi Memulai komposisi Docker jangka panjang yang tetap setelah akhir pipa
Deploy Menyebarkan ke cluster Kubernetes
Approval Menjeda pipa dan menunggu intervensi manusia

Build

Pipelines

version: '1.0'
steps:
  get_git_token:
    title: Reading Github token
    image: codefresh/cli
    commands:
      - cf_export GITHUB_TOKEN=$(codefresh get context github --decrypt -o yaml | yq -y .spec.data.auth.password)
  main_clone:
    title: Updating the repo
    image: alpine/git:latest
    commands:
      - if [ -d compose ]; then rm -Rf compose; fi
      - git clone https://chetabahana:$GITHUB_TOKEN@github.com/chetabahana/compose.git
      - cd compose && git remote rm origin
      - git config --global user.name "chetabahana"
      - git config --global user.email "chetabahana@gmail.com"
      - git remote add origin https://chetabahana:$GITHUB_TOKEN@github.com/chetabahana/compose.git
      - sed -i "s/-[0-9]\{1,\}-\([a-zA-Z0-9_]*\)'/-`date +%d%H%M`-whatever'/g" cloudbuild.yaml
      - git status && git add . && git commit -m "fresh commit" && git push -u origin master

Variable Key

Variabel yang disediakan pengguna dapat didefinisikan pada 4 level:
  • Definisi langkah freestyle: menggunakan bidang lingkungan.
  • Eksekusi pipa: setelah mengklik tombol "Bangun", buka bagian "Opsi lanjutan".
  • Definisi saluran pipa: di bawah bagian “Variabel lingkungan” di tampilan saluran pipa.
  • Konfigurasi Bersama: didefinisikan di bawah pengaturan akun Anda.
Opsi terdaftar sesuai urutan kepentingannya, jadi dalam kasus beberapa variabel didefinisikan di lokasi berbeda dengan nama yang sama, urutan penggantian akan seperti yang tercantum di sini.

Shared Volume

version: '1.0'
steps:
  create_test_data_step: 
    title: Creating dummy data
    image: alpine
    commands:
      - echo "Writing in shared volume" > /codefresh/volume/sample_text.txt 
  my_sample_composition:
    type: composition
    title: Composition with volume
    composition:
      version: '2'
      services:
        my_sample_service:
          image: node
          volumes:
            - '${{CF_VOLUME_NAME}}:${{CF_VOLUME_PATH}}'
          working_dir: '${{CF_VOLUME_PATH}}'
          command: bash -c "pwd && cat sample_text.txt"
    composition_candidates:
      my_unit_tests:
        image: python
        volumes:
          - '${{CF_VOLUME_NAME}}:${{CF_VOLUME_PATH}}'
        working_dir: '${{CF_VOLUME_PATH}}'
        command: bash -c "pwd && echo 'Finished tests' > test_result.txt"
  read_test_data_step:
    title: Reading dummy data
    image: alpine
    commands:
      - ls -l /codefresh/volume
      - cat /codefresh/volume/test_result.txt 

Registry

Compose

Compute

Kubernetes

Deploy

Swarm

Jika Anda jalankan Docker Swarm di Server maka Codefresh dapat dengan mudah deploy aplikasi ke Docker Swarm menggunakan saluran pipa GUI atau YAML.
  • Docker-stack.yml yang berisi definisi aplikasi
  • Host tempat Docker Swarm Anda berjalan
  • Kunci SSH yang dapat digunakan Codefresh untuk mengakses host
  • Nama tumpukan yang akan digunakan setelah aplikasi dikerahkan.
  • Semua informasi ini akan diteruskan ke pipa dalam bentuk parameter build.

Stacks

Integration

Caching

Tes Dinamik

Helm Charts

Menjalankan

Codefresh Plugin

Codefresh juga menawarkan direktori plugin di http://steps.codefresh.io/ yang dibuat khusus untuk operasi CI / CD seperti google-kms berikut ini:
- description: example-1
  workflow:
    version: '1.0'
    steps:
      google_kms:
        image: codefreshplugins/google-kms
        commands:
          - kms encrypt VALUE_1 VALUE_n

Codefresh API/CLI

Type Trigger

  • Git Triggers
  • Dockerhub Triggers
  • Azure Registry Triggers
  • Quay Triggers
  • Artifactory Triggers
  • Cron Trigger
  • API/CLI Trigger

Git Commit

Seperti halnya Docker Hub atau Google Registry dll Pemicu GIT adalah jenis pemicu build. Namun dengan Codefresh Anda dapat memilih repositori lain selain dari milik proyek itu sendiri. Bahkan untuk memicu build pada proyek A meskipun komit terjadi pada proyek B.

Image Push

Codefresh piplines bisa disetel memicu eksekusi yang terkait dengan image push ke DockerHub. Anda juga dapat menggunakan klien baris perintah via Codefresh CLI untuk mengelola pemicu.

# get trigger-event details for previously created trigger-event
codefresh get trigger-event -o yaml registry:dockerhub:codefresh:fortune:push:107e9db97062

uri: 'registry:dockerhub:codefresh:fortune:push:107e9db97062'
type: registry
kind: dockerhub
public: false
secret: aGao5weuez2G6WF9
status: active
endpoint: >-
  https://g.codefresh.io/nomios/dockerhub?account=107e9db97062&secret=aGao5weuez2G6WF9
description: Docker Hub codefresh/fortune push event
help: >-
  Docker Hub webhooks fire when an image is built in, pushed or a new tag is
  added to, your repository.

  Configure Docker Hub webhooks on
  https://hub.docker.com/r/codefresh/fortune/~/settings/webhooks/

  Add following Codefresh Docker Hub webhook endpoint
  https://g.codefresh.io/nomios/dockerhub?account=107e9db97062&secret=aGao5weuez2G6WF9

Triggering

Codefresh menawarkan API komprehensif yang dapat Anda gunakan untuk berintegrasi dengan aplikasi atau solusi lain yang sudah Anda miliki. Detail lengkap lihat API dokumentasi.

Untuk memicu jaringan pipa dari jarak jauh Anda dapat menemukan perintah Curl premade (termasuk kunci api) di pengaturan build untuk setiap pipa:

Anda juga dapat memasukkan variabel lingkungan tambahan menggunakan array:

curl 'https://g.codefresh.io/api/builds/5b1a78d1bdbf074c8a9b3458' \
--compressed -H 'content-type:application/json; charset=utf-8' \
-H 'Authorization: <your_key_here>' \
--data-binary '{"serviceId":"5b1a78d1bdbf074c8a9b3458",\
"type":"build","repoOwner":"kostis-codefresh",\
"branch":"master","repoName":"nestjs-example",\
"variables":{"sample-var1":"sample1","SAMPLE_VAR2":"SAMPLE2"}}'

Referensi

Project Tutorial

You are on the wiki of our repo

Chetabahana Project

Clone this wiki locally