JenkinsでExcelVBAを動かす
※まだ書きかけ途中ですが公開します。随時、追記していきます。
実行プログラム構成
Jenkins
→ バッチファイル
→ PowerShellスクリプト
→ ExcelVBA
→ AccessVBA
試した動作環境
Windows7
Windows Power Shell 5.1のインストール実施 + Jenkins
Windows10、Windows11
PowerSheelインストール済み + Jenkins
Jenkinsのインストール
JAVA JDKのインストール
先にJDK17またはJDK21をインストールしておく
Jenkins本体のインストール
Webサイトからダウンロードしてインストール
PowerShellプラグイン
プラグイン選択時にPowerShellも入れておく
PowerShellのバージョン確認
パワーシェルを起動して
$PSVersionTable
参考サイト
http://memories.zal.jp/WP/blog/20180208_2959.html
最新版のPowerShellをダウンロードする
デスクトップにフォルダを作成しておく
C:\Windows\system32\config\systemprofile\Desktop
# (x64環境で32bit Officeを動かしている場合)
C:\Windows\SysWOW64\config\systemprofile\Desktop
JenkinsでPowershell用の設定(ポリシー)
どれかを設定するとよいみたい
Set-ExecutionPolicy RemoteSigned
Set-ExecutionPolicy Unrestricted
Set-ExecutionPolicy Unrestricted -Scope CurrentUser
(下記サイトも参照)
PowerShellでスクリプトを実行するとセキュリティエラーになるときの対策https://www.gesource.jp/weblog/?p=8203
実行ポリシー(Execution Policy)を確認・変更する方法
Jenkinsをローカルユーザーで実行
Jenkinsのサービスをsystemではなく、
任意のローカルユーザーで実行するようにした。
「Windows上のJenkinsを特定のユーザーで実行する」
http://iyemon018.hatenablog.com/entry/2017/01/25/080000
何故だっけ???
通常の処理では不要だけれど、
ExcelやAccessのOffice系を実行するには必要みたいです。
(次のセキュリティーの関係?)
エクセルマクロ実行可能なセキュリティにしておく
これもはまりやすい項目です。
Jenkinsをローカルユーザーで実行するように変更したあと、
そのユーザーでログインし、必ずExcelやAccessを実行しておくこと!
マクロ付きExcelの起動時に出てくる信頼済みドキュメントにしておかないと
Jenkinsでの実行時にエラーとなる
ネットワークドライブ不可
Jenkinsから実行した場合、
パワーシェル→ネットワークドライブ上のExcelが実行出来なかった
仮想ドライブを設定しても不可だった
※コマンドライン上からネットワークドライブ先のファイルも
実行は出来たのに・・・
エクセルマクロでcsvファイルを読み込み時は
注意が必要
通常のエクセルマクロVBAであれば
workbook.open filename:="ファイル名.csv"で大丈夫だけど、
Jenkinsから実行する際は何故だかエラーとなる
csvファイルをテキストファイルとして読み込む関数が必要
アクセスのマクロは英語にしておく
エクセルVBAからAccessのマクロやVBAを呼び出すが、
何故だかデフォルトの名称「マクロ1」等で呼び出しに失敗したので
英語名に書き直した。
(バッチファイルからの手動での実行時は動作するのではまった)
Jenkins実行時にエラーになると、
プロセスが残って厄介だ
エラーが発生した後は、
タスクマネージャーでプロセスが残っていないことを確認する
残ったままでは副作用で別のエラーを誘発することがある
この記事が気に入ったらサポートをしてみませんか?