ノート:

OCI DevOpsパイプラインを作成して、Golangマイクロサービスを構築およびデプロイします。

イントロダクション

これは、OCI SDK、OCI-CLI、リソース・マネージャ、OCI DevopsおよびHelmを使用してApache Airflowをデプロイおよび破棄する方法を表すGolangマイクロサービスを使用して、OKEクラスタにリソースの一時セットをデプロイする方法を示す6つのパート・チュートリアル・シリーズの4つの一部です。

目標

このチュートリアルでは、ビルドおよびデプロイ用のOCI DevOpsパイプラインを作成する方法について学習します。

前提条件

タスク1: go-loginコードの確認

注意
コードはすでに、この演習の前のステップでgo-loginというOCIリポジトリにアップロードされています。

T1_1

タスク2: go-microservicesコードの確認

注意
コードはすでに、この演習の前のステップでgo-microserviceというOCIリポジトリにアップロードされています。

T2_1

タスク3: go-loginおよびgo-microserviceのDevOpsアーティファクトの作成

DevOpsビルド・パイプラインを作成する前に、ビルド結果(Helmパッケージおよびコンテナ・イメージ)に接続するアーティファクトを作成する必要があります。

  1. このチュートリアルで作成したOCIレジストリに移動します。

    T3_1

  2. DevOpsプロジェクトの下のアーティファクトをクリックし、「アーティファクトの追加」をクリックして、「コンテナ・イメージ・リポジトリ」と入力します。

    T3_2

    レジストリURLに関する重要なノート:

    T3_2

    • これは、リージョンsa-saopaulo-1のレジストリのベースです。

    • "sa-saopaulo-1"を使用していない場合は、リージョン・コードを確認してください。詳細は、リージョンおよび可用性ドメインを参照してください。

    T3_2

  3. ステップ2を繰り返して、go-microserviceアーティファクトを追加します。

    T3_2

  4. コード・リポジトリからvalues.yamlファイルのコンテンツを貼り付けて、go-loginのHelm値を格納する新しい汎用アーティファクトを作成します。

    T3_4

  5. コード・リポジトリからvalues.yamlファイルのコンテンツを貼り付けて、go-microserviceのHelm値を格納する新しい汎用アーティファクトを作成します。

    T3_5

  6. go-login用の新しいHelmチャート・タイプ・アーティファクトを作成します。チャートURLに正しいネームスペースおよびリージョン・コードを設定する必要があります。

    T3_6

  7. go-microserviceの新しいHelmチャート・タイプ・アーティファクトを作成します。チャートURLに正しいネームスペースおよびリージョン・コードを設定する必要があります。

    T3_7

この時点で、DevOpsプロジェクトに次のアーティファクトが必要です。

T3_7

タスク4: go-login用のDevopsビルド・パイプラインの作成

  1. DevOpsプロジェクトのコンソール・ページに移動し、作成したDevOpsプロジェクトを選択します。

  2. 「ビルド・パイプライン」を選択し、「ビルド・パイプラインの作成」をクリックして名前と説明を入力し、「作成」をクリックします。

    T4_2

  3. 「ステージの追加」をクリックし、「マネージド・ビルド」を選択します。

    T4_2

    T4_2

  4. 「プライマリ・コード・リポジトリ」で、go-loginのOCIリポジトリを選択します。

    T4_4

    • レポを確認し、「追加」を選択してクリックします。
  5. ビルド・パイプラインに新しいステージを追加して、アーティファクトをレジストリに公開します。「アーティファクトの配信」オプションを選択し、前のステップで作成したgo-login-imageアーティファクトを選択します。

    T4_5

    T4_5

パイプラインは次のようになります。

T4_5

