はじめに
こちらの記事は、Oracle Cloud Infrastructure Advent Calendar 2021 Day 5 の記事として書かれています。カレンダー 2 の 3 日目に OracleCloudでJenkinsCI/CDデプロイ環境作成という記事がありましたが、私の方では OCI Native な CI/CD サービスについて書きたいと思います。
OKE の方はきっと誰かが書いてくれることを信じて私の方では Oracle Functions に特化した内容で書きます。内容が結構ボリューミーになりそうなので全 2 回に分けて書こうと思います。
2022/01/19 追記: Oracle Cloud Infrastructure(OCI) DevOpsことはじめ
OCI Tutorials に DevOps & OKE のハンズオンが追加されたので、OKE で同様の事を実施したい場合はこちらをご参照ください。
- 事前準備編 ← 本記事はこれ
- ビルド、デプロイメント・パイプライン作成編
本記事は、事前準備編です。
今回作る環境
全 2 回を通してこのような環境を作ってみます。
ソースコード本体は、コミュニケーション機能(Issue, Wiki, etc.)が充実している GitHub, GitLab で管理し、バックアップを取るためにソースコードを Code Repository へミラーリングする実際の開発現場でよく取られそうな構成です。
実際に作ってみる
前提
以下の前提で書いていきたいと思います。
- DevOps サービスを使用する前提条件を満たしていること
- テナンシへのアクセス権を有していること、ポリシー関連の設定が完了していること
- GitHub/GitLab のアカウントを有していること
- 本記事では、GitHub 前提で書きますが GitLab でも読み替えれば同じように実施可能です
- Fn CLI, Oracle Functions のセットアップが済んでいること
- 完了していない場合は、Fn Project ハンズオン, Oracle Functions ハンズオンを参考にセットアップを行ってください
GitHub 側の設定
Personal Access Token(PAT)を発行する
OCI DevOps から作成した外部リポジトリ(GitHub)へアクセスするために Personal Access Token(以下、PAT)を発行します。GitHub で、Settings > Developer settings > Personal Access Token とアクセスし、Generate new token をクリックします。
以下のように設定し、PAT を発行します。
- Note: OCI DevOps
- Expiration: No expiration
- 簡易的に無期限に設定していますが、気になる方は適当な期限に設定すると良いでしょう
- Select scopes: repo にチェック
発行されると、トークンの文字列が表示されるのでメモ帳などに控えておきます。(再度表示されないので、コピーし忘れた方は再発行してください)
これで、GitHub 側の設定は完了です!
OCI 側の設定
OCI Vault に PAT と認証トークンを格納する
事前の手順までに生成した PAT を OCI Vault のシークレットに格納します。OCI コンソール左上のハンバーガーメニューからアイデンティティとセキュリティ > ボールトと選択します。
ボールトの作成をクリックし、以下のように入力して、Vault を新規に作成します。
- 名前: devops-vault
- 便宜上名前を定めているだけなので、自由に命名してください
作成が完了したら、ボールトの詳細画面からマスター暗号キーを作成します。リソースからマスター暗号化キーを選択し、キーの作成をクリックします。
以下のように入力し、マスター暗号化キーを作成します。
- 保護モード: HSM
- 名前: devops-master-key
- キーのシェイプ - アルゴリズム: AES
- キーのシェイプ - 長さ: 256 ビット
次に、ボールトの詳細画面からシークレットを作成します。リソースからシークレットを選択し、シークレットの作成をクリックします。
以下のように入力し、シークレット(github_pat)を作成します。
github_pat:
- コンパートメント: 任意のコンパートメント(OCI DevOps や Oracle Functions のリソースが含まれているコンパートメント)
- 名前: github_pat
- 暗号化キー: 前述の手順で作成したマスター暗号化キー(devops-master-key)を選択する
- シークレット・タイプのテンプレート: プレーン・テキスト
- シークレット・コンテンツ: 発行済みの PAT(Personal Access Token)を入力する
これで、今回使用する Vault の設定は完了です。
OCIR にリポジトリを作成する
ビルドした関数コードの Docker Image が格納されるリポジトリを OCIR に作成します。OCI コンソール左上のハンバーガーメニューから開発者サービス > コンテナ・レジストリと選択します。
リポジトリの作成をクリックし、以下のように入力し新規にリポジトリを作成します。
- コンパートメント: 任意のコンパートメント(OCI DevOps や Oracle Functions のリソースが含まれているコンパートメント)
- リポジトリ名: devops/fn-hello
- アクセス: プライベート
これで、OCIR の設定は完了です。
Oracle Functions のアプリケーションを作成する
関数コードの管理単位であるアプリケーションを作成します。OCI コンソール左上のハンバーガーメニューから開発者サービス > アプリケーションと選択します。
以下のように入力し、新規にアプリケーションを作成します。
- 名前: devops-app
- VCN: 作成済みの VCN
- サブネット: 作成済みのサブネット
これでアプリケーションの作成は完了です。
Notifications の設定をする
OCI DevOps では、プロジェクト作成時に通知を行う、行わないに関わらず Notifications の Topic を設定する必要があります。作成方法は、OCI Tutorials - モニタリング機能で OCI リソースを監視するに詳しく書いてあるので、そちらをご参照下さい。
デプロイする関数コード
デプロイする関数コードを作成します。ここでは、単純に "Hello world!" の文字列を返す関数コードとします。
fn init --runtime java11 fn-hello
デプロイする。
fn deploy --app devops-app
実行する。
fn invoke devops-app fn-hello
"Hello, world!" という文字列が返ってくれば完了です。
リポジトリを作成する
Oracle Functions にデプロイする関数コードを管理するリポジトリを GitHub に作成します。名前は何でも良いですが、本記事では、便宜上fn-examples
という名前で進めていきます。ここに先ほど作成した関数コードを含めてください。手順は省略しますが、こんなイメージです。
./fn-examples
└── fn-hello
├── build_spec.yaml // OCI DevOpsの設定ファイル(後述の手順で作成)
├── func.yaml // Oracle Functions(Fn Project)の設定ファイル
├── pom.xml
└── src
終わりに
これで OCI DevOps を使用するための環境が整ったので、別エントリにてビルド、デプロイメントパイプラインを作成していきます。