Jenkins 自由风格作业中调用 ansible-playbook 的权限被拒绝消息
Permission denied Message in Jenkins Free style Job for calling ansible-playbook
我的申请
我正在尝试创建一个 Jenkins 作业来实施我的 CI/CD 管道。我正在使用 SVN 存储库进行版本控制。当我提交到这个存储库时,Jenkins 中的作业配置需要触发并需要调用一个 Ansible Playbook YML 文件。我正在使用 Ansible 剧本配置管道的每个阶段。
我目前的做法
我创建了一个 svn 存储库并在 hooks 目录中配置了 post-commit 钩子。我创建了一个 Ansible 剧本。我正在使用这个 Ansible 剧本构建我所有的管道阶段。
当我手动 运行 Ansible 剧本时,它成功运行。但是当我创建一个詹金斯工作并使用工作调用这个剧本时,Ansible 部分显示 "Red Crossmark".
我在 Jenkins 上执行的步骤
- 创建了新的 jenkins 自由风格项目
- 编辑了项目的描述
- 在源代码管理中选择 "Subversion" 并添加 SVN 存储库 URL 和凭据
- 已在“生成触发器”部分选中 "Poll SCM"
- 在构建部分选择 "Invoke Ansible Playbook " 并添加剧本 Url。
下图显示了调用 ansible 部分,
更新
注意: 使用 sudo 复选框选中状态
错误
当我尝试申请时,它没有显示任何内容。如果我保存并再次从仪表板获取,它显示 "Failed"。就像下面的屏幕截图,
更新控制台输出错误
TASK [Gathering Facts] *********************************************************
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
to retry, use: --limit @/home/spacestudy/pipelinesite.retry
PLAY RECAP *********************************************************************
localhost : ok=0 changed=0 unreachable=0 failed=1
通过取消选中 sudo 复选框更新了尝试
TASK [pipelinerole : login into dockerhub] *************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', error(13, 'Permission denied'))"}
to retry, use: --limit @/home/spacestudy/pipelinesite.retry
在 EC2
上通过 Shell 命令直接测试方法
注意:
当我 运行 直接在我的 EC2 上执行“$ansible-playbook” shell command 命令时,得到同样的错误。但是当我 运行 shell 命令 "$sudo ansible-playbook" 时,没有得到错误。因此,我在这里也选中了 "sudo" 复选框。但是我越来越不一样了。
如何解决工作失败的问题以及无法申请的原因?
也许问题出在 SVN 存储库的权限上?是否需要身份验证?
错误是 Connection aborted.', error(13, 'Permission denied
和 sudo: a password is required
。根据屏幕截图,您没有指定任何用户凭据。当您的构建机器访问 SVN 服务器和存储库时,它似乎必须提供用户名和密码。如果您现在指定凭据但仍然看到错误,请确保它们是正确的并且用户帐户对存储库具有读取权限。
我的申请
我正在尝试创建一个 Jenkins 作业来实施我的 CI/CD 管道。我正在使用 SVN 存储库进行版本控制。当我提交到这个存储库时,Jenkins 中的作业配置需要触发并需要调用一个 Ansible Playbook YML 文件。我正在使用 Ansible 剧本配置管道的每个阶段。
我目前的做法
我创建了一个 svn 存储库并在 hooks 目录中配置了 post-commit 钩子。我创建了一个 Ansible 剧本。我正在使用这个 Ansible 剧本构建我所有的管道阶段。
当我手动 运行 Ansible 剧本时,它成功运行。但是当我创建一个詹金斯工作并使用工作调用这个剧本时,Ansible 部分显示 "Red Crossmark".
我在 Jenkins 上执行的步骤
- 创建了新的 jenkins 自由风格项目
- 编辑了项目的描述
- 在源代码管理中选择 "Subversion" 并添加 SVN 存储库 URL 和凭据
- 已在“生成触发器”部分选中 "Poll SCM"
- 在构建部分选择 "Invoke Ansible Playbook " 并添加剧本 Url。
下图显示了调用 ansible 部分,
更新
注意: 使用 sudo 复选框选中状态
错误
当我尝试申请时,它没有显示任何内容。如果我保存并再次从仪表板获取,它显示 "Failed"。就像下面的屏幕截图,
更新控制台输出错误
TASK [Gathering Facts] *********************************************************
fatal: [localhost]: FAILED! => {"changed": false, "module_stderr": "sudo: a password is required\n", "module_stdout": "", "msg": "MODULE FAILURE\nSee stdout/stderr for the exact error", "rc": 1}
to retry, use: --limit @/home/spacestudy/pipelinesite.retry
PLAY RECAP *********************************************************************
localhost : ok=0 changed=0 unreachable=0 failed=1
通过取消选中 sudo 复选框更新了尝试
TASK [pipelinerole : login into dockerhub] *************************************
fatal: [localhost]: FAILED! => {"changed": false, "msg": "Error connecting: Error while fetching server API version: ('Connection aborted.', error(13, 'Permission denied'))"}
to retry, use: --limit @/home/spacestudy/pipelinesite.retry
在 EC2
上通过 Shell 命令直接测试方法注意:
当我 运行 直接在我的 EC2 上执行“$ansible-playbook” shell command 命令时,得到同样的错误。但是当我 运行 shell 命令 "$sudo ansible-playbook" 时,没有得到错误。因此,我在这里也选中了 "sudo" 复选框。但是我越来越不一样了。
如何解决工作失败的问题以及无法申请的原因?
也许问题出在 SVN 存储库的权限上?是否需要身份验证?
错误是 Connection aborted.', error(13, 'Permission denied
和 sudo: a password is required
。根据屏幕截图,您没有指定任何用户凭据。当您的构建机器访问 SVN 服务器和存储库时,它似乎必须提供用户名和密码。如果您现在指定凭据但仍然看到错误,请确保它们是正确的并且用户帐户对存储库具有读取权限。