タスク5: go-microserviceのDevOpsビルド・パイプラインの作成

  1. DevOpsプロジェクトのコンソール・ページに移動し、作成したDevOpsプロジェクトを選択します。

  2. 「ビルド・パイプライン」を選択し、「ビルド・パイプラインの作成」をクリックして名前と説明を入力し、「作成」をクリックします。

    T4_2

  3. 「ステージの追加」をクリックし、「マネージド・ビルド」を選択します。

    T4_2

    T4_2

  4. 「プライマリ・コード・リポジトリ」で、go-microserviceのOCIリポジトリを選択します。

    T4_4

    • レポを確認し、「追加」を選択してクリックします。
  5. ビルド・パイプラインに新しいステージを追加して、アーティファクトをレジストリに公開します。「アーティファクトの配信」オプションを選択し、前のステップで作成したgo-microservice-imageアーティファクトを選択します。

    T4_5

    T4_5

パイプラインは次のようになります。

T4_5

タスク6: ビルド・パイプライン{build_spec.yaml} - go-login

build_specファイルは、ビルド・パイプラインの実行中に実行するステップを説明するyamlファイルです。クラウド・ビルド・ランナーで実行され、クラウド・ネイティブ・アプリケーションの一般的な言語の大部分をサポートしています。このファイルは、OCIのgo-loginリポジトリ・コードのルートにあります。このファイルはVAULTの一部の変数を使用し、チュートリアルのVault ocidに変更する必要があります。

ビルド仕様の詳細は、ビルド仕様を参照してください。

次の2つの変数を設定する必要があります。

  1. ボールト・シークレットに移動し、各シークレットのOCIDを取得します。

    T6_1

  2. プロジェクト・リポジトリに移動し、go-login用のssh urlを取得します。

    T6_2

    • build_spec.yamlファイルを更新し、コピーしたOCIDシークレットで値を置き換えてから、コードの変更をコミットします。

      T6_2

  3. 要塞ジャンプ・ボックス・シェル・コンソールに移動します。

    cd $HOME
    # If you still have the old go-login.git and go-microservices.git directory, delete it!
    rm -rf go-login.git
    rm -rf go-microservice.git
    git clone <your ssh url for the repo>
    cd go-login/
    vi build_spec.yaml
    #perform the needed changes for your ocid variables and save the file.
    git add .
    git commit -m "fixed ocid variables"
    git push
    

    T6_3

    T6_3

  4. DevOpsプロジェクトのgo-loginビルド・パイプラインに移動し、「パラメータ」タブを選択して次の新しいパラメータを追加します。

    • HELM_REPO: OCIレジストリxxx.ocir.ioのベース。
    • HELM_REPO_URL: 関連するHelmチャートのOCIレジストリURL。
    • APP_HOST: ホストは、イングレス・コントローラ上のアプリケーションへのアクセスに使用されます。
    • IMAGE_URL: タグのないOCIレジストリ・イメージURL。

    T6_4

  5. 「ビルド・パイプライン」タブをクリックし、「手動実行の開始」をクリックします。

    T6_5

    T6_5

    • ご覧のとおり、ビルドはOCIレジストリへのイメージ・プッシュとともに正常に完了しました。

      T6_5

  6. OCIコンテナ・レジストリに移動し、そこにイメージがあるかどうかを確認します。

    T6_5

タスク7: go-microserviceのOCI資格証明の設定

go-microservicesは、SDKを使用してOCIと対話するため、これを可能にするには、正しい資格証明を設定する必要があります。このチュートリアルの前のステップで要塞の設定中にOCI CLIを設定するために使用した類似の情報を使用します。

必要なすべての資格証明がOKE configmapに格納され、実行中のコンテナ内の環境変数に注入されます。

