Salesforceの新しいリリース管理ツールDevOps Centerを試してみました。少し前にBata版で公開され先日正式にGAとなった新機能です。
GitHubリポジトリの用意
DevOpsCenterと連携させるGitHubリポジトリが必要になるはずなのでリポジトリを作成。
Salesforce組織の用意
今回はハンズオン組織で用意する形で試してみます。組織が作成されたらシステム管理者ユーザに対してパスワードリセット機能を使ってパスワード再設定しておく。
DevHub組織の有効化
スクラッチ組織を用意したりすると思うのでDevHub組織の有効化を実行。
組織シェイプも有効化しておく。(設定情報をスクラッチ組織に反映できる)
DevOps Centerの有効化
ここからがメインの操作。設定画面からDevOps Centerの有効化を実行
有効化を行うと同意ポップアップが表示されるので同意。
DevOps Centerのパッケージをインストール
パッケージをインストールボタンをクリックしてDevOpsCenterのパッケージインストールを実行する。
=>参考リンクはこちら
※管理者のみのインストールを選択すること。
インストール完了後にメールが届きます。
パッケージで追加されたオブジェクト22個もあるみたい。
対象コンポーネント
対象オブジェクト
接続アプリケーションの作成
こちらを参考に接続アプリケーションを作成する。
ヘルプのとおりに進めれば迷う箇所はありませんでした。(取引先責任者メールアドレスは自分のアドレスに変更すること。)
接続アプリケーションのManageボタンをクリックして権限セットの割り当て設定を実施。『sf_devops_NamedCredentials』をチェックつける。
DevOps Center組織にチームメンバーをユーザとして追加する
こちらの手順で開発メンバーのSalesforceユーザを作成する。1人につき1つのSalesforceユーザを用意する必要がある感じです。
DevOps Center の権限セットを割り当てる
パッケージインストールで追加された権限セットをDevOpsを利用するユーザに割り当てます。(詳細)
とりあえずこの2つで良さそう。
これでDevOpsの事前準備が整ったはず。※細かい権限設定調べるのはまた今度。今回は全部の権限セットを管理者ユーザに割り当てる形で進めます。
ターミナルでDevHub組織にログイン
ターミナルを起動してDevHub組織へのログインを実行。(-d -a DevHubはいらないかも。)
% sf login -d -a DevHub
salesforce function or salesforce orgか確認が入る。上下のキーで選択肢を変更できた。Targetも選択できる。DevHubか普通の組織か選択
次のようにメッセージが表示されてログイン完了。
You're now logged in to ログインユーザ名
次のコマンドでDevHub組織にログインできていることを確認できる。
% sf env list
ちなみにログアウトは次のコマンドを実行。実行すると対象の組織を選択できます。組織の選択はスペースキーで行います。複数を選択することも可能。
% sf logout
ログイン後にDevHub組織のデフォルト設定を行うときは次のコマンドを実行する。
% sf config set target-dev-hub=DevOrgHub
※DevOrgHubは今回対象となった組織のAliasesの名前。ここは対象の組織名となるように変更する。
スクラッチ組織の用意
Gitリポジトリからソースコードを取得
リポジトリ作成直後の場合はワークスペースに移動して次のようなコマンドを実行していく。
% mkdir devops-study-app
% cd devops-study-app
% echo "# devops-study-app">> README.md
% git init
% git add README.md
% git commit -m "first commit"
% git branch -M main
% git remote add origin git@github.com:tyoshikawa1106/devops-study-app.git
% git push -u origin main
※既にリポジトリにSFプロジェクトを作成済みの場合はGit cloneになるはず。
VSCodeでSalesforce プロジェクトを用意
プロジェクトのテンプレートファイル一式は次のコマンドで取得できる。
Gitリポジトリから取得したワークスペースに配置。(ここの手順は今度もうちょっと整理する)
組織の認証で今回のDevHub組織と接続。
ソースコード取得も実行しておく。
GitHubリポジトリに反映。
% git status % git add . % git status % git commit -m "update salesforce project" % git branch % git push origin main
※.DS_Storeとか不要なファイルもいれちゃったけど、ちゃんとやるなら、gitigonoreとかも用意する。
ここまでの手順でスクラッチ組織作成に必要な、『sfdx-project.json』のファイルも用意できる。これを使ってスクラッチ組織作成コマンドを実行する。
スクラッチ組織の作成コマンドを実行。
% sf env create scratch --definition-file config/project-scratch-def.json --set-default --alias my-scratch-org
『sf env list』コマンドでスクラッチ組織が追加されたことを確認できます。
作成したスクラッチ組織をブラウザで開くときは次のコマンド
% sfdx force:org:open -u my-scratch-org
DevOps Centerにアクセス
DevHub組織でアプリケーションランチャーで『DevOps Center』が選択できるようになっています。
ヘルプでいうところのこのあたり。
https://help.salesforce.com/s/articleView?id=sf.devops_center_create_project.htm&type=5
新しいプロジェクトボタンをクリック。初回の場合はGitHubとの認証設定に進みます。
GitHub認証ページが表示される。
認証時の権限まわりの同意を行い設定完了。
DevOpsCenterの画面に戻ってきてメッセージが表示されます。
DevOps Centerでプロジェクトを作成
再度、新しいプロジェクトボタンをクリック。GitHub認証ができていればDevOpsCenter設定に進みます。
これでプロジェクトが作成されました。
DevOps Centerプロジェクトにリリース環境を設定
プロジェクト作成後はリリース環境を設定します。
ユーザ名とパスワードを入力して認証を行います。
これでリリース環境の設定が完了です。
DevOps Centerのプロジェクト詳細ページにアクセス
プロジェクト名のリンクをクリックすると詳細ページが表示されます。
開発組織と接続
DevOps Centerのパイプラインのページから開発組織を追加できます。
接続後はこんな感じ。
パイプラインには開発環境から本番環境の間にいくつかのフェーズが用意されています。1つの組織に対して1つフェーズとの紐付けができるようで、開発環境に設定した組織は他のフェーズには紐付けできませんでした。
開発組織と本番組織の2種類のみの場合はデフォルトで用意されているフェーズを削除して進めます。
パイプラインの初期設定ができたら有効化ボタンをクリックして有効化します。フェーズタブで作業状況が確認できるようになります。
尚、開発環境には複数の組織を紐つけることができるようです。(複数のSandbox組織を紐つけるイメージ)
同期設定
開発環境の次のフェーズの環境に変更があった際に同期を行ってくれる設定がありました。
これでDevOps Centerの設定はひととおり完了できたと思います。
DevOps Centerの動作確認
スクラッチ組織でカスタムオブジェクトを一つ作成。
DevOps Centerで作業項目を作成
なぜか3つできた。(無意識にクリックをカチカチしちゃった?もしくは作業項目はまっていれば自動でつくられたとかかも。)
変更タブで環境を選択して続行ボタンをクリック。
ブランチが作成されたとのこと。
詳細も確認できる。
GitHubのページに確かにブランチが作成されていた。
DevOpsCenterの「変更を取り込む」ボタンをクリック。作成したカスタムオブジェクトに関係するリソースが選択できるようになった。
変更を確定ボタンをクリック。確定中とメッセージが表示され処理が開始されました。暫く待つとブランチに選択したオブジェクトがコミットされました。
画面右側にレビューを作成ボタンをクリック。(他にも追加するものがある場合は変更を取り込むボタンで操作するっぽい。)
変更要求が作成される。(GitHubにプルリクエストが作成されるみたい。)
右上のボタンが変更要求を表示に変わります。クリックするとGitHubのページへ。
変更要求を表示ボタンの隣にある昇格準備完了ボタンをクリック。
これでパイプラインの承認済みの作業項目に追加されます。
チェックをつけて選択したものを昇格ボタンをクリック。
昇格オプションのポップアップが表示される。昇格ボタンをクリック。
本番リリース処理が開始されます。
設定が不足しているとエラーに。(ここでエラーになる予定はなかった...)
エラー理由は確認できます。(Adminプロファイルがリリース先には存在しないとかかな。)
作業項目で昇格準備完了のチェックを外すとレビュー済みに戻ります。
ただ、ここから戻す方法がわからず。状況をなしにするを使うと作業項目を無効にしてブランチを削除できるみたいです。1から作り直したほうが早そう。
別の作業項目で改めてリリース対象を追加。プロファイルのリリースを外してみる。
再度本番リリース。エラーだった。プロファイルは関係なさそう。
英語組織のときの複数ラベルが無いからエラーといっている気がする。それかページレイアウトの名称日本語がNG?
CustomObject タイプの Sample__c は、CustomObject には空ではない複数のラベルを指定する必要があるため、デプロイできませんでした。親エンティティのデプロイに失敗したため、Layout タイプの Sample__c-サンプル レイアウトをデプロイできませんでした。
ちょっと面倒なのでVisualforceページを追加。そっちをリリースしてみる。
コンポーネントの手動取り込みを試してみる。種類はApexPageになります。
手動取り込みは選択肢に表示させるためのものみたいです。変更を取り込むは関係ないものも含むすべて取得かな。
コメントが必須項目で入力すると変更を確定ボタンがクリックできる。あとはリリースまで操作を進める。
昇格成功。本番リリースできました。
GitHubにVisualforceページのコミットがマージされていることを確認できます。
スクラッチで開発したものがリリース先の組織に反映できたことも確認。
まとめ
無事にDevOpsCenterの機能をつかってリリース作業を実行することができました。GitHubでのバージョン管理とSalesforceの状況が適切に同期を取れるのは良さそうです。リリース対象のエラーチェックはシンドそう。Apex系はテストクラス動いてくれるのでそこで気付けると思いますが、標準カスタマイズ系はもっといい方法あるのかな。
初回なので環境設定含めてゴチャゴチャした感じになってしまったのでもう少し手順はブラッシュアップしたいなと思います。とりあえずDevOps Center自体の動作イメージは確認できたので今回はここまで。実践で使うのはもう少し勉強が必要そうですが、DevOpsCenter自体は無償の製品でDeveloper環境でも試すことができて勉強しやすいツールでもありました。