開発者向け機能 - OpenShift Pipelines / OpenShift GitOps

HOMEデベロッパー向け開発者向け機能OpenShift Pipelines / OpenShift GitOps

開発者向け機能インデックス

  1. 開発者向け機能の位置付け
  2. S2Iビルド/Red Hat 公式コンテナイメージ
  3. CodeReady Workspaces(IDE)
  4. OpenShift Pipelines/OpenShift GitOps(CICD)
  5. OpenShift Serverless

OpenShiftで提供するCI/CDツール

OpenShift Pipelines

OpenShift GitOps

OpenShift Pipelines

Built for Kubernetes
  • Kubernetesネイティブな宣言型CI/CDツール
  • 中央サーバーの管理、プラグインの調整からの脱却
オンデマンドな拡張性
  • 独立したコンテナ内で実行・拡張されるパイプライン
  • 再現性のある予測可能な結果
セキュアなパイプラインの実行
  • OpenShiftのRBACと連携し、アプリケーションのセキュリティポリシーと整合性が取れる安全なパイプライン
高いユーザービリティ
  • OpenShiftのGUIや専用CLIを使ったパイプライン作成
  • OperatorHubを使ったインストール・アップグレード
  • 既存TaskとPipelineの利用(Tekton Hub)

OpenShift Pipelinesのコンポーネント

Tekton Pipelines
CICDにおける各タスクとパイプラインの定義、実行
Tekton Triggers
Gitリポジトリのイベントを契機としたタスク/パイプラインのトリガー
Tekton Catalog
一般公開されている共通利用可能なタスク集

Tekton Pipelinesのカスタムリソース

Task/PipelineによるCICDパイプライン構築

  • CICDパイプラインにおける一つ一つのアクションをTaskとして定義
  • Taskを組み合わせてPipelineを構築
  • 一度定義したTask/Pipelineは入力するパラメータを変えることで再利用可能
apiVersion: tekton.dev/v1beta1
kind: Task
metadata:
  name: hello-world
spec:
  steps:
    - name: first-step
      image: registry.access.redhat.com/ubi8/ubi-minimal:latest
      command: ["echo"]
      args: ["hello world"]
apiVersion: tekton.dev/v1beta1
kind: Pipeline
metadata:
  name: hello-pipe
spec:
  tasks:
    - name: hello-world-task
      taskRef: 
        name: hello-world

Task/Pipelineの実行

TaskRun

  • Taskを実行するためのカスタムリソース
  • Task実行時に必要なパラメータを渡す

PipelineRun

  • Pipelineを実行するためのカスタムリソース
  • Pipeline実行時に必要なパラメータを渡す
  • Pipelineで定義された内容に基づきTaskRunを作成
  • Task間でデータを受け渡すためのPVを定義
apiVersion: tekton.dev/v1beta1
kind: PipelineRun
metadata:
  generateName: pipeline-run-
spec:
  pipelineRef:
    name: hello-pipe
  params:
    - name: git-url
      value: 'https://gitlab.com/.../...'
    - name: git-revision
      value: 'main'workspaces:
    - name: shared-workspace
      persistentVolumeClaim:
        claimName: shared-workspace
    - name: temp-dir
      emptyDir: {}

Tekton Triggersのカスタムリソース

TriggerTemplate

  • Webhookを受け取った際に作成するリソース(PipelineRun、等)の定義

TriggerBinding

  • Webhookで受け取ったJSONからPipelineRunに渡すパラメータの定義

EventListner

  • Webhookの受け口(Service+Pod)の作成と、使用するTriggerTemplate /TriggerBindingの指定

Interceptorsによるフィルタリング

トリガー実行条件の詳細化

  • Webhookに設定したSecretを利用することで特定のリポジトリからのWebhookのみ許可
  • Gitイベントの種類や、実行対象のブランチを限定したパイプラインの実行
apiVersion: triggers.tekton.dev/v1alpha1
kind: EventListener
metadata:
  name: test-event-listener
spec:
  serviceAccountName: sample-sa
  triggers:
    - bindings:
        - ref: test-trigger-binding
      template:
        ref: test-pipeline-template
      interceptors:
        - github:
            secretRef:
              ecretName: github-webhook
              secretKey: secretkey
            eventTypes:
              - push
        - cel:
            filter: "body.ref == \"refs/heads/master\""

OpenShift GitOps

宣言的なデプロイメントの実現
  • Gitに記録されるマニフェスト情報を正とするデプロイメント
  • マニフェストからの逸脱(ドリフト)の検知と自動修正
マルチクラスタへの対応
  • 複数のOpenShift, Kubernetesクラスタにおけるデプロイメントの管理・制御
  • 複雑なデプロイ戦略への柔軟な対応
デプロイメントと環境の可視化
  • デプロイメントとKubernetesリソースの可視化
  • デプロイメント履歴の表示とロールバック
自動的なインストールと構成
  • OperatorHubを使った自動的なインストール・構成・アップグレード

Argo CDのカスタムリソース

Application

  • デプロイ先クラスタ、NameSpaceを指定
  • 同期(Sync)するGitリポジトリを登録
  • 180秒ごとにリポジトリの状態をチェック、新たなcommitがあればそれを自動デプロイ
Gitでリソースが削除されたらクラスタからも削除
クラスタに直接加えられた変更を検知し、リポジトリの状態に合わせ修正
apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: app-develop
  namespace: openshift-gitops
  labels:
    app: node-build-config-openshift
    environment: dev
spec:
  destination:
    namespace: app-develop
    server: https://kubernetes.default.svc
  project: dev-health
  source:
    kustomize:
    path: deploy/overlays/dev
    repoURL: https://gitlab.com/.../...
    targetRevision: main
  syncPolicy:
    automated:
      prune: true
      selfHeal: true
    syncOptions:
      - ApplyOutOfSyncOnly=true 
      - CreateNamespace=true

選ぶなら業界をリードするコンテナプラットフォーム

OpenShiftならインフラ運用の効率化はもとよりアプリケーション開発者がソースコードの開発に専念できるように必要な機能までも提供してくれます