Jenkins上からバッチ実行時のFailed to create D3D deviceについて

1,902 views
Skip to first unread message

Mucho

unread,
Dec 24, 2011, 10:48:34 AM12/24/11
to jenkin...@googlegroups.com
初めまして。
いろいろと検索してまわったりしたのですが、有用な情報を得られずに困っていて、こちらで質問させていただければと思います。
 
元々データビルドを行うためのバッチを作成したのですが、
これをJenkins上から実行させるようにしてみましたところ、
Directx向けのテクスチャコンバートの際に確実にエラーが発生します。
 
具体的には、texconv.exeの呼び出しをしたところで、必ず、
Failed to create D3D device
というエラーになってしまいます。
 
また、Jenkinsを動作させているサーバーマシン上で直接バッチを実行する分には、問題なく動作しております。
サーバーマシンは、Windows Home Server2011です。
Jenkinsはサービスで動作させており、管理者アカウントで明示的にログオンするように設定しています。
 
このような問題について原因や解決策についてご存じの方はおられないでしょうか。
よろしくお願いします。

Seiji Sogabe

unread,
Dec 24, 2011, 1:39:19 PM12/24/11
to jenkin...@googlegroups.com
曽我部です。

Windowsはよくわかりませんが、

http://d.hatena.ne.jp/w650/20090303/1236048412

に書かれている「デスクトップとの対話をサービスに許可」にチェック ではないでしょうか。

2011年12月25日0:48 Mucho <muchosys...@gmail.com>:

--
s.sogabe at gmail.com

Mucho

unread,
Dec 25, 2011, 1:41:02 AM12/25/11
to jenkin...@googlegroups.com
早速のご回答ありがとうございます。
 
ご指摘の通り、サービスのログオンにて、
ローカルシステムアカウントの「デスクトップとの対話をサービスに許可」を入れれば、エラーは出なくなりました。
サーバーデスクトップ上に、「対話型サービスの検出」ウィンドウが出てくるのが少々微妙ですが・・・。
ただ、今度は別の問題が出てきます。
ローカルシステムアカウントでは、DirectXアプリのコンパイル時に、
SDKのヘッダが見えずにコンパイルエラーとなります。
これもこれで謎現象ではあるのですが、
これを回避することも含めて、サービスのログオン設定にて、
アカウントを明示的に管理者アカウントを指定しておりました。
ただこの場合、対話を許可する手段がないように見受けられます。
 
Jenkinsの問題というより、WindowsServiceの問題なのかもしれませんが、
Jenkins上のシステム情報のページを見て比較してもけっこう違いがあるので、このあたりのどれかで引っかかっているのかもしれません。
一応、サービス起動をやめてコンソールから直接起動させれば、このあたりの問題は一切出なくはなるのですが、
できればサービスで起動させたいところと考えております。
 
引き続きがんばって調査していきたいとは思いますが、
何かご存じの方がおられましたら、ご教授のほどよろしくお願いします。

Kohsuke Kawaguchi

unread,
Dec 28, 2011, 10:17:30 PM12/28/11
to jenkin...@googlegroups.com, Mucho

On 12/24/2011 10:41 PM, Mucho wrote:
> 早速のご回答ありがとうございます。
> ご指摘の通り、サービスのログオンにて、
> ローカルシステムアカウントの「デスクトップとの対話をサービスに許可」を入れれば、
> エラーは出なくなりました。
> サーバーデスクトップ上に、「対話型サービスの検出」ウィンドウが出てくるのが少々微
> 妙ですが・・・。
> ただ、今度は別の問題が出てきます。
> ローカルシステムアカウントでは、DirectXアプリのコンパイル時に、
> SDKのヘッダが見えずにコンパイルエラーとなります。
> これもこれで謎現象ではあるのですが、
> これを回避することも含めて、サービスのログオン設定にて、
> アカウントを明示的に管理者アカウントを指定しておりました。
> ただこの場合、対話を許可する手段がないように見受けられます。

はい、これはwindows service control managerの制約です。

昔のWindowsはセキュリティの実装の制約上、一般ユーザーが他人のデスクトッ
プ(window station)にアクセスすることができないようになっていたと理解して
います。最も、最近のWindowsでは「Run As...」みたいなオプションがあったり
してこの制約は過去のもののようなので、SCMの実装がおいついていないだけの
ようにも思いますが。

> Jenkinsの問題というより、WindowsServiceの問題なのかもしれませんが、
> Jenkins上のシステム情報のページを見て比較してもけっこう違いがあるので、このあた
> りのどれかで引っかかっているのかもしれません。
> 一応、サービス起動をやめてコンソールから直接起動させれば、このあたりの問題は一切
> 出なくはなるのですが、
> できればサービスで起動させたいところと考えております。

自動ログイン+スタートアップでスレーブを起動、ではどうでしょうか。

> 引き続きがんばって調査していきたいとは思いますが、
> 何かご存じの方がおられましたら、ご教授のほどよろしくお願いします。

