ノート:
- このチュートリアルではOracle Cloudへのアクセスが必要です。無料アカウントにサインアップするには、Oracle Cloud Infrastructure Free Tierの開始を参照してください。
- Oracle Cloud Infrastructure資格証明、テナンシおよびコンパートメントの値の例を使用します。演習を完了する場合は、これらの値をクラウド環境に固有の値に置き換えてください。
OCI DevOpsパイプラインを作成して、Golangマイクロサービスを構築およびデプロイします。
イントロダクション
これは、OCI SDK、OCI-CLI、リソース・マネージャ、OCI DevopsおよびHelmを使用してApache Airflowをデプロイおよび破棄する方法を表すGolangマイクロサービスを使用して、OKEクラスタにリソースの一時セットをデプロイする方法を示す6つのパート・チュートリアル・シリーズの4つの一部です。
目標
このチュートリアルでは、ビルドおよびデプロイ用のOCI DevOpsパイプラインを作成する方法について学習します。
前提条件
- この学習パスの前のチュートリアル第3/6部- OCI Devopsプロジェクトの作成、マイクロサービスの権限とコード・リポジトリの設定を完了します。
タスク1: go-loginコードの確認
-
このマイクロサービスは、JWTトークンを作成してユーザーに返すために使用されるGolangのサンプル・コードです。このトークンは、go-microservicesによってコールを認証するために使用されます。これは、このチュートリアルのセキュリティを確保するための簡単な認証方法です。
-
このリポジトリには、Helmチャート、Dockerfile、
build_spec.yamlなど、OCI DevOpsサービスを使用してOKEにデプロイするために必要なすべてのファイルが含まれています。
注意
コードはすでに、この演習の前のステップでgo-loginというOCIリポジトリにアップロードされています。

タスク2: go-microservicesコードの確認
-
このマイクロサービスは、次のタスクを実行するためのサンプル・コードです:
メソッド 摘要 /oci-init このルートは、OCIリソース・マネージャでスタック適用ジョブを実行します。これにより、terraformを実行してクラスタOKE上に新しいnode-poolが作成されます。また、OCI Devopsビルド・パイプラインを起動して、新しいノードに通気をインストールします。 /oci-destroy これにより、OKEのエアフロー・デプロイメントが削除され、リソース・マネージャでスタック破棄が実行されて追加のノード・プールが削除されます -
このリポジトリには、Helmチャート、Dockerfile、
build_spec.yamlなど、OCI DevOpsサービスを使用してOKEにデプロイするために必要なすべてのファイルが含まれています。
注意
コードはすでに、この演習の前のステップでgo-microserviceというOCIリポジトリにアップロードされています。

タスク3: go-loginおよびgo-microserviceのDevOpsアーティファクトの作成
DevOpsビルド・パイプラインを作成する前に、ビルド結果(Helmパッケージおよびコンテナ・イメージ)に接続するアーティファクトを作成する必要があります。
-
このチュートリアルで作成したOCIレジストリに移動します。

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

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

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

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

-
コード・リポジトリから
values.yamlファイルのコンテンツを貼り付けて、go-loginのHelm値を格納する新しい汎用アーティファクトを作成します。
-
コード・リポジトリから
values.yamlファイルのコンテンツを貼り付けて、go-microserviceのHelm値を格納する新しい汎用アーティファクトを作成します。
-
go-login用の新しいHelmチャート・タイプ・アーティファクトを作成します。チャートURLに正しいネームスペースおよびリージョン・コードを設定する必要があります。

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

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

タスク4: go-login用のDevopsビルド・パイプラインの作成
-
DevOpsプロジェクトのコンソール・ページに移動し、作成したDevOpsプロジェクトを選択します。
-
「ビルド・パイプライン」を選択し、「ビルド・パイプラインの作成」をクリックして名前と説明を入力し、「作成」をクリックします。

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


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

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


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

タスク5: go-microserviceのDevOpsビルド・パイプラインの作成
-
DevOpsプロジェクトのコンソール・ページに移動し、作成したDevOpsプロジェクトを選択します。
-
「ビルド・パイプライン」を選択し、「ビルド・パイプラインの作成」をクリックして名前と説明を入力し、「作成」をクリックします。

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


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

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


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

