web-dev-qa-db-ja.com

JenkinsからのWindowsバッチコマンドの実行は失敗しますが、cmd.exeで正常に実行されます

私はMSbuildの後にjenkinsでこのコマンドを実行しようとしています

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 

Y:マップされたネットワークドライブです。これはcmd.exeで正常に実行されますが、ジェンキンスで実行しようとすると、エラーInvalid drive specification

Jenkinsからの出力は次のとおりです。

Time Elapsed 00:00:04.03
[trunk] $ cmd /c call C:\Windows\TEMP\hudson3389873107474371072.bat

C:\Program Files (x86)\Jenkins\workspace\trunk>xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Y:\Extraction_Zone\Jenkins\" /E 
Invalid drive specification
0 File(s) copied

C:\Program Files (x86)\Jenkins\workspace\trunk>exit 4 
Build step 'Execute Windows batch command' marked build as failure
Finished: FAILURE

任意の助けをいただければ幸いです。

15
Chris

私も同じような問題が一度ありました。 services.mscのすぐ下にJenkinsサービス「このアカウントとしてログオン」を許可し、そこに入力するアカウントがcmd.exeの実行に使用するものと同じであることを確認してください。

enter image description here

16
adarshr

Java JARファイルに基づいたこれらのコマンドは私のために働いた:
cmd
Net Use x:\\
xcopy "dist \" x:\/Y

以上です!この問題を理解するのに多くの時間を費やしましたが、CMDとNet Useを書くまでは何も機能しませんでした!
jenkinsサービスの権限を変更したり、runasコマンドを使用したりする必要はありませんでした。

しかし、私は誰もがネットワークドライブへの読み取りおよび書き込みアクセスを持っていたことに言及する必要があります。

3
Jiří

ほとんどのものを簡単に修正できます。

  1. 実行しようとしているものでバッチコマンドを作成し、filename.batでコマンドプロンプトテキストを使用します。
  2. バッチコマンドの通常のウィンドウショートカットを作成し、ショートカットの詳細プロパティを編集し、「管理者として実行」(トリッキーな)を確認します。
  3. 次に、jenkinsコマンドラインコールからfilename.lnkショートカットを実行します。これにより、すべてのジャズを回避できます。

:)

1
James Stevenson

バッチファイルを実行しているWindowsタスクで同じ問題が発生しました(まったく同じではないことを知っています)。そこで、ネットワーク上の場所、つまり共有ドライブにファイルをコピーしようとしました。 UNCパスとマップされたドライブも使用しましたが、エラーは同じでした。私にとっては、エラー番号4-MS DOSエラーコードでした。解決策はNet Useコマンドを使用することでした!それが役立つことを願っています。

1
user3104116

同様の問題に直面し、解決する2つの方法を見つけました。

タイプ1:マップされたドライブについてジェンキンスに伝えます。 1.Goto-> Jenkinsの管理->スクリプトコンソール(Groovyスクリプト)。 2.以下のコマンドを実行

 def mapdrive = "Net Use Y: \\\\copy_nework_address"
 mapdrive.execute();
 println "Net Use".execute().getText()

タイプ:2 1.Goto-> cmd-> "Net Use"を実行してネットワークアドレスを知る

xcopy "C:\Program Files (x86)\Jenkins\workspace\trunk\Projects\results\results\obj\Debug\Package\PackageTmp" "Copy_Network_Address\Extraction_Zone\Jenkins\" /E

結論:-再起動するたびにGroovy Scriptを実行する必要があるため、2番目のタイプを好みます。

0
LearNer969

Adarshrの解決策(つまり、サービスのログオン資格情報を変更する)は、問題の一部で機能しました。私の場合、これによりMercurialリポジトリを(sshプロトコルを使用して)正常にチェックアウトできました。 「ローカルシステムアカウント」を使用する場合は実行しないでください。

ただし、コマンドラインスクリプトを実行するか、ビルドセクションのjenkins 'execute Shell'スクリプトから同じスクリプトを実行するかでは、動作が異なります。私の場合、Python拡張機能をコンパイルします。Jenkinsでは、拡張機能をインポートできません(エラーは表示されませんが、実行が停止するだけなので、クラッシュする可能性があります)。

サービスをアンインストールし、スレーブエージェントをJava Web Startとして実行すると、同じ動作が発生します。これは一時的な修正ですが、Windowsビルドを再起動するとマシン、Java Web Startアプリケーションを手動で再起動する必要があります。

したがって、少なくとも私の場合は、これが資格情報の問題であることは明らかです。

資格情報の使用に関するドキュメント: https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+CLI

0
mfiers

CIFSプラグイン の問題を解決しました。

0
swist