Jenkins:ビルド環境としてDockerを使用する権限の問題


11

JenkinsをUbuntu 16.04マシンにインストールしました。Jenkins自体はコンテナーでは実行されません。yarn installノードイメージを使用して呼び出すだけです。これが私のJenkinsfileです:

pipeline {
    agent any
    stages {
        stage('install node modules...') {
            agent { docker 'node' }
            steps {
                sh 'cd /path/to/package.json; yarn install'
            }
        }
    }
}

かなり簡単ですよね?

jenkinsユーザー/グループは112:116であり、ノードコンテナーのuidは1000であるため、yarnプロセス(ノードユーザー1000として実行される)はのようなことはできませんmkdir /.config

引数を渡してノードコンテナをスピンアップ-u 1000しようとしましたが、永続ディレクトリを作成しようとしたときに権限の問題にぶつかりました。

どちらかの問題のようですが、どうすれば回避できますか?

ジェンキンスのログ:

以下は、ビルドが開始して失敗する場所です。

[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ docker inspect -f . node
.
[Pipeline] withDockerContainer
Jenkins does not seem to be running inside a container
$ docker run -t -d -u 112:116 -w /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2 -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2:rw,z -v /var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2@tmp:rw,z -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** -e ******** --entrypoint cat node
[Pipeline] {
[Pipeline] sh
[Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2] Running shell script
+ cd /path/to/package.json
+ yarn install
yarn install v0.24.6
error An unexpected error occurred: "EACCES: permission denied, mkdir '/.config'".
info If you think this is a bug, please open a bug report with the information provided in "/var/lib/jenkins/workspace/Pipeline_Test_Jenkins_test-4JTFYMX7KSJY6ZH44VINNGEB7WH2D2HWYZN5ABF6O32O2HBQJYXQ@2/<path>/yarn-error.log".
info Visit https://yarnpkg.com/en/docs/cli/install for documentation about this command.
[Pipeline] }
$ docker stop --time=1 c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
$ docker rm -f c1147934ea689f71a449e486282db03338b12182368def31bdf8e8cf179ab46a
[Pipeline] // withDockerContainer
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] End of Pipeline
ERROR: script returned exit code 1
Finished: FAILURE

ログを追加してください
030

ログを添付しました。また、Dockerイメージのjenkinsユーザーは1000であり、ノードイメージのノードユーザーと同じuidであるため、公式のdockerイメージを使用してJenkinsを実行しようとしました。
マイケル

selinuxは有効になっていて強制されていますか?
James Shewey 2017

@JamesSheweyわかりません。私は単にubuntu AMI ec2インスタンスにまたがっています。
マイケル

彼らはそれを無効にしていると思いますが、「sestatus」で確認してください。オンになっている場合は、オフにしてみてください。
James Shewey 2017

回答:


8

ノードでも同じ問題が発生しました。コンテナ内のファイルは「root:root」が所有しています。docker argsを追加してみてください-u root:root

docker { 
    image 'node:8'
    args '-u root:root'
}

解決策も私のために働いた。これがJenkinsのドキュメントにないのはなぜですか?(私の問題は、pip install次の結果になる簡単なコマンドCould not install packages due to an EnvironmentError: [Errno 13] Permission deniedでした。それを検索する人々を助けるために、ここで言及します。私のために問題を使用するvirtualenvpip install --user、修正しませんでした)
Rabarberski

3

私は今日、同じような問題を抱えていましたが、別のイメージがあります。

docker {
 image 'node:8'
 args '--tmpfs /.config'
}

参照:https : //docs.docker.com/storage/tmpfs/ この方法では、コンテナーがjenkins内で破棄された後に存在するセキュリティリークやファイルについて心配する必要はありません。


3

buildEnv.inside("-u 0") {}私の問題を解決しました。ただし、ワークスペースには、rootが所有するディレクトリとファイルが含まれ、ワークスペースをクリーンアップするときに次の実行時にユーザーJenkinsによって削除できないためsh "sudo chown jenkins: -R \$PWD/" 、パイプラインの最初に追加 しました。


私は同様のアプローチを使用しましたが、最初にchownではなくパイプラインの「クリーンアップ」ステップとして、最後に「sh "chmod -R a + w \ $ PWD"」を実行しました。Jenkinsユーザーが私のコンテナで定義されておらず、sudoが利用できませんでした。私もファイルを削除できたかもしれませんが、何か問題が発生した場合は調査のために保管しておく方がよいと考えました。
Olivier Boudry
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.