簡體   English   中英

管道中的jenkins docker插件使用-u標志,怎么可能不使用

[英]jenkins docker plugin in pipeline use -u flag, how is possible to not using

我正在使用帶有docker插件的jenkins版本2.89.1。 在聲明性管道的一個階段,我啟動了一個安裝了ansible 2.4.x的docker容器,以便運行一些playbooks,如下所示:

     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容器應該與jenkins服務器具有相同的uid和gid?

非常感謝Marco

默認情況下,當未指定用戶時,docker使用dockerfile中定義的用戶激活容器,如果未指定,則為root。 您可以嘗試通過傳遞強制默認用戶:

args '-u root:root -v /var/lib/jenkins/workspace/myworkspace:/tmp/' +
                        ' -v /var/lib/jenkins/.ssh:/root/.ssh'

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM