作業メモ: Spring Boot on VSCode + Azure DevOPs -> Pivotal Cloud Foundry

こちらの記事を見て触発されました。作業メモです
[How To Set Up Continuous Integration Pipelines with Azure Pipelines and PCF](https://devstack.in/2019/01/24/how-to-set-up-continuous-integration-pipelines-with-azure-pipelines-and-pcf/)

[前の記事](https://qiita.com/YosukeArai13/items/1ef48f842c2792604031)を改変していく形で説明します。よってこの記事を進める前に、前の記事の手順を済ませておいてください
（※一旦こちらでreleaseしますが。もしかしたらもっといいやり方があるかも。適宜次第更新していこうと思います）

#目次
- [pcfの環境設定](#pcfの環境設定)
    - [cf CLIのインストール](#cf-cliのインストール)
    - [pcfのトライアル環境の設定](#pcfのトライアル環境の設定)
- [Azure DevOpsの設定](#azure-devopsの設定)
    - [Cloud Foundry Extensionのインストール](#cloud-foundry-extensionのインストール)
    - [Service connectionを設定する](#service-connectionを設定する)
    - [cf CLIのバイナリをGitHubのソースレポジトリに配備](#cf-cliのバイナリをgithubのソースレポジトリに配備)
    - [Build pipelineの修正](#build-pipelineの修正)
    - [Release pipelineの作成](#release-pipelineの作成)
- [pcfへデプロイ](#pcfへデプロイ)

#pcfの環境設定
## cf CLIのインストール
https://docs.run.pivotal.io/cf-cli/install-go-cli.html
ローカルPCにインストールします。今回はUbuntu 18.04 on WLS利用なのでLinux Installationの手順に従います

## pcfのトライアル環境の設定
以下のSIGN UP FOR FREEからトライアル環境を申し込みます
https://run.pivotal.io/

続いてトライアル環境にOrgとSpaceを作ります。それぞれの意味は以下です
https://docs.cloudfoundry.org/concepts/roles.html
- Org: 開発環境。Org毎にメモリが割り当てられる
- Space: アプリ毎の環境

pcfのConsoleから作りました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/1be07c1b-6264-7749-59bb-e033512e1ebe.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/5a6826e3-831c-3d4c-aaf1-66d4c5ecad6e.png)

完了したらCLIからログインしてみます
`cf login -a https://api.run.pivotal.io`
トライアル環境に登録したEmailアドレスとパスワードを聞かれます。ログイン成功すると以下の形になるかと思います
![7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/542ee4a0-e3e9-f8e3-3c0a-bae325679228.png)

#Azure DevOpsの設定
##Cloud Foundry Extensionのインストール
[記事](https://devstack.in/2019/01/24/how-to-set-up-continuous-integration-pipelines-with-azure-pipelines-and-pcf/)に従ってCloud Foundry ExtensionをAzure DevOpsにインストールします
（ちなみにAzure DevOpsの環境は、[https://dev.azure.com/](https://dev.azure.com/)に遷移し、画面上の「Sign in to Azure DevOps」からたどっていけます）

## Service connectionを設定する
続いて、同様に上記記事の「Service Endpoint for Cloud Foundry extension」に従って、pcf環境に対するService connectionを設定します

##cf CLIのバイナリをGitHubのソースレポジトリに配備
pcfにアプリをデプロイ（push）するのはCLIからcf push を行うのですが、Azure DevOpsにはデフォルトではcf CLIが入っていません（CF Extensionに入れて欲しいものですが…）。ですので自分のアプリのソースツリーに"cf"バイナリを含める必要があります。バイナリは[こちら](https://github.com/cloudfoundry/cli#installers-and-compressed-binaries)。Azure DevOpsのRelease Pipelineの環境にあわせたバイナリを選択ください。自分はLinux版のバイナリをこんな感じで直下に配置しました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/13cf7ebb-ad14-b13f-c419-9be4d9340241.png)

##Build pipelineの修正
[前の記事](https://qiita.com/YosukeArai13/items/1ef48f842c2792604031)で作成したbuild pipelineを改変します。Copy Files to:xx のタスクのContentsに、"cf"と追加入力ください。こうすることでソースツリー中のcfバイナリもコピー対象に含まれ、Release pipelineで使えるようになります
![8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/5eb8fff8-d412-dfb8-3fbd-92423662ad60.png)

##Release pipelineの作成
こちらは新規に作っていきます。New release pipelineから
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/6ce1dbb1-6389-f269-2df9-0e5743aced45.png)

Empty jobを選択します
![9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/b55f8f13-55bc-c1c5-93c9-335f6bbe13d7.png)

以下の画面になればOKです。右肩のXをクリックしてStageブレードは一旦閉じます
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/0c2f69ae-013e-a7fd-12b2-6980d23d0b59.png)

左側の四角中のAdd an artifactをクリックして、先ほど修正したBuild pipelineを選択します。Source aliasは短くしたかったので`_pcftest1`に変えました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/738856a7-d8cb-8aaf-3d21-ff517949c0f3.png)

続いて右側四角中の1 job, 0 taskのリンクをクリックし、遷移した画面の"Agent job"右の＋をクリックします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/58de81dd-2859-9e50-8607-d3ce2d72ab29.png)

BashとCloud Foundry CLIの2つのタスクをAddします
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/e27118ab-0aff-0dbc-6764-b3e5b606402e.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/d7913223-057d-1a6a-a367-b5b231482ff7.png)

設定していきます。まずAgent jobをクリック、Agent Specificationを、先に選択したcfバイナリのプラットフォームとあわせます。今回はUbuntu-18.04としました
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/35dc3ef4-3b22-3c3e-cb33-fab4a1859485.png)

Bashタスクを設定します。Script欄に`chmnod 755 ./cf`を入力します（これが無いとこの後のcf pushで権限エラーとなってしまう…）。ここに入れたコマンドの出力はログに載るので、必要に応じて追加してもOKです
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/b5236b63-6661-5ff9-1ebc-79c1c23517ea.png)
更にAdvanced>Working Directoryを以下の設定にしました（current directoryをはっきりさせたかったため。無くてもいいかも）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/e2018771-bddc-4b9a-ac0f-ce8630785130.png)

最後にcf CLIタスクを設定します。Cloud Foundry Endpointは前の手順で設定した、pcf環境に対するService connectionを選択します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/0b272119-d072-5477-b410-6eea64360e22.png)
更にAdvanced>Working Directoryを以下に設定
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/85778d64-71f8-ad21-6e97-3f2bca5ec439.png)

Release pipelineへの設定はこれで完了です

# pcfへデプロイ
画面上部の"Create release"をクリックしてデプロイします
![10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/2d7a0b49-3a57-4bea-5e31-27a5d4d95ad1.png)

特に入力せずそのまま"Create"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/72f1c21d-e61c-9426-fbdc-745f6839bfcc.png)

画面上部の"Release-xx has been created"のリンクをクリックして状況を確認します
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/1396f738-afd4-5958-6993-7b374799849a.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/2fe11d48-0849-f124-e311-40c9c2abbb68.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/b33d617d-b9bb-a5e7-f240-7cdf5f187696.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/716c1f40-4dd6-c836-f4f8-f05fd4b6dd77.png)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/736e4857-8e15-7a10-845a-96d3dc2ba5d0.png)

pcfのコンソール上でもデプロイ完了を確認できます。（PCFのコンソールはこちら:  [https://console.run.pivotal.io/](https://console.run.pivotal.io/)）
Route列に記載のURLの末尾に"/hello"を付け加えて、作成したSpring boot appが動くことを確認ください
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/327770/d41226d7-33ff-982d-52c7-8fe396c7886a.png)

Spring Bootのコードを、Azure DevOpsを使ってpcfにCI/CDした手順は以上となります。お疲れ様でした