Jenkins Ansible playbook仅针对每个环境执行特定任务

Jenkins Ansible playbook仅针对每个环境执行特定任务,jenkins,ansible,Jenkins,Ansible,我有一本包含一系列任务的剧本: vars: params_ENV_SERVER: "{{ lookup('env', 'ENV_SERVER') }}" params_UML_SUFFIX: "{{ lookup('env', 'UML_SUFFIX') }}" tasks: - name: delete previous files shell: ssh deploy@{{ params_ENV_SERVER }} sudo rm -r

我有一本包含一系列任务的剧本:

vars:
  params_ENV_SERVER: "{{ lookup('env', 'ENV_SERVER') }}"
  params_UML_SUFFIX: "{{ lookup('env', 'UML_SUFFIX') }}"

tasks:

- name: delete previous files 
  shell: ssh deploy@{{ params_ENV_SERVER }} sudo rm -rf /opt/jenkins-files/*
  become: true
  become_user: deploy
  
- name: create build dir
  shell: ssh deploy@{{ params_ENV_SERVER }} sudo mkdir -p /opt/jenkins-files/build
  become: true
  become_user: deploy
  
- name: chown build dir
  shell: ssh deploy@{{ params_ENV_SERVER }} sudo chown -R deploy:deploy /opt/jenkins-files
  become: true
  become_user: deploy
  
我从Jenkinsfile为PROD和QA env-s调用该文件:

 withEnv(["ENV_SERVER=192.168.1.30","UML_SUFFIX=stage-QA"]) {
     sh "ansible-playbook nginx-depl.yml --limit 127.0.0.1" 
 }                        
 withEnv(["ENV_SERVER=192.168.1.130","UML_SUFFIX=stage-PROD"]) {
     sh "ansible-playbook nginx-depl.yml --limit 127.0.0.1" 

是否有可能以某种方式修改剧本,在QA上执行所有任务,在PROD上只执行第2次和第3次任务?

这就是您想要的吗

-名称:删除以前的文件
shell:ssh部署{{params_ENV_SERVER}}sudo rm-rf/opt/jenkins文件/*
变成:真的
成为用户:部署
当:“params_UML_后缀==‘阶段QA’”
-名称:创建生成目录
shell:ssh deploy@{params_ENV_SERVER}sudo mkdir-p/opt/jenkins files/build
变成:真的
成为用户:部署
当:“params_UML_后缀==‘stage QA’”或
“params_UML_后缀==‘stage PROD’”
-姓名:chown build dir
shell:ssh deploy@{params_ENV_SERVER}sudo chown-R deploy:deploy/opt/jenkins文件
变成:真的
成为用户:部署
当:“params_UML_后缀==‘stage QA’”或
“params_UML_后缀==‘stage PROD’”

或者,“Ansible方式”将创建库存

shell>cat主机
[产品]
192.168.1.130
[质询]
192.168.1.30
并在剧本中声明所有主机

shell>cat playbook.yml
-主持人:全部
任务:
-调试:
msg:“删除以前的文件。
在{{inventory\u hostname}}上执行模块文件
时间:在groups.qa中清点\u主机名
-调试:
msg:“创建构建目录。
在{{inventory\u hostname}}上执行模块文件
时间:在groups.qa或
目录\u groups.prod中的主机名
-调试:
msg:“Chown build dir。
在{{inventory\u hostname}}上执行模块文件
时间:在groups.qa或
目录\u groups.prod中的主机名
您可以省略“been:true”和“been_user:deploy”并在命令行上声明远程用户。比如说

shell>ansible playbook-u deploy-i托管playbook.yml
给出(节略)

任务[调试]****
跳过:[192.168.1.130]
确定:[192.168.1.30]=>
删除以前的文件。在192.168.1.30上执行模块文件
任务[调试]****
确定:[192.168.1.130]=>
msg:createbuilddir。在192.168.1.130上执行模块文件
确定:[192.168.1.30]=>
msg:createbuilddir。在192.168.1.30上执行模块文件
任务[调试]****
确定:[192.168.1.30]=>
msg:chownbuilddir。在192.168.1.30上执行模块文件
确定:[192.168.1.130]=>
msg:chownbuilddir。在192.168.1.130上执行模块文件
您可以将执行限制到特定主机或组。例如,下面的命令将仅在prod组上执行

shell>ansible playbook-u deploy-i hosts playbook.yml——limit prod
给出(节略)

任务[调试]****
跳过:[192.168.1.130]
任务[调试]****
确定:[192.168.1.130]=>
msg:createbuilddir。在192.168.1.130上执行模块文件
任务[调试]****
确定:[192.168.1.130]=>
msg:chownbuilddir。在192.168.1.130上执行模块文件

注释

  • “Ansible方法”是在远程主机上执行模块
  • 将调试任务替换为
  • 集成到一个任务“创建构建目录”和“chown构建目录”
  • 如果以用户部署方式运行playbook,则可以省略参数“-u deploy”

您所说的“按质量保证执行”是什么意思?分别。“在生产中”?您仅在“-limit 127.0.0.1”上执行。是的,我在本地执行playbook,但任务是使用ssh在远程服务器上执行的,具体取决于ENV_服务器变量。