我正在使用带有docker插件的jenkins版本2.89.1。 在声明性管道的一个阶段,我启动了一个安装了ansible 2.4.x的docker容器,以便运行一些剧本如下:
agent {
docker {
image 'myself/ansible:1.0.3'
registryUrl 'https://my-artifactory-pro'
registryCredentialsId 'my-credentials'
args '-v /var/lib/jenkins/workspace/myworkspace:/tmp/' +
' -v /var/lib/jenkins/.ssh:/root/.ssh'
}
}
steps {
echo 'Deploying Ansible Server via docker image'
sh "ansible-playbook -i /tmp/my-inventories-path/
/my-playbooks/teardown.yaml "+
"--extra-vars 'platform=ec2
aws_access_key=${AWS_ACCESS_KEY_ID}
aws_secret_key=${AWS_SECRET_ACCESS_KEY} "+
" eip_bastion_host=${EIP_BASTION_HOST}
eip_load_balancer=${EIP_LOAD_BALANCER} '"
}
管道设法旋转docker容器并尝试执行ansible playbook,但我遇到了以下问题:
+ ansible-playbook -i /tmp/my-inventories/ /tmp/my-playbooks/teardown.yaml --extra-vars platform=ec2 aws_access_key=**** aws_secret_key=**** eip_bastion_host=X.X.X.X eip_load_balancer=X.X.X.X
[WARNING]: Unable to set correct type for configuration entry:
DEFAULT_LOCAL_TMP
PLAY [localhost] ***************************************************************
TASK [install_python_pip : Create pip folder] **********************************
An exception occurred during task execution. To see the full traceback, use -vvv. The error was: KeyError: 'getpwuid(): uid not found: 112'
fatal: [localhost]: FAILED! => {"msg": "Unexpected failure during module execution.", "stdout": ""}
to retry, use: --limit @/tmp/my-playbooks/teardown.retry
PLAY RECAP *********************************************************************
localhost : ok=0 changed=0 unreachable=0 failed=1
查看Jenkins日志,我看到当它旋转docker容器时,它会以下列方式启动:
docker run -t -d -u 112:116 -v /var/lib/jenkins/workspace/my-workspace --entrypoint cat myself/ansible:1.0.3
其中112是jenkins uid,而116是jenkins gid。
如果我在没有-u标志的情况下手动启动同一个容器中启动相同的ansible playbook,它可以正常工作。
然后是否可以 启动容器而不使用-u标志 ??? 为什么认为docker容器应该具有相同的uid& amp;詹妮丝服务器的gid?
提前多多感谢 马可
答案 0 :(得分:0)
默认情况下,当未指定用户时,docker使用dockerfile中定义的用户激活容器,如果未指定,则为root。 您可以尝试通过传递强制默认用户:
args '-u root:root -v /var/lib/jenkins/workspace/myworkspace:/tmp/' +
' -v /var/lib/jenkins/.ssh:/root/.ssh'