質問: ### やりたいこと及び問題点 Docker上のコンテナとしてJenkinsが立ち上がっています。 このJenkinsのジョブで[シェルの実行]内で実行ファイルを指定して起動させたいのですが、 実行すると次のエラーが吐き出されエラーとなりました。 ``` [Jenkins_Test] $ /bin/sh /tmp/jenkins****.sh /tmp/jenkins****.sh: line 2: ./called_program: not found ``` 一応[シェルの実行]のコードを載せます。 ``` #!/bin/sh ./called_program ``` これを呼び出せるようにするには、どのようにすれば良いのでしょうか? あるいは、どういう箇所に着目すれば良いでしょうか? ### 試していること * ホストマシンから該当の実行ファイルを起動することを確認しています。 * Jenkinsコンテナに入って該当の実行ファイルを起動しようとすると、 次のエラーが出たのを確認しています。 ``` bash: ./called_program: No such file or directory ``` [追記] また、ジェンキンスジョブに書いたものと同等のシェルスクリプトを作成して実行した場合、 * ホストマシンからだと起動を確認 * コンテナからだとJenkinsジョブのコンソールに出力されたエラーと同じであることを確認 このようになりました。 [追記] JenkinsコンテナのOSを確認したところ、Alpineであることが分かったため、 後述の『環境』にあるプログラムを linux-musl-x64 でビルドしコンテナから呼び出したところ、 下記のエラーが出ました。 ``` error: Error loading shared library libintl.so.8: No such file or directory (needed by /var/jenkins_home/workspace/Jenkins_Test/publish/libcoreclr.so) Failed to bind to CoreCLR at '/var/jenkins_home/workspace/Jenkins_Test/publish/libcoreclr.so' ``` ### 環境 * OS: ubuntu 18.04 * Docker: 右を参考に導入-> https://docs.docker.com/install/linux/docker-ce/ubuntu/ * Jenkins: 右を参考に導入-> https://qiita.com/kmdsbng/items/223c93d09bbd7816b8d5 * 実行したいプログラム: Windows上で開発している.Net CoreプロジェクトをUbuntu向け(linux-x86)に自己完結型でパブリッシュしたもの ### 補足 Linux/Docker/Jenkins諸々初学者です。 「Linux触りたいけどなー。素人だからあれこれ入れてるうちによくわからなくなってくるからなー。 ん?Docker?これは便利そう。(すぐ破棄することができるから) 丁度今Jenkinsジョブを自分で作れるようにしたいからそこらへん取り巻きで勉強がてらやってみるかー。」 というきっかけで遊んでたら今に至りました。
回答: jenkins job は実行時に自身の workspace フォルダをルートディレクトリとして扱います。 workspace フォルダに ./called_program がないため、 No such file or directory と言われています。 1. シェルスクリプトの ./called_program の前行に pwd を1行追加 2. ジョブを実行し workspace フォルダがどこにあるのか確認 3. workspace フォルダ内に ./called_program を配置してジョブを再実行 すれば暫定的に回避可能です。