2017-04-20 130 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