T7_0

  1. OCIリポジトリに移動し、go-microserviceリポジトリのssh urlを取得します。

    T7_1

  2. OKEクラスタのコンソール・ページに移動し、クラスタocidをコピーして、次のステップでENV_CLUSTER_ID env変数のコマンドで置き換えます。

    T7_2

  3. 要塞ジャンプボックス・シェル・ターミナルを開きます。~/.oci/oci_api_key.pemでSSHキーが作成されていることを確認します。ENV_CLUSTER_ID変数を除き、他のすべての変数は、OCI CLIを以前に設定した要塞ホストの下の~/.oci/configファイルにあります

    cat ~/.oci/config
    

    T7_2

  4. 次のシェル・コマンド・リストでは、実行中のコンテナに注入する必要があるすべての変数を含む新しいconfigmap/values.yamlファイルが作成され、OCI上のコード・リポジトリにプッシュされます。要塞ホスト・ターミナルでコマンドを実行する前に、次の値「PASTE YOUR...」を置き換えます。

    cd $HOME
    rm -rf go-microservice/
    git clone <PAST YOUR ssh url>
    cd go-microservice/chart-go-microservice/configmap/
    rm values.yaml
    pem=$(cat ~/.oci/oci_api_key.pem|base64 -w 0)
    echo 'ENV_PEM: "'$pem'"' > values.yaml
    echo 'ENV_TENANCY_OCID: "PASTE YOUR TENANCY OCID"' >> values.yaml
    echo 'ENV_USER_OCID: "PASTE YOUR USER OCID"' >> values.yaml
    echo 'ENV_REGION: "PASTE YOUR REGION NAME"' >> values.yaml
    echo 'ENV_FINGERPRINT: "PASTE YOUR FINGERPRINT"' >> values.yaml
    echo 'ENV_CLUSTER_ID: "PASTER YOUR CLUSTER OCID"' >> values.yaml
    cd $HOME/go-microservice
    git add .
    git commit -m "added correct values on configmap"
    git push
    

    T7_3

    T7_3

これで、go-microserviceがSDKを使用してOCIと通信できるようになりました。

タスク8: ビルド・パイプライン{build_spec.yaml} - go-microservices

build_specファイルは、ビルド・パイプラインの実行中に実行するステップを説明するyamlファイルです。クラウド・ビルド・ランナーで実行され、クラウド・ネイティブ・アプリケーションの一般的な言語の大部分をサポートしています。このファイルは、OCI上のgo-microserviceリポジトリ・コードのルートにあります。このファイルはVAULTの一部の変数を使用し、チュートリアルのVault ocidに変更する必要があります。

ビルド仕様の詳細は、ビルド仕様を参照してください。

次の2つの変数を設定する必要があります。

  1. ボールト・シークレットに移動し、各シークレットのOCIDを取得します。

    T6_1

  2. プロジェクト・リポジトリに移動し、go-loginのssh URLを取得します。

    T6_2

    • build_spec.yamlファイルを更新し、コピーしたOCIDシークレットで値を置換してから、コードの変更をコミットする必要があります。

    T6_2

  3. 要塞ジャンプ・ボックス・シェル・コンソールに移動します。

    cd $HOME
    # If you still have the old go-login.git and go-microservices.git directory, delete it!
    rm -rf go-login.git
    rm -rf go-microservice.git
    git clone <your ssh url for the repo>
    cd go-microservice/
    vi build_spec.yaml
    #perform the needed changes for your ocid variables and save the file.
    git add .
    git commit -m "fixed ocid variables"
    git push
    

    T8_3

    T8_3

  4. Devopsプロジェクトでgo-microserviceビルド・パイプラインに移動し、「パラメータ」タブを選択して新しいパラメータを追加します。

    • HELM_REPO: OCIレジストリxxx.ocir.ioのベース。
    • HELM_REPO_URL: 関連するHelmチャートのOCIレジストリURL。
    • APP_HOST: ホストは、イングレス・コントローラ上のアプリケーションへのアクセスに使用されます。
    • IMAGE_URL: タグのないOCIレジストリ・イメージURL。

    T6_4

  5. 「ビルド・パイプライン」タブをクリックし、「手動実行の開始」をクリックします。

    T8_5

    T8_5

    • ご覧のとおり、ビルドはOCIレジストリへのイメージ・プッシュとともに正常に完了しました。

      T8_5

  6. OCIコンテナ・レジストリに移動し、そこにイメージがあるかどうかを確認します。

    T8_5