何かわかったらぜひまたポストしてください。

--
Kohsuke Kawaguchi | CloudBees, Inc. | http://cloudbees.com/
Try Nectar, our professional version of Jenkins

Mucho

unread,
Jan 5, 2012, 8:15:51 AM1/5/12
to jenkin...@googlegroups.com, Mucho
レスありがとうございます。
また、遅レス申し訳ありません。年末より実家に帰っていて、ネットそのものからも離れておりました。
 
やはり、Winodwsサービス起動では、少なくとも現状では制約からは逃れられないようですね。
スレーブ起動に関しては、正直申しまして「スレーブ」というものを全く理解していなかったので、考えもしていませんでした。
ご指摘ありがとうございます。
 
まだ勉強中ではありますが、こちらの(https://wiki.jenkins-ci.org/display/JA/Distributed+builds
ページをざっと見たところ、ヒントどころか、かなり答えが書かれているように思われました。
公式ページ・ドキュメントはちゃんと読み込まないといけないという典型ですね・・・。
 
ご指摘の通り、スレーブ起動の方向でなんとかならないか調査を進めていきたいと思います。
大変良いヒント(というかむしろ答え?)になりました。ありがとうございました。
まだちょっと時間がかかるかもしれませんが、結果が出ましたら、
またこちらへの投稿で結果報告をさせていただければと思います。

Mucho

unread,
Jan 22, 2012, 9:56:58 AM1/22/12
to jenkin...@googlegroups.com, Mucho
大変遅くなりましたが、なんとかなりました。
 
ご教授いただいた
> 自動ログイン+スタートアップでスレーブを起動
でいけました。
 
Java Web Startを利用してスレーブエージェントを起動する」の項に書かれている、
JNLPによるやり方でいけました。
 
ただ、いろいろとつまづきまくっていたので、手順ついでにはまりどころも白状しておきます。
 
・Windowsを自動ログイン
control userpasswords2 により設定。
これだとデスクトップが野ざらしになるので、比較的短時間で起動するロック付きスクリーンセーバーも設定。
 
・JNLPによるスレーブを作成。
普通に管理画面のノード管理から作成したものの、起動ができない問題が発生。
javaw http://ServerName/computer/SlaveName/slave-agent.jnlp
とするものの、起動できず。
これは当然で、マスターが走っているマシンそのもののなので、
ServerNameをlocalhost:portNoに変更してみたのですが、
さらに別のファイルを参照しようとしているところで、http://ServerName~で参照しようとするので、さらにこけました。
Jenkinsの設定のJenkinsURLをlocalhostにしたら起動できたのですが、
これだと、jenkinsが送信するメールに貼り付けられるアドレスもlocalhostになってしまうので、問題ありかなと。
そこで、ServerName⇒localhost(127.0.0.1)とするために、hostsファイルで設定してしまいました。
静的NATは? とかの声が聞こえてきそうですが、うちのルーター君はそこまで気の利いたやつでは無かったのと、
単純にめんどくさかったということでw
 
とりあえず、この状態でジョブをスレーブに割り当てて走らせてみたら問題なく完走してくれました。
 
・スレーブJNLPの自動起動。
スレーブ起動をバッチファイルにして、スタートアップフォルダにショートカットをぶち込んでマシン再起動してみたところ、
スレーブの起動に失敗しました。
状況をよく見てみると、マスターのサービスが起動しきらない段階でスレーブ起動しにかかっていたようでした。
そこで、スタートアップフォルダはやめて、タスクスケジューラからスタートアップとして登録し、
1分ほど起動遅延設定を入れてみたところ、問題なく起動してくれるようになりました。
 
 
こんなことでつまづきまくるのは僕ぐらいかもしれませんが……。
とにかくとりあえずのところ、やりたかった形に何とかおさまりました。
ご教授いただいたみなさん、ありがとうございました。

Akiko Takano

unread,
Jan 22, 2012, 11:05:45 PM1/22/12
to jenkin...@googlegroups.com, Mucho
Muchoさん、こんにちは。

読ませていただくだけになってしまい、申し訳ありません。
Jenkinsの1ユーザです。

最後の、

> ・スレーブJNLPの自動起動。
> スレーブ起動をバッチファイルにして、スタートアップフォルダにショートカットをぶち込んでマシン再起動してみたところ、
> スレーブの起動に失敗しました。
> 状況をよく見てみると、マスターのサービスが起動しきらない段階でスレーブ起動しにかかっていたようでした。

のところは、「なるほど!」思いました。

私も実行権限の異なるアカウントで、同じサーバでマスタ・スレーブを構成したいなと...思ったことがあり、調整しようと思った矢先だったので、サービスの起動の仕方などを再確認してみます。

情報ありがとうございました!

Mucho

unread,
Jan 24, 2012, 4:51:54 AM1/24/12
to jenkin...@googlegroups.com, Mucho
いえいえ、こんな情報でもお役にたてれたのであれば幸いです。
Reply all
Reply to author
Forward
0 new messages