我一天中的大部分时间都在想这个问题,我尽我所能都没有成功,即使在系统管理员的帮助下。(请注意,我根本不是一个可靠的专家,我今天发现了这一点)
上下文:我试图通过gitlab运行实现java服务的连续集成。管道将在推送过程中运行测试、打包jar,然后运行一个可用的剧本来停止现有服务、替换jar,然后再次启动服务。我们在google cloud中有这样的产品,它运行得很好。我正试图在这之前添加一个额外的步骤,在localhost上执行同样的操作。
我只是不明白为什么ansible无法执行“sudo service XXXX stop | start”。我只知道
致命:[本地主机]:失败=&燃气轮机;{“changed”:false,“failed”:true,“module\u stderr”:“抱歉,请重试。\n[sudo via ansible,key=nbjplyhtvodoeqooejtlnhxhqubbjy]密码:\n密码:\n密码:1次错误的密码尝试\n”,“module\u stdout”:“,”msg“:”module FAILURE“,”rc“:1}
以下是我所称的gitlab管道阶段:
indexer-integration:
stage: deploy integration
script:
- ansible-playbook -i ~/git/ansible/inventory deploy_integration.yml --vault-password-file=/home/gitlab-runner/vault.txt
when: on_success
金库txt包含vault加密密码。下面是deploy\u集成。yml公司
---
- name: deploy integration saleindexer
hosts: localhost
gather_facts: no
user: test-ccc #this is the user that I created as a test
connection: local
vars_files:
- /home/gitlab-runner/secret.txt #holds the sudo password
tasks:
- name: Stop indexer
service: name=indexer state=stopped
become: true
become_user: root
- name: Clean JAR
become: true
become_user: root
file:
state: absent
path: '/PATH/indexer-latest.jar'
- name: Copy JAR
become: true
become_user: root
copy:
src: 'target/indexer-latest.jar'
dest: '/PATH/indexer-latest.jar'
- name: Start indexer
service: name=indexer state=started
become: true
become_user: root
用户“test ccc”是我创建的另一个用户(组根的一部分,在sudoer文件中),以确保它不是与gitlab runner用户相关的问题(因为这里显然没有人能记住该用户xD的sudo密码)
我试过很多好东西,包括
shell: echo 'password' | sudo -S service indexer stop
在命令行中工作。但如果由ansible执行,我得到的只是一条提示消息,要求我输入sudo密码
谢谢
按评论请求编辑:机密。txt具有:
ansible_become_pass: password
在命令行中使用该用户时(su用户/sudo服务启动…)并提示输入密码,效果良好。我认为问题在于,要么ansible总是提示输入密码,要么密码没有正确传递给任务。
sshd\u config有一行“permitrotlogin yes”