[Cloud] CI/CD on Steroids: Announcing Container Engine for Kubernetes as a Jenkins X Provider

原文はこちら。
https://blogs.oracle.com/cloud-infrastructure/cicd-on-steroids%3a-announcing-container-engine-for-kubernetes-as-a-jenkins-x-provider


Kubernetesが分散コンテナアプリケーションの管理ツールのデファクトになりました。今日クラウドアプリケーションを作って本当にマルチクラウドに対応させ、かつ可搬性を持たせたいのであれば、Kubernetesを選択するかしないかはあなた次第です。

Kubernetesはすばらしいものですが、継続的デリバリ(CD)スタイルでKubernetes上にアプリケーションを作成したい場合や開発者に生産性を高めて欲しい場合には、課題がいくつかあります。これまでのJenkins(Jenkins 2.0)を使うと、継続的デリバリシステムをKuberenetesで実装できますが、以下のような手順があり面倒です。
  • Kubernetes用のJenkinsプラグインの設定
  • KubernetesクラスタおよびKubernetes環境の設定
  • パイプラインの設定
  • Kubernetesへのコンテナのデプロイ
  • YAMLやHelm Chartの生成
  • 継続的デリバリの採用と推進

Jenkins X

Jenkins Xは、Jenkinsの主要なCI/CDの専門知識と業界の顧客層を活用し、Kubernetes環境に自然に適合するCI/CDソリューションを提供します。Jenkins Xでは、Kubernetesオペレーションの総合的な理解や実行は不要で、Kubernetes環境での製品(=アプリケーション)の出荷速度を大幅に向上させることができます。Dockerfileを扱ったり、Helm Chartを調整したり、jenkinsfileを書いたりする必要はありません。ただ、アプリケーションを作成すれば、それでOKです。すべてのCI/CDが自動実行されます。

Jenkins Xでは以下の操作が簡単になります。
  • Kubernetesの展開に必要なツールのインストールとアップグレードを自動化します。これらのツールはすべてKubernetes向けに構成および最適化されています。ツールには以下のものを含みます。
    • Helm(Kubernetesのパッケージマネージャ)
    • Draft(Kubernetes上でビルド、実行するためのアプルケーションを起動する際に使われるビルドパック)
    • Skaffold(RAD開発を可能にし、イメージのビルドやプッシュを簡素化)
    • Kaniko
    • Jenkins
    • Ksync
    • Monocular
    • Nexus
  • KuberenetesでアプリケーションのCI/CDを自動化
    • Dockerイメージ
    • Helm charts
    • パイプライン
  • GitOpsを利用し、(テストからステージング、本番)


2018年7月現在、Oracle Cloud InfrastructureはJenkins Xのオフィシャルなクラウドで、Oracle Cloud Infrastructure Container Engine for Kubernetes (OKE)でのJenkins Xの実行をネイティブサポートしています。このプロジェクトに参画、貢献してくれたChenghao Shi、Hui Liuおよび彼らのチームの皆様に感謝します。

Run Jenkins X in OKE

Jenkins XをOKEで実行するには2方法あります。このエントリでは、jxというJenkins Xコマンドラインツールの利用方法とこれらの操作の実行方法を紹介します。
  • Jenkins Xがインストールされた新規のOKEクラスタを作成(jx create コマンドを利用)
  • 既存のOKEクラスタにJenkins Xをインストール(jx install コマンドを利用)

Create a New OKE Cluster and Install Jenkins X

jxツールはOracle Cloud Infrastructure CLIを使ってOKEと通信します。CLIがクラスタ作成時点で未インストールの場合、jxは依存関係のあるCLIがないと判断し、実行時にCLIをインストールします。

以下は新規OKEクラスタを作成し、Jenkins Xをクラスタにインストールする手順です。