タスク6: ビルド・パイプライン{build_spec.yaml} - go-login
build_specファイルは、ビルド・パイプラインの実行中に実行するステップを説明するyamlファイルです。クラウド・ビルド・ランナーで実行され、クラウド・ネイティブ・アプリケーションの一般的な言語の大部分をサポートしています。このファイルは、OCIのgo-loginリポジトリ・コードのルートにあります。このファイルはVAULTの一部の変数を使用し、チュートリアルのVault ocidに変更する必要があります。
ビルド仕様の詳細は、ビルド仕様を参照してください。
次の2つの変数を設定する必要があります。
-
HELM_REPO_USER: Vaultにシークレットとして格納したユーザー名。 -
USER_AUTH_TOKEN: ボールトに格納されているユーザーの認可トークン。
-
ボールト・シークレットに移動し、各シークレットのOCIDを取得します。

-
プロジェクト・リポジトリに移動し、go-login用の
ssh urlを取得します。
-
build_spec.yamlファイルを更新し、コピーしたOCIDシークレットで値を置き換えてから、コードの変更をコミットします。

-
-
要塞ジャンプ・ボックス・シェル・コンソールに移動します。
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

-
DevOpsプロジェクトのgo-loginビルド・パイプラインに移動し、「パラメータ」タブを選択して次の新しいパラメータを追加します。
HELM_REPO: OCIレジストリxxx.ocir.ioのベース。HELM_REPO_URL: 関連するHelmチャートのOCIレジストリURL。APP_HOST: ホストは、イングレス・コントローラ上のアプリケーションへのアクセスに使用されます。IMAGE_URL: タグのないOCIレジストリ・イメージURL。

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


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

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

タスク7: go-microserviceのOCI資格証明の設定
go-microservicesは、SDKを使用してOCIと対話するため、これを可能にするには、正しい資格証明を設定する必要があります。このチュートリアルの前のステップで要塞の設定中にOCI CLIを設定するために使用した類似の情報を使用します。
必要なすべての資格証明がOKE configmapに格納され、実行中のコンテナ内の環境変数に注入されます。

-
OCIリポジトリに移動し、go-microserviceリポジトリの
ssh urlを取得します。
-
OKEクラスタのコンソール・ページに移動し、クラスタocidをコピーして、次のステップで
ENV_CLUSTER_IDenv変数のコマンドで置き換えます。
-
要塞ジャンプボックス・シェル・ターミナルを開きます。~/.oci/oci_api_key.pemでSSHキーが作成されていることを確認します。ENV_CLUSTER_ID変数を除き、他のすべての変数は、OCI CLIを以前に設定した要塞ホストの下の~/.oci/configファイルにあります
cat ~/.oci/config
-
次のシェル・コマンド・リストでは、実行中のコンテナに注入する必要があるすべての変数を含む新しい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

これで、go-microserviceがSDKを使用してOCIと通信できるようになりました。
タスク8: ビルド・パイプライン{build_spec.yaml} - go-microservices
build_specファイルは、ビルド・パイプラインの実行中に実行するステップを説明するyamlファイルです。クラウド・ビルド・ランナーで実行され、クラウド・ネイティブ・アプリケーションの一般的な言語の大部分をサポートしています。このファイルは、OCI上のgo-microserviceリポジトリ・コードのルートにあります。このファイルはVAULTの一部の変数を使用し、チュートリアルのVault ocidに変更する必要があります。
ビルド仕様の詳細は、ビルド仕様を参照してください。
次の2つの変数を設定する必要があります。
-
HELM_REPO_USER: Vaultにシークレットとして格納したユーザー名。 -
USER_AUTH_TOKEN: ボールトに格納されているユーザーの認可トークン。
-
ボールト・シークレットに移動し、各シークレットのOCIDを取得します。

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

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

-
要塞ジャンプ・ボックス・シェル・コンソールに移動します。
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

-
Devopsプロジェクトでgo-microserviceビルド・パイプラインに移動し、「パラメータ」タブを選択して新しいパラメータを追加します。
HELM_REPO: OCIレジストリxxx.ocir.ioのベース。HELM_REPO_URL: 関連するHelmチャートのOCIレジストリURL。APP_HOST: ホストは、イングレス・コントローラ上のアプリケーションへのアクセスに使用されます。IMAGE_URL: タグのないOCIレジストリ・イメージURL。

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


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

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

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

