2017-02-10 3 views
3

私の個人用PCに簡単なパイプラインを構築しようとしています。私はJenkins verを持っています。 2.32.2がインストールされ、実行中です。以下は私のパイプラインのための仕事のDSLです:jenkins 'スクリプトを実行する'ビルドステップエラー:/ bin/docker:許可が拒否されました

node { 
    stage('Github Checkout') { 
     checkout([$class: 'GitSCM', branches: [[name: '*/master']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: '921fd840-1d71-4b06-bf5e-1c6f3141f669', url: '[email protected]:justinsr20/tdd_django.git']]]) 
    } 
    stage('Build containter image') { 
     sh 'whoami' 
    } 
     stage('Build containter image') { 
     sh 'pwd' 
    } 
    stage('Build containter image') { 
     sh 'ls -l' 
    } 

    stage('Build containter image') { 
     sh 'docker build -t jenkins/django:v1 -t jenkins/django:latest .' 
    } 
} 

私はドッキングウィンドウがインストールされていると私はドッキングウィンドウグループ内ジェンキンスのユーザーを持っている:

[[email protected] bin]# grep 'docker' /etc/group 
docker:x:977:judd,jenkins 

奇妙なことは、ジェンキンスさんは私に以下のアクセス権のエラーを与えることです

[workspace] Running shell script 
+ whoami 
jenkins 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] stage 
[Pipeline] { (Build containter image) 
[Pipeline] sh 
[workspace] Running shell script 
+ pwd 
/var/lib/jenkins/jobs/tdd_django/workspace 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] stage 
[Pipeline] { (Build containter image) 
[Pipeline] sh 
[workspace] Running shell script 
+ ls -l 
total 20 
drwxr-xr-x. 3 jenkins jenkins 4096 Feb 10 11:11 django_app 
-rw-r--r--. 1 jenkins jenkins 97 Feb 10 12:37 Dockerfile 
-rw-r--r--. 1 jenkins jenkins 15 Feb 10 11:11 requirements.txt 
-rw-r--r--. 1 jenkins jenkins 66 Feb 10 11:11 run_tests.sh 
-rwxr-xr-x. 1 jenkins jenkins 69 Feb 10 12:48 script.sh 
[Pipeline] } 
[Pipeline] // stage 
[Pipeline] stage 
[Pipeline] { (Build containter image) 
[Pipeline] sh 
[workspace] Running shell script 
+ docker build -t jenkins/django:v1 -t jenkins/django:latest . 
/var/lib/jenkins/jobs/tdd_django/[email protected]/durable-77854956/script.sh: line 2: /bin/docker: Permission denied 

私ドッカ権限:

上記の私の定義されたパイプラインのドッキングウィンドウのビルドコマンドを実行しようとすると
bash-4.3$ which docker 
/bin/docker 
bash-4.3$ ls -la /bin/docker 
-rwxr-xr-x. 1 root root 12056512 Feb 8 16:44 /bin/docker 

が、私はジェンキンスユーザとしてシェルセッションを開いたとき、私はコマンドを実行することができます何の問題:

[[email protected] bin]# sudo su -s /bin/bash jenkins 
bash-4.3$ cd /var/lib/jenkins/jobs/tdd_django/workspace 
bash-4.3$ ls 
django_app Dockerfile requirements.txt run_tests.sh script.sh 
bash-4.3$ docker build -t jenkins/django:v1 -t jenkins/django:latest . 
Sending build context to Docker daemon 76.8 kB 
Step 1/3 : FROM python:2.7-onbuild 
# Executing 3 build triggers... 
Step 1/1 : COPY requirements.txt /usr/src/app/ 
---> Using cache 
Step 1/1 : RUN pip install --no-cache-dir -r requirements.txt 
---> Using cache 
Step 1/1 : COPY . /usr/src/app 
---> Using cache 
---> fb9aa7078336 
Step 2/3 : LABEL maintainer "CMI Industries" 
---> Using cache 
---> c1888038ffa2 
Step 3/3 : RUN chmod +x /usr/src/app/run_tests.sh 
---> Using cache 
---> 8e61860e0567 
Successfully built 8e61860e0567 

任意のヘルプは大歓迎されないであろう。

EDIT更新:

issues.jenkins-ci.org/browse/JENKINS-24338が関連している場合ので、私は、ドッキングウィンドウのサービスが開始される方法を変更する必要があります。

[[email protected] system]# systemctl show --property=FragmentPath docker 
FragmentPath=/usr/lib/systemd/system/docker.service 

と、このファイルの内容::

systemctl start docker 

私が使用このコマンドの設定ファイルを見つけるために:私は使用して私のドッキングウィンドウのサービスを開始する方法

[Unit] 
Description=Docker Application Container Engine 
Documentation=https://docs.docker.com 
After=network.target firewalld.service 

[Service] 
Type=notify 
# the default is not to use systemd for cgroups because the delegate issues still 
# exists and systemd currently does not support the cgroup feature set required 
# for containers run by docker 
ExecStart=/usr/bin/dockerd 
ExecReload=/bin/kill -s HUP $MAINPID 
# Having non-zero Limit*s causes performance problems due to accounting overhead 
# in the kernel. We recommend using cgroups to do container-local accounting. 
LimitNOFILE=infinity 
LimitNPROC=infinity 
LimitCORE=infinity 
# Uncomment TasksMax if your systemd version supports it. 
# Only systemd 226 and above support this version. 
#TasksMax=infinity 
TimeoutStartSec=0 
# set delegate yes so that systemd does not reset the cgroups of docker containers 
Delegate=yes 
# kill only the docker process, not all processes in the cgroup 
KillMode=process 

[Install] 
WantedBy=multi-user.target 

イムわかりませんissues.jenkins-ci.org/で説明されているように、jenkinsユーザーをdefault-used 'docker'グループに追加するのではなく、 "jenkins"グループの所有権をソケットに適用するように私がこのファイルを変更する必要がありますブラウズ/ JE NKINS-24338

+0

sudoテストでbashの代わりにshを使用するとどうなりますか? – BMitch

+0

[root @ localhost bin]#sudo su -s/bin/sh jenkins sh-4.3 $ type docker ドッカーは/ bin/docker –

+0

すべての明白な点をチェックしていればうまくいくはずです。 selinuxビットがディレクトリリストに設定されているのを見ています。もし無効になっていなければ、次にそれを試してみましょう。 – BMitch

答えて

1

selinuxに遭遇したようです。コマンドsestatusを実行すると、あなたはそれがであるもののモードを知らせます。あなたはSELinuxを幸せにするために追加する必要がありますルールものについてより多くの情報を得るためにenforcing

だろうあなたのケースでは、私はあなたがSELinuxを設定することをお勧めこのファイルを編集して/etc/sysconfig/selinuxを編集してから再起動してpermissiveに変更してください。再起動せずにモードを変更する方法もあると思います(永続的ではありませんが)。

selinuxがpermissiveモードになると(ログのみでブロックされません)、jenkinsジョブを実行している間にログを末尾に/var/log/audit/audit.logにすることができます。これにより、どのアクセス許可が必要かを知ることができます。

+0

お返事ありがとうございました。私は提案された解決策を試しましたが、同じエラーメッセージが表示されます –

+0

はselinuxまたはapparmorが有効になっていますか? – gbolo

+0

こんにちはgbolo、私はselinuxを無効にしました。これで正常に実行されました:)私の唯一の懸念はselinuxを無効にすることの結果ですか? '/ etc/sysconfig/selinux'を修正し、selingを' SELINUX = disbaled'に変更することで無効にしました。これを行うにはより細かい方法があるかどうかは不明です。 –

関連する問題