SalesforceのCIをJenkinsで構築する


この記事はSalesforce Platform Advent Calendar 2019の14日目です。

上長からJenkinsを使えばSalesfoceのCI/CDができると聞いたので環境を構築しました。
初めてなので最初はCIから作成し、手順を記事にしました。
CDに進化したらそのうち記事にします。

やったこと

JenkinsをインストールしたサーバからSalesforce環境へ接続し、テストを実施するジョブを作成しました。
普段の開発環境ではブラウザからログインすればいいので楽でしたがCUIでは手順がおおく躓くことが多いイメージでした。

Jenkins環境の構築

Docker環境の構築

javaや前提パッケージのインストールはめんどい本題ではないのでDockerでJenkinsコンテナを立てます。
また、コンテナビルド時にSFDX CLIも一緒にインストールします。
※Dockerfileは割愛
参考:Salesforce CLI のインストール - Linux での CLI のインストール

Jenkinsへ接続確認

http://[IPアドレス or localhost]:8080にアクセスし、Jenkinsのセットアップ画面が表示されればJenkins環境の構築完了

Salesforceへの接続

参考:接続アプリケーションの作成 単元 | Salesforce Trailhead

自己証明書の作成

参考:非公開鍵と自己署名デジタル証明書の作成
参考元を見つつサーバの秘密鍵と自己証明書を任意のディレクトリに作成

$ cd ./certificates
$ ls -l
-rw-rw-r-- 1 ec2-user ec2-user 1103 12月  2 14:49 server.crt
-rw-rw-r-- 1 ec2-user ec2-user  993 12月  2 14:49 server.csr
-rw-rw-r-- 1 ec2-user ec2-user 1675 12月  2 14:46 server.key

接続アプリケーションの作成

参考:接続アプリケーションの作成
※参考元の12〜16も行う
次工程のJWTベースフローを使用した認証で使用するので表示された「コンシューマ鍵」をメモ帳等にコピーしておく

JWTベースフローを使用した組織の認証

参考:
JWT ベースフローを使用した組織の認証
[Salesforce DX]Salesforce CLIを使ってJWTべアラートークンフローを試してみる | Developers.IO

環境変数にコンシューマ鍵、自己証明書への絶対パス、ユーザ名を設定する
(GUIブラウザがないため一般的なブラウザからのログインができないため)設定した環境変数を利用してJWTベースフロー認証を行う

# 環境変数の設定
export SFDX_USE_GENERIC_UNIX_KEYCHAIN=true
export CONSUMER_KEY=[コピーしたコンシューマ鍵]
export JWT_KEY_FILE=/path/to/certificates/server.key
export HUB_USERNAME=[ユーザ名]

# JWTベースフローを使用した組織の認証
$ sfdx force:auth:jwt:grant -i ${CONSUMER_KEY} -u ${HUB_USERNAME} -f ${JWT_KEY_FILE} -a jwt
Successfully authorized [email protected] with org ID 00D0o000000RtMIEA0

# 認証情報の確認
$ sfdx force:auth:list
=== authenticated orgs
ALIAS  USERNAME   ORG ID   INSTANCE URL                OAUTH METHOD
─────  ────────  ────────  ──────────────────────────  ────────────
jwt    [ユーザ名]  [組織ID]  https://ap8.salesforce.com  jwt

Jenkinsの設定

JenkinsにSalesforce認証情報を登録する

Jenkins管理>システムの設定からグローバル プロパティに環境変数を設定する

自己証明書を登録

Jenkins Admin Credentialsインターフェイスを使用して、生成したserver.keyファイルをJenkinsシークレットファイルとして保存する
先に設定した環境変数「SERVER_KEY_CREDENTIALS_ID」の値(本記事ではSF_Develop)をIDに設定する

Custom Tools Pluginのインストール

Jenkinsの管理>プラグインの管理>利用可能 へと順番に押下し、フィルターに「Custom Tools」と入力しCustom Tools Pluginをインストールする

Custom Toolsの設定

Jenkinsの管理>Global Tool Configuration からCustom toolの設定をする

Jenkinsでテストの実施

下記URLのJenkinsファイルをコピーしてジョブを作成する
https://github.com/forcedotcom/sfdx-jenkins-org/blob/master/Jenkinsfile

あとはジョブを実施してテスト三昧の毎日をお過ごしください

CIからCDへ

SFDX CLIを使用すると本番環境へのデプロイも可能らしいので近いうちにやってみたいですが、安全な環境でデプロイのテストってどうやるんですかね?
ご存知の方がおられたらコメントお待ちしております。

参照元

Salesforce DX 開発者ガイドで紹介されている組織開発モデルでCIを行うJenkinsのリポジトリです。
正直このレポジトリのReadmeに全て書いてあります。
GitHub - forcedotcom/sfdx-jenkins-org: Jenkins example with org development

免責事項

当記事のコンテンツや情報において、可能な限り正確な情報を掲載するよう努めています。しかし、誤情報が入り込んだり、情報が古くなったりすることもあります。必ずしも正確性を保証するものではありません。また合法性や安全性なども保証しません。