Blue Prismの更新アップデート(アップグレード)手順を紹介します。

皆様、こんにちは。今週もみかんを箱買いした渡部です。
♪みかん、みかん、みかーん 愛媛のみかんはー♪・・・どこのも好きです。

今日はBlue Prismのアップデート手順について紹介します。
具体的にはBlue Prism 6.8から6.9への更新となりますが、他のバージョンからでも基本同様になります。

なお、記載の中のリンク先が開けない場合は、Blue Prism Portalへログイン済みである必要があるので、必要に応じてログイン+アカウント登録してください。
https://portal.blueprism.com/

※「更新」「アップデート」「アップグレード」が混ざっていますが、同じ意味で捉えていただいてOKです。

情報を集めよう

更新手順の全体

全体的な作業内容についてはこちらに記載されています。
https://bpdocs.blueprism.com/bp-6-9/ja-jp/Release%20Notes/Release%20Notes/upgrading-bp6.htm

  1. 関連するリリースノートを確認します(ユーザーポータルから入手可能)。このノートには、特定のリリースに含まれる修正と製品の機能強化の要約が含まれています。
  2. リリースノートを使用して、続くアップグレードパスに、関連する特別な注意事項があるかどうかを確認します(例:適用されるアップグレードの一部として必要な既知のアクションがあるかどうか、新しいライセンスキーが必要かどうか、ログインエージェントへの更新が必要かどうか、なんらかの既知の問題点)。
  3. Blue Prismデータベースのバックアップをとります。
  4. Devおよびテスト環境に更新を適用し、設計されたプロセスが適切に処理されたかどうかを検証します(機能検証および非機能検証を推奨)。非機能テストには、更新適用前後におけるコアプロセスの平均処理時間の確認を含めることができます。
  5. 任意かつ関連性がある場合は、求められる場合、新規または改善した機能を考慮して、既存のプロセスを更新し、適切なテストを実行します。これに、提供されたVBOの最新バージョンのインポートが含まれる場合は、これらを参照するすべてのプロセスを再検証する必要があります。

推奨手順を確認する

推奨手順はこちらに記載されています。
https://bpdocs.blueprism.com/bp-6-9/ja-jp/Release%20Notes/Release%20Notes/applying-updates.htm

特定の環境に更新を適用するための推奨手順は次のとおりです。

  1. 現在実行中のプロセスまたはスケジュールを停止します。
  2. 接続されているすべてのBlue Prismクライアント(インタラクティブクライアント、ランタイムリソース、Blue Prismサーバーなど)を閉じるか終了します。
  3. データベース(データファイルとトランザクションログ)をバックアップします。
  4. すべてのデバイスで提供されているMSIインストーラーを実行し、新しいバージョンをインストールします。一般的に、以前のバージョンを最初に削除する必要はありません。
  5. アップグレードパスにデータベースの変更がある場合(これはリリースノートに記載されています)、これらは製品オプション、または手動で適用されるSQLアップグレードスクリプトを介して適用できます。データベースの変更は、更新の影響を受ける各環境に適用する必要があります。
  6. データベースの変更が適用されると(必要に応じて)、1台のクライアントでさまざまな接続を使用して各Blue Prism環境にログインし、インストールを検証し、それ以上画面上のメッセージがないことを確認します。
  7. ログインエージェントが環境内で使用されており、更新版を適用する必要がある場合(これはリリースノートに記載されています)、すべての適切なデバイスで付属のMSIインストーラーを実行して更新版をインストールします。Blue Prismがインストールされると、ログインエージェントのインストールファイルはBlue Prismのインストール場所内のインストーラーフォルダーに格納されます。
  8. ログインエージェントの更新後、更新されたログインエージェントBlue Prismリリースを関連環境にインストールし、関連プロセスが更新されたログインエージェントVBOを参照することを確認します。
  9. 各Blue PrismサーバーでBlue Prismサーバーサービスを開始し、すべてのBlue Prismクライアントを再開します。

リリースノートを確認する

リリースノートを確認します。
https://bpdocs.blueprism.com/bp-6-9/ja-jp/Release%20Notes/Release%20Notes/rn-6-9.htm

Blue Prism 6.9:2020年9月

項目Version備考
データベース381本リリースはBlue Prismデータベースのこのバージョンを必要とします。
ログインエージェント6.7ログインエージェントはこのリリースで更新されていません。
Chromeブラウザーの拡張機能2.2.0評価対象はChromeバージョン84.0.4147.125です。
Edgeブラウザーの拡張機能2.2.0評価対象はChromeバージョン84.0.522.59です。
Firefoxブラウザーの拡張機能2.2.0評価対象はFirefoxバージョン79.0です。
データゲートウェイエンジン1.2Blue Prism 6.9でデータゲートウェイを使用するには、データゲートウェイエンジンのバージョン1.2をインストールする必要があります。

確認すると、ログインエージェントはVer 6.7のままのようなので、本来更新する必要は無いように思えますが、更新しておいたほうが無難です。

データベースのパスワードを確認する

アップデート作業中にデータベースのパスワードを入力する箇所があるので、事前に確認しておきます。

最新バイナリのダウンロード

Blue Prismポータルから最新のダウンロード

Blue Prism社のホームページからカスタマーポータルに遷移して、ログインします。


「Product」タブから「Current Release」を選択します。

最新のバイナリファイルをダウンロードします(今回はBlue Prism 6.9です)。
使われている環境に合わせて64bit版か32bit版を選択してください。

Blue Prismサーバの更新

データベースに接続できるか事前確認

インタラクティブクライアントを起動して、接続タイプ「SQL Server(SQL Server認証)」になっているものを選択して、テスト接続をします。

「有効なデータベースです。」と表示されれば正常です。

アップデートのインストール

特に難しいことは無いので、BluePrism6.9_x64.msiを起動して、インストーラーの指示に従い進めます。

データベースのアップグレード

インタラクティブクライアントを起動すると、v6.9.0と更新されていることが分かります。
ただ、「データベースのバージョンが違います」とのエラーメッセージが出ますので、「OK」ボタンを押してメッセージを閉じて、「接続構成」を選択します。

接続タイプ「SQL Server(SQL Server認証)」になっているものを選択して、「データベースをアップグレート」を選択します。

データベースのパスワードの入力の箇所があるので入力し、アップグレードを実施します。

正常にアップデートが完了すると、「アップグレードに成功しました」のメッセージが出ます。

標準VBOの更新

インタラクティブクライアントを起動してログインします。

「ファイル」→「インポート」→「プロセス/オブジェクト」を選択して、
C:\Program Files\Blue Prism Limited\Blue Prism Automate\VBO
の標準VBOをまとめて選択します。


標準VBOをカスタマイズしているユーザーさんは個別に対応する必要がありますし、バージョンによってタイムアウト値が違うなど細かい動き上の差もあったりして、旧Verの標準VBOのまま使いたいというニーズもあるので、ここは状況により判断となります。

あとは、難しいことはなく、どんどん案内に従って進めていきます。

無事、新しい標準VBOのインポートが完了しました。

サービスの起動確認

「サービス」で、「Blue Prism Server」を開始して、無事「実行中」になるか確認します。

インタラクティブクライアントの更新

アップデートのインストール

(Blue Prismサーバの更新と同じです。BluePrism6.9_x64.msiを実行します。)

ランタイムリソースの更新

アップデートのインストール

(Blue Prismサーバの更新と同じです。BluePrism6.9_x64.msiを実行します。)

ちなみに、アップデートせずに、RRを起動すると次のエラーになります。

アップデートが完了して、RRを起動して、無事起動+サーバーから接続されることを確認します。

LoginAgentのインストール

"C:\Program Files\Blue Prism Limited\Blue Prism Automate\Installers\LoginAgent_x64.msi"
から最新のLoginAgentのインストーラーを起動します。

