2017-04-20 160 views
0

我知道有一个相关的问题在这里:Invoke Ansible playbook in Jenkins执行Ansible剧本使用詹金斯

但这个问题是,在某些观点不同:

所以我詹金斯和Ansible安装在单个服务器(EC2实例)。我创建了一个playbook.yml文件,将文件从该服务器复制到另一台服务器。这是成功的,如果我使用ec2用户做一个剧本playbook.yml。

如果我尝试使用Jenkins(创建一个项目并添加构建步骤作为运行剧本,并提及playbook.yml的位置并以sudo ec2用户身份运行),也是如此。这是与错误而失败:

fatal: [172.xx.xx.xx]: UNREACHABLE! => {"changed": false, "msg": "Failed to connect to the host via ssh: no such identity: /home/ec2-user/.ssh/Host_Keypair.pem: Permission denied\r\nPermission denied (publickey).\r\n", "unreachable": true} 
to retry, use: --limit @/var/lib/jenkins/workspace/Ansible/copy.retr 

playbook.yml:

--- 
- hosts: 172.xx.xx.xx 
    remote_user: ec2-user 
    become: yes 
    become_method: sudo 
    tasks: 
    - copy: 
    src: /var/lib/jenkins/workspace/Ansible/myfile.conf 
    dest: /etc/myfile.conf 
    owner: ec2-user 
    group: ec2-user 
    mode: 0644 

我被困在这,不能够移动到下一个步骤不执行此操作。任何人都可以请帮我了解我失踪的其他配置(可能在Jenkins方面)。任何帮助将非常感激。

回答

1

Playbook在jenkins用户下执行,该用户无法访问ansible/jenkins主机上的/home/ec2-user/.ssh/Host_Keypair.pem密钥以在远程服务器上进行身份验证。

有一个错误信息:

no such identity: /home/ec2-user/.ssh/Host_Keypair.pem: Permission denied

+0

所以,你有什么建议的解决方案吗?我相信jenkins用户不是登录用户,而是我的服务帐户,如果我没有错。 – serverstackqns

+0

修复权限问题,所以'jenkins'用户可以读取连接远程主机所需的ssh-key。例如,在某处复制'Host_Keypair.pem',将'chown'复制为'jenkins'。 –

+0

而不是复制,我可以将詹金斯chown到原始的pem文件吗?这是最好的方式吗? – serverstackqns