タスク9: デプロイメントを受信するためのOKEの準備

このチュートリアルでは、go-loginおよびgo-microservicesのOKEネームスペースを手動で作成します。また、シークレットを使用して、各ネームスペース内にOCIコンテナ・レジストリ資格証明を設定する必要もあります。これが不要な場合は、デプロイメントでレジストリからコンテナ・イメージをフェッチできません。

  1. ボールトに格納したOCIレジストリからプレーン・テキストのトークンとユーザー名を取得します。

    T9_1

  2. 要塞ジャンプボックス・シェル・コンソールを開き、次のコマンドを実行します。

    ノート: 次のコマンドの変数を前のステップで取得した資格証明に置換し、リージョンgru.ocir.ioに基づいて正しいdocker-serverも確認してください。

     cd $HOME
     kubectl get ns
     kubectl create ns go-login
     kubectl create ns go-microservices
     kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-login
     kubectl create secret docker-registry docker-registry --docker-server=gru.ocir.io --docker-username='your_user_name' --docker-password='your_token' --docker-email='user-email' -n go-microservices
    
    
    • 次に、イングレス・コントローラをデプロイして、インターネットを介してマイクロサービスにアクセスできるようにします。公式のイングレス・イメージをバージョンv1.4.0で使用しています。

       kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v1.4.0/deploy/static/provider/cloud/deploy.yaml
       kubectl scale --replicas=4 deployment ingress-nginx-controller -n ingress-nginx
      
      

      T9_2

      T9_2

    • 次に、イングレス・サービスが適切かどうかを確認します。次のようになります。

      kubectl get svc -n ingress-nginx
      

      T9_2

    • ingress-nginxを作成すると、新しいロード・バランサがOCIに自動的に作成されます。次に、ロード・バランサ・シェイプを低価格シェイプに更新し、追加コストを回避します。

  3. コンソールに移動し、「ネットワーキング」「ロード・バランサ」を選択し、新しく作成したロード・バランサを選択します。

    T9_3

  4. クリックしてSHAPEを更新し、「フレキシブルLoad Balancerの使用」チェック・ボックスを選択します。

    T9_4

タスク10: 新しいOCI DevOps環境の作成

アプリケーションをデプロイするには、環境を作成する必要があります。

  1. DevOpsプロジェクトを選択し、「環境」をクリックして、「環境の作成」をクリックします。

    T10_1

    T10_1

タスク11: Helmチャートを使用したOCI DevOpsへのgo-loginのデプロイ

  1. Devopsプロジェクトに移動し、「デプロイメント・パイプライン」をクリックしてgo-loginの新しいパイプラインを作成します。

    T11_1

  2. クリックしてデプロイする新しいステージを追加し、「HelmチャートをKubernetesクラスタにインストール」を選択し、ヘルム・アーティファクトとgo-loginの値アーティファクトを選択します。go-loginとして名前空間名を入力してください。

    T11_2

  3. ビルド完了後にデプロイを自動的に開始するトリガーをビルド・パイプラインに作成します。

    1. Devopsプロジェクトの下のgo-loginビルド・パイプラインに移動し、「ステージの追加」をクリックします。

    2. 「デプロイメントのトリガー」を選択し、「デプロイメント・パイプラインの選択」をクリックして、「go-login-deploy」を選択します。

      T11_3

  4. 「手動実行の開始」をクリックして、パイプラインをテストします。

    T11_4

    T11_4

  5. 「プロジェクトをDevops」ページで、「デプロイメント」をクリックして実行中のデプロイメント・ステータスを確認します。

    T11_5

タスク12: ログイン・デプロイメントの確認

  1. 要塞ホスト端末に移動し、次を確認します:

    • ポッド・ヘルスを確認します。

      kubectl get pod -n go-login
      
    • アプリケーションのイングレス・ホストおよびアドレスを確認します。

      kubectl get ingress -n go-login
      

      T12_1

    • このデプロイメントでは、ホスト名に対するイングレス制御ルーティング・トラフィックが使用されるため、URLの一部として正しいホスト名を使用してサービスをコールする必要があります。

    • このチュートリアルでは、SSL証明書を使用しませんでした。サービスを呼び出すには、ラップトップのローカル/etc/hostsに、そのための適切なDNSルートを含める必要があります。これは本番環境では使用しないでください

    • 外部IPアドレスをノートにとり、/etc/hostsにエントリを追加します。

       sudo vi /etc/hosts
      
      
    • ファイル末尾に新しい行を追加します。

      your.ip.aaa.xx go-login.superocilab.com
      
    • 次のコマンドを実行します

      cat /etc/hosts
      
    • /etc/hostsは次のようになります。

      T12_1

  2. これで、curlを使用して go-loginサービスを呼び出して、/loginエンドポイントを呼び出してjwt TOKENを生成できるようになりました。

    curl http://go-login.superocilab.com
    curl http://go-login.superocilab.com/login
    

    T12_1

タスク13: Helmチャートを使用したOCI Devopsへのgo-microserviceのデプロイ

  1. Devopsプロジェクトに移動し、「デプロイメント・パイプライン」をクリックしてgo-microserviceの新しいパイプラインを作成します。

    T13_1

  2. クリックしてデプロイする新しいステージを追加し、「KubernetesクラスタへのHelmチャートのインストール」を選択し、go-microserviceのhelmアーティファクトと値アーティファクトを選択します。ネームスペース名をgo-microservicesとして入力してください。

    T13_2

  3. ビルド完了後にデプロイを自動的に開始するトリガーをビルド・パイプラインに作成します。

    1. Devopsプロジェクトの下のgo-microserviceビルド・パイプラインに移動し、「ステージの追加」をクリックします。

    2. 「デプロイメントのトリガー」を選択し、「デプロイメント・パイプラインの選択」「go-microservice-deploy」の順に選択します。

    T13_3

    T13_3

  4. 「手動実行の開始」をクリックして、パイプラインをテストします。

    T13_4

    T13_4

  5. 「プロジェクトをDevops」ページで、「デプロイメント」をクリックして実行中のデプロイメント・ステータスを確認します。

    T11_5

タスク14: go-microserviceデプロイメントの確認

  1. 要塞ホスト・ターミナルに移動し、次の詳細を確認します:

    • ポッド・ヘルスを確認します。

      kubectl get pod -n go-microservices
      
    • アプリケーションのイングレス・ホストおよびアドレスを確認します。

      kubectl get ingress -n go-microservices
      

      T14_1

    • このデプロイメントでは、ホスト名に対するイングレス制御ルーティング・トラフィックが使用されるため、URLの一部として正しいホスト名を使用してサービスをコールする必要があります。

    • このチュートリアルでは、SSL証明書を使用しませんでした。サービスを呼び出すには、ラップトップのローカル/etc/hostsに、そのための適切なDNSルートを含める必要があります。これは本番環境では使用しないでください

    • 外部IPアドレスを書き留めて、/etc/hostsにエントリを追加します(ローカル・マシンにも追加できます)。

       sudo vi /etc/hosts
      
      
    • ファイル末尾に新しい行を追加します。

      your.ip.aaa.xx go-microservice.superocilab.com
      
    • 次のコマンドを実行します

      cat /etc/hosts
      
    • /etc/hostsは次のようになります。

      T14_1

これで、go-microserviceサービスを呼び出すことができます。

curl curl http://go-microservice.superocilab.com

T14_1

次のステップ

この学習パスの次のチュートリアルに進むには、ここをクリックしてください。

謝辞

その他の学習リソース

docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。

製品ドキュメントについては、Oracle Help Centerを参照してください。