あらゆるスタックがSoftwareで定義されるCloud Native WorldではビジネスアプリケーションだけでなくインフラストラクチャコードのCI/CDも必要ですね。この記事はこちらの原文を元に作成しています。
Continuous Delivery for Puppet Enterpriseとは?
Continuous Delivery for Puppet Enterprise(以下CD4PE)はPuppet Enterpriseで管理するインフラストラクチャコードのデリバリーパイプライン管理ツールです。コード変更によるインフラストラクチャへの影響分析やアドオンのテスティングフレームワークと連携してコードの品質を担保しながらデリバリーのスピードと頻度を高めます。
前提条件
- OS : CentOS 7(3.10.0-957.1.3.el7.x86_64)
- Puppet MasterのOS : CentOS7
- CD4PEのOS : CentOS7
- Job hardwareのOS : CentOS7
- Puppet Enterprise : 6.0.5
- CD4PE : 2.5.0
インストール
Puppet社のサイトからPuppet Enterpriseをダウンロードします。
Code Managerの設定が必要です。この記事では詳細な手順は割愛しています。
Master側でダウンロード済みのPuppet Enterpriseのインストールバイナリを解いてインストールスクリプトを実行します。
$ sudo ./puppet-enterprise-installer
どのように続行しますか? [1]: 1
省略
## Puppet Enterpriseの設定が完了しました!
省略
puppetを実行してインストールは完了です。
$ sudo /opt/puppetlabs/bin/puppet agent -t
CD4PE側でAgentのインストールスクリプトを実行します。
$ curl -k https:<Puppet Masterのホスト名>:8140/packages/current/install.bash | sudo bash
CD4PE側でpuppetを実行してMasterに証明書のサインを要求します。
$ sudo /opt/puppetlabs/bin/puppet agent -t
Master側で証明書にサインします。
$ sudo /opt/puppetlabs/bin/puppetserver ca sign --all
Successfully signed certificate request for device-proxy.puppet.com
再度CD4PE側でpuppetを実行します。エラーが出なければ成功です。
$ sudo /opt/puppetlabs/bin/puppet agent -t
Mater側でCode Managerの設定時に設定したリポジトリをディプロイします。Puppet社が管理しているGitHubリポジトリ
$ sudo puppet-code deploy production
Found 1 environments.
[
{
"environment": "production",
"id": 1,
"status": "queued"
}
]
Chromeでhttps://にアクセスしてMasterの管理コンソールにログインします。左のペインで分類を選択してグループを追加をクリックします。親名はPE Infrastructure, グループ名はContinuous Delivery for PE, Environmentはproduction, Environmentグループのチェックは選択せずに追加を押します。
作成したContinuous Delivery for PEをクリックして設定タブを選択します。新しいクラスを追加からcd4peを選択してクラスを追加を押します。
CD4PE側でpuppetを実行します。エラーがでなければCD4PEのインストールは成功です。念の為dockerがインストールされていてコンテナが作成されているか確認します。
$ sudo /opt/puppetlabs/bin/puppet agent -t
省略
$ docker ps --all
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
f06906936ac6 puppet/continuous-delivery-for-puppet-enterprise:latest "/sbin/init" 6 hours ago Up 6 hours 0.0.0.0:7000->7000/tcp, 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp cd4pe
19298955a926 mysql:5.7 "docker-entrypoint.s…" 6 hours ago Up 6 hours 0.0.0.0:3306->3306/tcp, 33060/tcp cd4pe_mysql
Rootアカウントの設定
ChromeでPuppet社のライセンス管理サイトにアクセスしてCD4PEの評価版ライセンスをダウンロードします。ユーザ登録が必要です。
Chromeでhttp://:8080にアクセスしてGet Startedを押します。
Rootアカウントを作成します。このアカウントは管理専用でデリバリーパイプラインを作成できません。
End Pointを設定します。ホスト名はFQDNを入力します。
Storageを設定します。この記事ではローカルディスクを選択しています。
ライセンスを投入してSubmit Licenseを押してライセンス確認の画面でAcceptを押します。
初期設定
Integrate Puppet EnterpriseをクリックしてAdd Credentialsを押します。
Master側でAPI Tokenを作成します。
$ sudo puppet-access login --lifetime 180d
Master側で作成したAPI Tokenをコピーして控えておきます。
$ sudo puppet-access show
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
Master側で証明書をコピーして控えておきます。権限の都合上rootで実行します。
# cat /etc/puppetlabs/puppet/ssl/certs/<MasterのFQDN.pem>
Master側で秘密鍵をコピーして控えておきます。権限の都合上rootで実行します。
# cat /etc/puppetlabs/puppet/ssl/private_keys/<MasterのFQDN.pem>
必要情報を入力してAdd Credentialsを押します。この記事ではAPI Token認証を選択しています。
右上のLogoutをクリックして一旦ログアウトしRootアカウントでログインします。
Settings->IntegrationをクリックしGitHub OAuth applicationのClient ID, Client Secretを入力してAddをクリックします。この記事ではGitHubと連携しています。OAuth applicationの作成方法は割愛しています。参考
設定が終わったら再度一般ユーザでログインします。
Integrate source control->GitHubをクリックします。
Add Credentialsを押してGitHubと連携します。
Set up job hardware->Add job hardwareを押します。
Job hardwareのインスタンスにログインしてインストラクションに従ってCD4PEのAgentをインストールします。
$ curl -sSL http://iacd.c.metal-being-226004.internal:8080/download/client | sh
$ sudo /usr/local/bin/distelli agent install
Login can be automated. See: http://pup.pt/pipe-agent-creds
Distelli Email: hisashi.yamaguchi@puppet.com
Password:
Server Info: http://iacd.c.metal-being-226004.internal:8080/hisashiyamaguchi/servers/f4d7c70d-9f2a-6c44-81bd-42010a8e0029
Starting sysv daemon with conf: /etc/init.d/dtk-supervise-cc1233c06f7ad94a8d34ac610381242f9ae28bb8
Starting Distelli supervisor
おわりに
次回以降デリバリーパイプラインの作成方法をご紹介します。