2017-09-09 19 views
1

私はnodejsアプリケーションを構築するために宣言構文を使ってJenkinsfileを作成しました。私はドッカーエージェントを使ってビルドしていましたが、今は許可エラーです。これは私のサンプルJenkinsfileです。ジェンキンスパイプラインのドッカーコンテナー内のsudo権限

pipeline { 
    agent { 
     docker { 
      image 'node:8.4' 
       } 
     } 
    stages { 
     stage('build') { 
      steps { 
        sh 'pwd' 
        sh 'npm --version' 
        sh 'npm --prefix ./Server install' 
      } 
      } 
     } 
} 

Unhandled rejection Error: EACCES: permission denied, mkdir '/.npm' 

私も、sudoコマンド

sh 'sudo npm --version' 

に追加しようとしたけど、それは何のsudoがエラーを発見した私を与えます。どのように私たちはJenkinsfileのドッカーの中に許可を与えることができますか?現在のunixユーザは私がsudoersに追加したjenkinsです。 Jenkinsファイルを実行すると、-uオプションを使用してjenkinsユーザーとグループをドッカーに渡すことがわかります。

docker run -t -d -u 109:116 -w /var/lib/jenkins/testapp 
+0

あなたは仕事で-alh' 'ID &&のlsを実行して、私はこの-alh ID && LSを与えている場合は、あなたの質問 –

+0

への出力を添付して、私は を得た結果であることができます* ******* + ID UID = 109 GID = 116グループ= 116 ******** + LS -alh 合計28K drwxr-XR-X 5 109 116 4.0K 9月9日08:08 drwxr-xr-x 4ルートルート4.0K Sep 9 18:02 .. drwxr-xr-x 8 109 116 4.0K Sep 9 18:02 .git -rw-r - r-- 1 109 116 585 9 9 9 08:08 .gitignore drwxr-xr-x 3 109 116 4.0K Sep 9 08:08クライアント -rw-r - r-- 1 109 116 208 9 9 08:08 Jenkinsfile drwxr-xr-x 13 109 116 4.0K Sep 9 08:08サーバー ****** – Krishna

答えて

1

問題は/.npmフォルダにキャッシュを作成しようとNPMに関連しています。 -uフラグを付けてコンテナを実行しているため、実行するユーザーはroot(デフォルト)ではありません。 Linuxマシンでは、デフォルトでは、root以外のユーザーは/で新しいディレクトリを作成することはできません。

あなたは、あなたの問題解決するために、いくつかのオプションがあります。

  1. -uオプションを削除することによってrootとしてコンテナを実行する(これはNPMがrootユーザーによって実行されることを意味し、これはセキュリティ上の問題につながる可能性があります)
  2. /tmpのように特権のないユーザーが書き込めるフォルダへのnpmキャッシュパスの変更
  3. デフォルトのノードではなくカスタムドッカーイメージを使用して、/.npmディレクトリを作成し、特権のないユーザーに書き込み権限を与えます。私の意見オプション2では

NPMは、ビルドスクリプトにインストールする前に、ちょうどこのコマンドを実行し、最も簡単である:

npm config set cache /tmp 

また、NPMは、ユーザのホームディレクトリにその設定を保存します。使用しているユーザーがコンテナに存在しないため、ホームディレクトリは/に設定されています。書き込み許可エラーを避けるために、HOME環境変数を/ tmpに設定してみてください。あなたのコマンドをインストールすると、次のようになります。

export HOME=/tmp ; npm --prefix ./Server install 
+0

まず、お返事いただきありがとうございます.2番目のオプションを/ tmpに追加することで確認しましたが、エラーが発生します:EACCES:権限拒否されました。 '/.npmrc'エラーが発生しました。私は許可を与えるために必要なすべてのフォルダを考えます。だから、どうやってドッカーの中でルートとして走らせることができますか?ドッカーは、Jenkinsによって-uコマンドが与えられました。 – Krishna

+0

私の答えは試して解決しました。 – whites11

関連する問題