この記事はOracle Cloud Infrastructure Advent Calendar 2021 カレンダー2の12月3日の投稿になります。
目次
使用サービス
・OKIT
・Resource Manager
・Terraform
・Jenkins
CIとは
(Continuous Integration(継続的インテグレーション)
CIの目標はインテグレーションをより小さなサイクルで回し素早く修正することにあり
具体的な内容としては開発者がコードの変更をした時にビルドやテストを自動化することなど
テスト、ステージング環境までのデプロイ。
CDとは
(Continuous Delivery 継続的デリバリー)(Continuous Deployment(継続的デプロイ)
継続的デリバリーは開発者によるアプリケーションへの変更に対して、バグがないか自動的にテストし、リポジトリにアップロードする。
継続的デプロイメントは、開発者による変更をリポジトリから本番環境に自動的にリリースし、顧客が使用できるようにするというもの。
サーバ構成イメージ
JenkinsのCI環境作成にあたって、今回は専用のインスタンスを一台立ち上げ、CIサーバとして利用し
Githubリポジトリへプッシュされたとき、Jenkinsはリモートサーバでdockerコンテナを立ち上げテストを行うといったジョブを作成するイメージです。

Resource ManagerでOCIのリソース作成
以下の構成をResourceManagerで作成し、OCIリソースをgitリポジトリ管理出来るようにします。

Terraformコード作成
前回の記事でOKITで構成管理をご紹介しました。今回はOKITを利用してTerraformコード作成してみます。
OKITにログインする。
http://{okitip}/okit/designer

今回は既存のVCN、サブネットにインスタンスを追加していきます。
左上のメニューから「Query」を選択し、リージョンやコンパートメントを指定し、現在の環境を表示
します。

既存のネットワークが読み込まれるのでインスタンスをドラック&ドロップで追加していきます。

sub1サブネットにjnksv(jenkinsサーバ)配置する。
cloud-initでjenkinsコンテナ起動しておく。
#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.utf8
runcmd:
#docker-install
- sudo wget -P /etc/yum.repos.d http://yum.oracle.com/public-yum-ol7.repo
- sudo yum install -y docker-engine
- sudo systemctl start docker
- sudo systemctl
- sudo docker pull jenkins/jenkins
- sudo docker run -d -v jenkins_home:/var/jenkins_home -p 8080:8080 -p 50000:50000 jenkins/jenkins:lts-jdk11

sub2サブネットにappsv(アプリケーションサーバ)配置する。
cloud-initでdockerインストール起動までしておく。
#cloud-config
timezone: Asia/Tokyo
locale: ja_JP.utf8
runcmd:
#docker-install
- sudo wget -P /etc/yum.repos.d http://yum.oracle.com/public-yum-ol7.repo
- sudo yum install -y docker-engine
- sudo systemctl start docker

左上のメニューから「ResorceManager」を選択。
Planを選択し、Create Stackを押下する。

OCIコンソールにログインし、リソース・マネージャ>スタックを開く
Planを選択しスタック作成したので、コンピュートは構築されず、これまで指定したシステム構成に対応するスタックの作成が行われます。

Terraform構成をバージョン管理する
このままで実行することもできますが、インフラCI/CD管理を行いたいため、githubでコード管理しておきます。
terraform構成:ダウンロードをクリックすると、terraform構成がダウンロードされるので、githubにアップロードしておきます。

githubリポジトリからスタックを作成する
リソース・マネージャ>構成ソース・プロバイダ
terraformコードをアップロードしたgithubと接続する

構成ソースプロバイダ設定後、githubリポジトリコンテンツを読み取り可能になるのでブランチを選択し、スタックを作成します。
※ResourceManagerは、リポジトリコンテンツを読み取りますが、変更をリポジトリにプッシュしません。


スタックを適用する

これでterraform構成をリビジョン管理できるようになりましたが、Resource Manager上では手動で実行する為
CI/CDパイプラインで自動実行したい場合は、CLIを使用する「クラウドでのIaC:TerraformとResourceManagerのCI / CDパイプラインへの統合-OCICLIを使用した構築」を参照
Jenkinsからリモート接続
スタック実行完了したらjenkinsにログインする。初期Passはサーバにログインして確認します。
http://{jnksv_ip}:8080

aap-svにsshリモート接続する為、以下参考にJenkinsにSSH pluginを設定する。
https://plugins.jenkins.io/ssh/
ジョブを作成する。
ジョブ名:helw1

ビルド環境のリモートホストでシェルを実行をチェックし、ビルド前スクリプトに実行コマンドを入力します。
出力を確認しappsvサーバに接続できていることが確認できました。

まとめ
長くなるのでJenkinsジョブの作成は次回にしたいと思います。
今回はOKITでTerraformコード作成し、Resource Managerを用いて、一部インフラのリポジトリ管理することができました。
現状では全てのOCIリソースがOKITでコード化できるわけではないので注意してください。