注意: 実行前に、OKEクラスタデプロイのための必要なサブネットやセキュリティ・リスト・ルール、IAMポリシーが構成済みであることを確認してください。現リリースのjxはこれらを作成しません。これらのリソースの作成方法の詳細は、以下のドキュメントをご覧ください。
Preparing for Container Engine for Kubernetes
https://docs.cloud.oracle.com/iaas/Content/ContEng/Concepts/contengprerequisites.htm?tocpath=Services%7CContainer%20Engine%7CPreparing%20for%20Container%20Engine%20for%20Kubernetes%7C_____0
これらの必要なリソースを迅速にプロビジョニングするためにTerraformのコードを使うこともできます(訳注:原文にはリンクがありますが、空っぽなので訳文ではリンクを掲載していません)。これらのリソースが準備できたら、jxを使ってingress controller、PVCなどを作成してから、Kubernetesに関連するユーティリティやJenkins Xのインストールを始めます。
  1. 開発タスクを実行するようGitを構成します。
    sudo yum install git -y
  2. kubectlをインストールします。
    curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
  3. jxがどのOCIリソースを使うのかわかるよう、oci configファイルを構成します。CLIはこの時点ではインストールされません(実行中にインストールされます)。
    mkdir ~/.oci
    vi ~/.oci/config
    vi ~/.oci/oci_api_key.pem
    chmod 600 ~/.oci/config ~/.oci/oci_api_key.pem
  4. OKEクラスタにインストールされるHelmサーバのtillerと会話できるよう、Helmクライアントをインストールします。
    wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz
    tar -xvf helm-v2.9.1-linux-amd64.tar.gz
    sudo mv linux-amd64/helm /usr/local/bin/
  5. jx コマンドラインツールをインストールします。
    curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.52/jx-linux-amd64.tar.gz | tar xzv
    sudo mv jx /usr/local/bin
  6. jxを使い、Jenkins XがインストールされたOKEクラスタを作成します。
    jx create cluster oke [flags]
    多数のフラグを指定できます。これらのフラグの一部はOracle Cloud Infrastructureに固有のもので、残りはjxの汎用的なフラグです。例えば、次のフラグを使用してOKEクラスタを作成することも、 jx create cluster okeコマンドだけを実行して、実行時に必要なOCIDを入力することもできます。
    jx create cluster oke --name shoulderroad --compartment-id ocid1.tenancy.oc1..l3d6xxx4gziexn5sxnldyhja --vcn-id ocid1.vcn.oc1.phx.ofu4bbmfhj5ijidyde3gpdocybghidrmbq --kubernetes-version v1.10.3 --wait-for-state SUCCEEDED --serviceLbSubnetIds file:///tmp/oke_cluster_config.json --tiller-enabled false
    このコマンドは、OKEに新規Kubernetesクラスタを作成し、必要なローカルの依存関係をインストールし、Jenkins Xプラットフォームをプロビジョニングします。$HOME/binを$PATHに追加してください。 そうしないと、jxはCLIコマンドを呼び出し時に問題が発生します。すでにCLIをインストールしている場合は、CLIが$PATHにあることを確認してください。

    コマンドが完了すると、Jenkins、Nexus、Dockerレジストリ、ChartMuseum、Monocularなどを含む開発環境と、その他の環境(ステージングや本番)ができあがります。通常は、これらのgitリポジトリのHelm chartを使用して、インストール対象のchartやバージョン、任意の環境固有の構成や追加リソースを定義します。
  7. 以下のコマンドを実行して環境を確認します。
    kubectl get svc --all-namespaces
    以下のような出力結果を確認できるはずです。

Install Jenkins X on an Existing OKE Cluster