-
要塞ジャンプボックス・シェル・コンソールを開き、次のコマンドを実行します。
ノート: 次のコマンドの変数を前のステップで取得した資格証明に置換し、リージョン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

-
次に、イングレス・サービスが適切かどうかを確認します。次のようになります。
kubectl get svc -n ingress-nginx
-
ingress-nginxを作成すると、新しいロード・バランサがOCIに自動的に作成されます。次に、ロード・バランサ・シェイプを低価格シェイプに更新し、追加コストを回避します。
-
-
コンソールに移動し、「ネットワーキング」で「ロード・バランサ」を選択し、新しく作成したロード・バランサを選択します。

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

タスク10: 新しいOCI DevOps環境の作成
アプリケーションをデプロイするには、環境を作成する必要があります。
-
DevOpsプロジェクトを選択し、「環境」をクリックして、「環境の作成」をクリックします。


タスク11: Helmチャートを使用したOCI DevOpsへのgo-loginのデプロイ
-
Devopsプロジェクトに移動し、「デプロイメント・パイプライン」をクリックしてgo-loginの新しいパイプラインを作成します。

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

-
ビルド完了後にデプロイを自動的に開始するトリガーをビルド・パイプラインに作成します。
-
Devopsプロジェクトの下のgo-loginビルド・パイプラインに移動し、「ステージの追加」をクリックします。
-
「デプロイメントのトリガー」を選択し、「デプロイメント・パイプラインの選択」をクリックして、「go-login-deploy」を選択します。

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


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

タスク12: ログイン・デプロイメントの確認
-
要塞ホスト端末に移動し、次を確認します:
-
ポッド・ヘルスを確認します。
kubectl get pod -n go-login -
アプリケーションのイングレス・ホストおよびアドレスを確認します。
kubectl get ingress -n go-login
-
このデプロイメントでは、ホスト名に対するイングレス制御ルーティング・トラフィックが使用されるため、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は次のようになります。

-
-
これで、curlを使用して go-loginサービスを呼び出して、/loginエンドポイントを呼び出してjwt TOKENを生成できるようになりました。
curl http://go-login.superocilab.com curl http://go-login.superocilab.com/login
タスク13: Helmチャートを使用したOCI Devopsへのgo-microserviceのデプロイ
-
Devopsプロジェクトに移動し、「デプロイメント・パイプライン」をクリックしてgo-microserviceの新しいパイプラインを作成します。

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

-
ビルド完了後にデプロイを自動的に開始するトリガーをビルド・パイプラインに作成します。
-
Devopsプロジェクトの下のgo-microserviceビルド・パイプラインに移動し、「ステージの追加」をクリックします。
-
「デプロイメントのトリガー」を選択し、「デプロイメント・パイプラインの選択」、「go-microservice-deploy」の順に選択します。


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


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

タスク14: go-microserviceデプロイメントの確認
-
要塞ホスト・ターミナルに移動し、次の詳細を確認します:
-
ポッド・ヘルスを確認します。
kubectl get pod -n go-microservices -
アプリケーションのイングレス・ホストおよびアドレスを確認します。
kubectl get ingress -n go-microservices
-
このデプロイメントでは、ホスト名に対するイングレス制御ルーティング・トラフィックが使用されるため、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は次のようになります。

-
これで、go-microserviceサービスを呼び出すことができます。
curl curl http://go-microservice.superocilab.com

次のステップ
この学習パスの次のチュートリアルに進むには、ここをクリックしてください。
関連リンク
謝辞
- 作成者 - Joao Tarla(Oracle LAD Aチーム・ソリューション・エンジニア)
その他の学習リソース
docs.oracle.com/learnで他のラボをご覧いただくか、Oracle Learning YouTubeチャネルでより無料のラーニング・コンテンツにアクセスしてください。また、education.oracle.com/learning-explorerにアクセスして、Oracle Learning Explorerになります。
製品ドキュメントについては、Oracle Help Centerを参照してください。
Create OCI DevOps pipelines to build and deploy the Golang microservices
F79787-01
April 2023
Copyright © 2023, Oracle and/or its affiliates.