来自jenkins job的shell和bash on docker container

时间:2017-07-31 13:47:50

标签: shell docker jenkins

我已经在docker容器上安装了jenkins master并使用docker容器中的Swarm插件运行了slave。我在docker slave中创建了一个组。使用docker exec -it <container> bash输入从属容器并输入groups后,我正确列出了我创建的组。

但是,当我在作业说明shell中键入groups并在该创建的从站上执行作业时,我的组不会出现。

修改的: 从属容器:只需以用户jenkins启动jenkins-slave。启动时,通过CMD [ "/startup.sh" ]执行以下代码(脚本:startup.sh)。 jenkins-slave.sh下提供了DOCKER_SOCKET=/var/run/docker.sock DOCKER_GROUP=dockergrp JENKINS_USER=jenkins if [ -S ${DOCKER_SOCKET} ]; then DOCKER_GID=$(stat -c '%g' ${DOCKER_SOCKET}) sudo groupadd -for -g ${DOCKER_GID} ${DOCKER_GROUP} sudo usermod -aG ${DOCKER_GROUP} ${JENKINS_USER} fi /usr/local/bin/jenkins-slave.sh

docker exec -it 8b85afe2b360 groups

从bash启动后:jenkins dockergrp输出whoami groups docker ps

触发包含以下代码的作业:

 jenkins
 jenkins
 Got permission denied while trying to connect to the Docker 
         daemon socket at unix:///var/run/docker.sock: Get 
         http://%2Fvar%2Frun%2Fdocker.sock/v1.30/containers/json: dial 
         unix /var/run/docker.sock: connect: permission denied

输出

dockergrp

第二行中缺少组sudo

总的来说,我无法在没有docker exec -it <id> docker ps的情况下访问docker守护程序,问题似乎是缺少的组。运行命令from selenium import webdriver from selenium.webdriver import DesiredCapabilities desired_capabilities = DesiredCapabilities.PHANTOMJS.copy() desired_capabilities['phantomjs.page.customHeaders.User-Agent'] = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) ' \ 'AppleWebKit/537.36 (KHTML, like Gecko) ' \ 'Chrome/39.0.2171.95 Safari/537.36' driver = webdriver.PhantomJS('./phantom/bin/phantomjs.exe', desired_capabilities=desired_capabilities) driver.get('http://facebook.com') 可以成功输出正在运行的容器。

1 个答案:

答案 0 :(得分:1)

添加组时存在已知问题,未为已登录的用户重新加载。

尝试将最后一行更改为:

sudo su -l jenkins -c /usr/local/bin/jenkins-slave.sh

为了在新的jenkins登录下启动脚本。

注意:您可以添加exec指令以便没有子进程,所以只需替换当前的进程:

exec sudo su -l jenkins -c /usr/local/bin/jenkins-slave.sh