特に難しいことなく、どんどん案内に従って進めていきます。

LoginAgentパッケージの適用

「ファイル」→「インポート」→「リリース/スキル」を選択して、
"C:\Program Files\Blue Prism Limited\Blue Prism Login Agent\Login Agent Release.bprelease"
をインポートします。

こちらも特に難しいことなく、どんどん案内に従って進めていきます。

LoginAgentサービスの起動確認

「サービス」で、「Blue Prism Login Agent」を開始して、無事「実行中」になるか確認します。

アップデート後の動作確認

これが大変ですね。業務では事前に確認項目をお客さんと共有しあって、確認します。

何が変わったのか

何が変わったのかをちょっとデータベースやインストールファイルで見てみます。
追加されたもので、今後何をBlue Prism社が考えているのか予想したりします。(私ぐらいでしょうが・・・)

データベースの何が変わったのか

「データベースのアップグレード」の途中で「スクリプトを作成」を押すと、データベースへの更新内容を確認することができます。
今回Blue Prism 6.8から6.9の場合は以下になりました。
BPAAliveAutomateC/BPAWorkQueueItemAggregateの2つのテーブルが追加になったのかな・・・

if not exists (select 1 from BPADBVersion where dbversion='193') begin exec('') end 
if not exists (select 1 from BPADBVersion where dbversion='203') begin exec('') end 
if not exists (select 1 from BPADBVersion where dbversion='374') begin exec('if object_id(''BPAWorkQueueItemAggregate'') is null begin create table BPAWorkQueueItemAggregate ( queueIdent int primary key constraint FK_BPAWorkQueueItemAggregate_BPAWorkQueue foreign key references BPAWorkQueue(Ident) ON DELETE CASCADE, completed int not null default(0), pending int not null default(0), exceptioned int not null default(0), deferred int not null default(0), averageWorktime int not null default(0), total int not null default(0), totalWorkTime int not null default(0), dateUpdated datetime not null default(getutcdate()) ); end ')exec('')exec('if exists (select * from sys.indexes where name=''index_BPAWorkQueueItem_finished'') begin DROP INDEX BPAWorkQueueItem.index_BPAWorkQueueItem_finished end ')exec('')exec('create nonclustered index index_BPAWorkQueueItem_finished on BPAWorkQueueItem ( [finished] asc ) include([queueident],[attemptworktime]) with (pad_index = off, statistics_norecompute = off, sort_in_tempdb = off, allow_row_locks = on, allow_page_locks = on) on [primary] if exists (select 1 from sysobjects where id = object_id(''usp_UpdateWorkQueueItemAggregate'') and type=''P'') begin drop procedure usp_UpdateWorkQueueItemAggregate end ')exec('')exec('create procedure [usp_UpdateWorkQueueItemAggregate] as begin declare @numOfActiveQueues INT = (select count(id) from BPAWorkQueue) declare @timestamp DATETIME = getutcdate() set transaction isolation level snapshot if @numOfActiveQueues > 0 merge BPAWorkQueueItemAggregate wqia using (select queueitemstats.ident, queueitemstats.completed, queueitemstats.pending, queueitemstats.deferred, queueitemstats.exceptioned, isnull(queueavgstats.averageworkedtime, 0) as averageworkedtime, queueitemstats.total, queueitemstats.totalworktime from (select wq.Ident as ident, count(wqi.Completed) as completed, count(wqi.ident)-count(wqi.finished) as pending, count(case when wqi.deferred is null or wqi.deferred < getutcdate() then null else 1 end) as deferred, count(wqi.exception) as exceptioned, count(wqi.ident) as total, isnull(sum(convert(bigint,wqi.attemptworktime)),0) as totalworktime from BPAWorkQueue wq left join BPAWorkQueueItem wqi ON wq.Ident = wqi.queueident group by wq.Ident) as queueitemstats left join ( select q.ident, isnull(avg(cast(i.attemptworktime as float)), 0) as averageworkedtime from BPAWorkQueue q inner join BPAWorkQueueItem i on i.queueident = q.ident where i.finished is not null group by q.ident) AS queueavgstats ON queueitemstats.ident = queueavgstats.ident) as items on (wqia.queueIdent = items.Ident) when MATCHED then update set wqia.completed = items.completed, wqia.pending = items.pending, wqia.exceptioned = items.exceptioned, wqia.deferred = items.deferred, wqia.averageWorktime = items.averageworkedtime, wqia.total = items.total, wqia.totalWorkTime = items.totalworktime, wqia.dateUpdated = @timestamp when not matched by target then insert (queueIdent, completed, pending, exceptioned, deferred, averageWorktime, total, totalWorkTime, dateUpdated) values (items.Ident, items.completed, items.pending, items.exceptioned, items.deferred, items.averageworkedtime, items.total, items.totalworktime, @timestamp); end ')exec('')exec('insert into bpadbversion ( dbversion ,scriptrundate ,scriptname ,[description] ,timezoneoffset ) values ( ''374'' ,getutcdate() ,''db_upgradeR374.sql'' ,''Add active queue stats MI table and associated stored procedure for population'' ,0 ); ') end 
if not exists (select 1 from BPADBVersion where dbversion='375') begin exec('create type TargetSessionDetails as table( queueId int primary key clustered not null, targetSessionAmount int not null ) ')exec('')exec('create procedure usp_SetTargetSessionsForMultipleWorkQueues (@tvpTargetSessionDetails TargetSessionDetails ReadOnly) as set nocount on update BPQ set BPQ.targetsessions = tsd.targetSessionAmount from @tvpTargetSessionDetails tsd inner join BPAWorkQueue BPQ on BPQ.ident = tsd.queueId ')exec('')exec('insert into bpadbversion ( dbversion ,scriptrundate ,scriptname ,[description] ,timezoneoffset ) values ( ''375'' ,getutcdate() ,''db_upgradeR375.sql'' ,''Alter work queue update stored procedure - usp_SetTargetSessionsForMultipleWorkQueues - to get all queue data in bulk.'' ,0 ); ') end 
if not exists (select 1 from BPADBVersion where dbversion='378') begin exec('if not exists (select * from sysobjects where name = N''BPAAliveAutomateC'') begin create table [BPAAliveAutomateC]( [MachineName] [nvarchar](128) not null, [UserID] [uniqueidentifier] not null, [LastUpdated] [datetime] not null, constraint [PK_BPAAliveAutomateC] primary key clustered ( [MachineName] asc, [UserID] asc ) ) end ')exec('')exec('insert into bpadbversion ( dbversion ,scriptrundate ,scriptname ,[description] ,timezoneoffset ) values ( ''378'' ,getutcdate() ,''db_upgradeR378.sql'' ,''Add new table BPAAliveAutomateC'' ,0 ); ')exec('')exec('') end 
if not exists (select 1 from BPADBVersion where dbversion='379') begin exec('insert into BPAValCheck ([checkid], [catid], [typeid], [description], [enabled]) values (148,1, 1, ''''''Batch Size'''' input value is - {1}. {2}'', 1) ')exec('')exec('insert into bpadbversion ( dbversion ,scriptrundate ,scriptname ,[description] ,timezoneoffset ) values ( ''379'' ,getutcdate() ,''db_upgradeR379.sql'' ,''Add new parameter to BPAValCheck Add To Queue batch size'' ,0 ); ')exec('')exec('') end 
if not exists (select 1 from BPADBVersion where dbversion='381') begin exec('alter procedure [BPDS_Exceptions] @BPQueueName  nvarchar(max) = null, @NumberOfDays int           = 3 as if @BPQueueName is not null and not exists ( select 1 from BPAWorkQueue where name = @BPQueueName ) begin raiserror(''@QueueName does not exist.'', 11, 1); end; if @NumberOfDays < 1 or @NumberOfDays > 31 raiserror(''@NumberOfDays must be between 1 and 31'', 11, 1); else begin declare @ColumnName nvarchar(max); declare @Query nvarchar(max); declare @WhereClause nvarchar(max); declare @Params nvarchar(500); set @WhereClause = @BPQueueName; select @ColumnName = isnull(@ColumnName + '','', '''') + quotename(datename(day, TheDate) + ''-'' + datename(month, TheDate)) from ufn_GetReportDays(@NumberOfDays) order by TheDate; if @BPQueueName is not null begin set @Query = ''select name, ''''Exceptions'''' as [ValueLabel], '' + @ColumnName + '' from (select ISNULL(q.name, '''''''') as name, DATENAME(day, d.reportdate) + ''''-'''' + DATENAME(month, d.reportdate) as pivotdate, d.exceptioned from BPMIProductivityDaily d left join BPAWorkQueue q on d.queueident = q.ident where d.reportdate >= (select MIN(TheDate) from ufn_GetReportDays(@DaysParam)) and q.name = @WhereParam) as src pivot (sum(exceptioned) for pivotdate in ('' + @ColumnName + '')) as pvt''; set @params = N''@WhereParam nvarchar(max), @DaysParam int''; execute sp_executesql @Query, @Params, @WhereParam = @WhereClause, @DaysParam = @numberOfDays; end; else begin set @Query = ''select name, ''''Exceptions'''' as [ValueLabel], '' + @ColumnName + '' from (select ISNULL(q.name, '''''''') as name, DATENAME(day, d.reportdate) + ''''-'''' + DATENAME(month, d.reportdate) as pivotdate, d.exceptioned from BPMIProductivityDaily d left join BPAWorkQueue q on d.queueident = q.ident where d.reportdate >= (select MIN(TheDate) from ufn_GetReportDays(@DaysParam)) ) as src pivot (sum(exceptioned) for pivotdate in ('' + @ColumnName + '')) as pvt order by name''; set @params = N''@DaysParam int''; execute sp_executesql @Query, @Params, @DaysParam = @numberOfDays; end; end; return; ')exec('')exec('insert into bpadbversion ( dbversion ,scriptrundate ,scriptname ,[description] ,timezoneoffset ) values ( ''381'' ,getutcdate() ,''db_upgradeR381.sql'' ,''Update BPDS_Exceptions error message so it can be localised'' ,0 ); ')exec('')exec('') end 
if (select InstallInProgress from BPVScriptEnvironment) =  1 alter table BPASysConfig drop column InstallInProgress;

インストールファイルの何が変わったのか

Blue Prism 6.8とBlue Prism 6.9のファイルの差分をWinMergeで確認してみます。

まとめ

今回はさくっと更新手順を紹介しました。

ただ、実際に本番環境で実施する場合にはデータベースのバックアップや、そもそもコピー環境を作って、アップデートの検証をしてから実環境の更新をするので、結構大変です。(RPA/Blue Prismに限らずどのサーバー製品でもですが)
また、「すべてのデバイスで(略)新しいバージョンをインストールします」と上記にあるように、アップデートする場合には一気に更新する必要があり、スケジュール調整も結構大変で、正直環境が大きくなってくると24時間何かしらのスケジュールが動いていたりして、どんどんアップデートしづらくなるので、運用設計する場合は土日でも夜間でもいいので、アップデートするタイミングを事前に考えおくことが大切です。

アップデート自体は現環境の調査とか、リリースノートからの差分調査とかいろいろ考える必要がありますが、そこはうち(BTC)のNB君などのサーバープロフェッショナルズがやってくれるので最近は安心してお任せしている状況です。
アップデートで躓いたりしているBlue Prismユーザー様はぜひうちに依頼していただいた方が正直いいかなと思います。(本気の営業トーク)

余談)
最近、インフラ案件あんまりしていないので、知識の更新ができず。データセンター移行や、クラウド化などのガチインフラ案件ないかなー

もっと知りたい方はこちら


ページトップ