Puppet Pipelines for Applicationsをオンプレミスのサーバにインストールしてみた

Continuous Everythingな昨今、CI/CDツールは無償・有償を問わず市場に出回っていますがPuppet Pipeliensにはどんな特徴があるのでしょうか?

# Puppet Pipelinesとは?
Puppet PipelinesはPuppet社が提供しているCI/CDツールです。従来型のアプリケーションを対象としたPipelines for Applicationsとコンテナ型のアプリケーションを対象としたPipelines for Containersの２種類があります。直感的なUIでデリバリーパイプラインを可視化できることが売りです。

# 環境
**Puppet Pilenes for Application** : 2019年2月時点の最新版
**OS** : CentOS 7(3.10.0-957.1.3.el7.x86_64)
**Docker** : version 18.09.1, build 4c52b90
**Docker Compose** : version 1.23.2, build 1110ad01
**ブラウザ** : Chrome

# インストール
Puppet PipelinesはDockerコンテナ上で稼働するApplicationで、JFrog Artifactory/MySQL/Pipelinesの3つのコンテナで構成されていまqす。インストールするにはDockerとDocker Composeがインストールされている必要があります。この記事では[こちら](https://qiita.com/inakadegaebal/items/be9fecce813cebec5986)と[こちら](https://qiita.com/sawadashota/items/2bed41598d825d488701)の記事を参考にインストールしています。

docker-compose.yamlを任意のディレクトリに置きます。

```
version: '2.1'
services:
  pfa:
    container_name: pfa
    ports:
      - "8080:8080"
      - "7000:7000"
      - "8000:8000"
    image: puppet/pipelines-for-applications:latest
    environment:
      DB_ENDPOINT: mysql://db:3306/pfa
      USER: pfa
      MYSQL_PWD: puppetlabs
    depends_on:
      - db
      - artifactory
  db:
    image: mysql:5.7
    container_name: pfa_db
    restart: always
    environment:
       MYSQL_ROOT_PASSWORD: puppetlabs
       MYSQL_DATABASE: pfa
       MYSQL_USER: pfa
       MYSQL_PASSWORD: puppetlabs
  artifactory:
    image: docker.bintray.io/jfrog/artifactory-oss:5.8.3
    container_name: pfa_artifactory
    ports:
      - 8081:8081
    volumes:
      - data_s3:/var/opt/jfrog/artifactory

volumes:
  db_data:
    name: pfa_db_data
  data_s3:
    name: pfa_data_s3
```

docker-compose.yamlを置いたディレクトリでdocker-composeを実行してコンテナイメージをダウンロード、コンテナを作成します。

```
$ docker-compose up -d
```

コンテナの稼働状況を確認します。

```
$ docker ps --all
CONTAINER ID        IMAGE                                           COMMAND                  CREATED              STATUS              PORTS                                                                    NAMES
73bb20314f47        puppet/pipelines-for-applications:latest        "/sbin/init"             About a minute ago   Up About a minute   0.0.0.0:7000->7000/tcp, 0.0.0.0:8000->8000/tcp, 0.0.0.0:8080->8080/tcp   pfa
92b1aaf5533f        docker.bintray.io/jfrog/artifactory-oss:5.8.3   "/entrypoint-artifac…"   About a minute ago   Up About a minute   0.0.0.0:8081->8081/tcp                                                   pfa_artifactory
4e97877517ff        mysql:5.7                                       "docker-entrypoint.s…"   About a minute ago   Up About a minute   3306/tcp, 33060/tcp                                                      pfa_db
```

念の為コンテナが利用しているポートがListenしているか確認します。

```
$ netstat -tulpn
-- 省略 --
tcp6       0      0 :::7000                 :::*                    LISTEN      -
tcp6       0      0 :::8000                 :::*                    LISTEN      -
tcp6       0      0 :::8080                 :::*                    LISTEN      -
tcp6       0      0 :::8081                 :::*                    LISTEN      -
-- 省略 --
```

# 設定
## JFrog
Chromeでhttp://<hostname>:8081にアクセスしてWelcome画面でNextを押します。
 <img src="https://i.imgur.com/SoSYTzs.png" width=50%>

Adminのパスワードを設定します。
<img src="https://i.imgur.com/OKfJvrm.png" width=50%>

Proxy Serverの設定はSkipします。
<img src="https://i.imgur.com/f1A3OQ1.png" width=50%>

Genericを選択してCreateを押します。次の画面でFinishを押します。JFrogの設定はおわりです。
<img src="https://i.imgur.com/f1A3OQ1.png" width=50%>

## Pipelines for Applications
[Puppet社のライセンス管理サイト](https://licenses.puppet.com/signup)から30日間無償で利用可能な評価版ライセンスを入手します。アカウントの登録が必要です。

Chromeでhttp://<hostname>:8080にアクセスして管理者アカウントを設定して次の画面でライセンスファイルを投入します。
<img src="https://i.imgur.com/DJjrChB.png" width=50%>

WebUI, Backend Service, Agent Serviceのエンドポイントを設定します。hostnameはFQDNを指定します。

- WebUI : http://<hostname>:8081
- Backend Service : http://<hostname>:8080
- Agent Service : http://<hostname>:7000

<img src="https://i.imgur.com/V4T5mC3.png" width=50%>

StorageはArtifactoryチェックボックスを選択します。

- Artifactory Repository :  JFrogの設定時に選択したリポジトリ
- Artifactory Endpoint : http://<hostname>:8081/ **--> hostnameはFQDNを指定します。**
- Artifactory Access Token : 下記のコマンドで取得します。**--> 画面右に記載されているコマンドをコピーペーストするとうまく動かないため手で入力する必要があります。**
- Path Prefix : 任意の名前

```
$ curl -X POST -u admin:ncya6t4x http://localhost:8081/artifactory/api/security/apiKey
{"apiKey":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"}
```

<img src="https://i.imgur.com/TljwkAp.png" width=50%>

Integrationsは後でデリバリーパイプラインを作るときに設定できるためここではSkipします。

<img src="https://i.imgur.com/19vsZ4P.png" width=50%>

Single Sign OnもSkipします。
<img src="https://i.imgur.com/257224d.png" width=50%>

Pipelines is now ready!
<img src="https://i.imgur.com/AMmjxfi.png" width=50%>

# おわりに
この記事はオンプレミス環境で利用するシーンを想定していますがPipelinesは[SaaS版](https://pipelines.puppet.com/)もあります。SaaS版を使えば面倒なインストール作業はいらないよね?クラウドファースト時代なのに何故?と思われがちですが、重要な企業資産をインターネット上に安易に公開できない、SaaSの利用は企業ポリシーで制限されているというお客様も多いのが実情です。
Puppet Pipelinesはあらゆるお客様のご事情を鑑みたCI/CDツールです!