既存のOKEクラスタがある場合、jxコマンドを使ってJenkins Xをインストールできます。
  1. まず、以下のコマンドを実行して環境の準備をします。
    chmod +x ~/get-kubeconfig.sh
    
    export ENDPOINT=containerengine.us-phoenix-1.oraclecloud.com
    
    ~/get-kubeconfig.sh ocid1.cluster.oc1.phx.rdsztcmnstcnjsgy4taytcmctdqyrzheyw > ~/kubeconfig
    
    export KUBECONFIG=~/kubeconfig
    
    git config --global user.email  "user.name@gmail.com"
    
    git config --global user.name "userName"
  2. jxがどのOCIリソースを使うのかわかるよう、oci configファイルを構成します。CLIはこの時点ではインストールされません(実行中にインストールされます)。
    mkdir ~/.oci
    vi ~/.oci/config
    vi ~/.oci/oci_api_key.pem
    chmod 600 ~/.oci/config ~/.oci/oci_api_key.pem
  3. kubeconfig ファイルをエクスポートします。
    export KUBECONFIG=~/kubeconfig
  4. まだインストールしていない場合は、Gitをインストールします。
    sudo yum install git -y
  5. kubectlをインストールします。
    curl -LO https://storage.googleapis.com/kubernetes-release/release/$(curl -s https://storage.googleapis.com/kubernetes-release/release/stable.txt)/bin/linux/amd64/kubectl
    chmod +x ./kubectl
    sudo mv ./kubectl /usr/local/bin/kubectl
  6. jxコマンドラインツールをインストールします。Linux以外のOSにインストールする場合、以下のインストール手順を確認してください。
    Get jx
    https://jenkins-x.io/getting-started/install/
    curl -L https://github.com/jenkins-x/jx/releases/download/v1.3.52/jx-linux-amd64.tar.gz | tar xzv
    sudo mv jx /usr/local/bin
  7. Helmクライアントをインストールし、すでにOKEクラスタにHelmサーバのtillerがインストールされていれば、それと会話できるようにします。
    wget https://storage.googleapis.com/kubernetes-helm/helm-v2.9.1-linux-amd64.tar.gz
    tar -xvf helm-v2.9.1-linux-amd64.tar.gz
    cp linux-amd64/helm /usr/local/bin/
    helm init
  8. jxを使ってJenkins Xをインストールします。
    jx install --provider=oke
    インストールには数分かかります。この間に、GitHubのユーザー名のような必要なパラメータを設定できます。インストール完了後、2個のパイプライン(stagingとproduction)がJenkinsダッシュボード上に生成され、コードがGitHubにチェックインされます。


Other Jenkins X Options

ここまでで、Jenkins XをOKE上で実行するためのjx createやjx installコマンドを見てきました。任意の言語でプロジェクトを素早く立ち上げたり(jxは多言語の統合に対応しています)、パイプラインを構築したりするのが簡単になるようなjxコマンドがいくつかあります。

既存のプロジェクトで以下のコマンドを実行すると、いま取り組んでいるプロジェクトの種類を迅速にjxコマンドが検知します(例えば、Spring BootとかJHipsterとか、といった具合です)
jx import <app_name>
以下のアクションも実行します。
  • ビルドパイプラインの作成
  • (GirHubの資格証明を使い)GitHubのようなリモートのGitサービスにプロジェクトの設定と、必要なWebhookの作成
  • Helm ChartやMonocularといったKubernetes固有のツールのインストール
  • 最終的にビルドを実行して、ステージング環境にデプロイ
この時点で何も問題ないようでしたら、以下のコマンドを使ってこのビルドを本番環境に移行できます。
jx promote --env production --version 1.0.1 <app_name>
既存のプロジェクトがない場合、組み込みのCI/CD(jxコマンドを利用)を使ってプロジェクトを立ち上げるなら、(再度ですが)jx createを使うのが最も簡単ですが、例えばSpring Bootアプリケーションを作成したい場合、生成されたコードをGitリポジトリにインポートし、JenkinsをCI/CDで利用し、以下のコマンドを実行します。
jx create spring [flags]
このコマンドは以下の操作を実行します。
  • デフォルトの新しいSpring Bootアプリケーションを作成
  • コードをGitリポジトリにチェックイン
  • リモートのGitリポジトリ(GitHubなど)にコードをプッシュ
  • Dockerfile、jenkinsfile、Helm Chartのdefaultを追加
  • ビルドを実行し、staging環境にデプロイ

More Information

0 件のコメント:

コメントを投稿