【CI/CD】UI5プロジェクトのパイプラインを構築するまで　～改善編～

##はじめに
この記事は、UI5のCI/CDパイプラインを構築してみるシリーズの3回目です。

＜過去の記事＞
[【CI/CD】UI5プロジェクトのパイプラインを構築するまで　～環境構築編～](https://qiita.com/tami/items/43b43651792afcea11ea)
[【CI/CD】UI5プロジェクトのパイプラインを構築するまで　～パイプライン編～](https://qiita.com/tami/items/509a7a792143e529fb4a)

今回は、前回作成したパイプラインに以下の改善を加えます。
1. ABAPサーバにデプロイする際のユーザ、パスワード情報をリポジトリに持たせない
2. パイプラインが特定のブランチで実行された場合のみデプロイする

##1. ABAPサーバにデプロイする際のユーザ、パスワード情報をリポジトリに持たせない
[前回](https://qiita.com/tami/items/509a7a792143e529fb4a#5-deploy)の記事では、デプロイする際に必要な情報を.nwabaprcファイルに設定してGitリポジトリに置いていました。これはセキュリティ上好ましくないので、JenkinsのCredential設定を使うように修正します。

元の設定

```:.nwabaprc
{
    "base": "./dist", 
    "conn_server": "http://<host>:<port>", 
    "conn_user": "<user>",                 
    "conn_password": "<password>",             
    "abap_package": "<package>",                
    "abap_bsp": "<BSPアプリのID>",            
    "abap_bsp_text": "<BSPアプリのテキスト>",
    "abap_transport": "<移送依頼>"
}
```

###JenkinsのCredentials設定
以下の手順でJenkinsに認証情報を登録します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/19d437c2-37a2-22e3-c91c-41c39e3acf8a.png)
認証情報を追加
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/7b3c0387-5cc7-c584-41f6-c12f863789aa.png)
Username, Passwordを設定。IDはわかりやすいものをつける（このIDをパイプラインで使用する）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/43afdb32-d3f6-c17c-9492-aa878b22545a.png)

###環境変数の設定
ちょっと横道ですが、接続先サーバの情報もJenkinsの環境変数に持たせることにします。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/e6c78e01-f38d-24e0-bad4-17f526d6ee5c.png)
Configure Systemをクリック
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/adda2981-2a64-90f3-f98a-2cde292214fd.png)
Global propertiesのところで以下のように環境変数を追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/dc2d5a71-03de-3593-c138-d7266aba6183.png)

###Jenkinsfileの設定
Deployステージを以下のように変更します。`ABAP_DEVELOPMENT_CREDS = credentials('abap_login')`で、Credentialsに設定したユーザID、パスワードを取得しています。パイプラインの中でのCredentialの取得方法については、[ドキュメント](https://www.jenkins.io/doc/book/pipeline/jenkinsfile/#handling-credentials)に詳しく書かれています。

[nwabap-ui5uploader](https://www.npmjs.com/package/nwabap-ui5uploader#upload-to-tmp-package)は実行時に引数を指定でき、ここでデプロイ先のサーバ、認証情報を指定します。

```:Jenkinsfile
        stage('deploy') {           
            environment {
                ABAP_DEVELOPMENT_CREDS = credentials('abap_login')
            }
            steps {
                echo "user: ${ABAP_DEVELOPMENT_CREDS_USR}"
                echo "pass: ${ABAP_DEVELOPMENT_CREDS_PSW}"
                sh "npx nwabap upload --conn_server ${env.ABAP_DEVELOPMENT_SERVER_HOST} --conn_user ${ABAP_DEVELOPMENT_CREDS_USR} --conn_password ${ABAP_DEVELOPMENT_CREDS_PSW}"
            }
        }   
```

.nwabaprcからはサーバ、認証情報は削除します。

```:.nwabaprc
    "base": "./dist",            
    "abap_package": "<package>",                
    "abap_bsp": "<BSPアプリのID>",            
    "abap_bsp_text": "<BSPアプリのテキスト>",
    "abap_transport": "<移送依頼>"
```

実行すると、うまくデプロイされました。ユーザ、パスワードの内容はマスクされています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/7e77a697-1c16-1a68-4e9d-3c884540a9f2.png)


##2. パイプラインが特定のブランチで実行された場合のみデプロイする
masterブランチでパイプラインが実行された場合のみDeployステージを実行するようにします。調べてみると意外と簡単で、stageの下に`when { branch 'ブランチ名' }`を指定するだけでした。

###Jenkinsfileの設定

```:Jenkinsfile
        stage('deploy') {
            when {
                branch 'master'
            }            
```

結果、masterブランチでない場合はDeployステップがスキップされました。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276021/63e58c7d-ee58-6b41-d9b8-506dc5c9314f.png)