ansible : `cd : trop d'arguments`
J'essaie d'ajouter une nouvelle section dans notre playbook ansible qui est exécuté via Jenkins. Je suis une erreur en tant que cd: too many arguments
.
code de livre de lecture ansible
- name: "obfuscating python code"
command: "cd /opt/company_name/{{ app_name }}/current/lib/python3.6/site-packages/{{ app_module }}/ & pyarmor obfuscate --src='.' -r __init__.py & cp -r dist/*. & rm -rf dist & cd -"
jenkins exécutant ansible playbook est erroné comme ceci
TASK [python-app: obfuscating python code] ************************************
fatal: [server]: FAILED! => {"changed": true, "cmd": ["cd", "/opt/company_name/app-name/current/lib/python3.6/site-packages/app_name/", "&", "pyarmor", "obfuscate", "--src=.", "-r", "__init__.py", "&", "cp", "-r", "dist/*", ".", "&", "rm", "-rf", "dist", "&", "cd", "-"], "delta": "0:00:00.005432", "end": "2022-04-14 23:02:46.568316", "msg": "non-zero return code", "rc": 1, "start": "2022-04-14 23:02:46.562884", "stderr": "/bin/cd: line 2: cd: too many arguments", "stderr_lines": ["/bin/cd: line 2: cd: too many arguments"], "stdout": "", "stdout_lines": []}
MISE À JOUR: j'ai mis à jour le code comme suggéré avec plus de commandes que j'aimerais activer env virtuel python avant d'exécuter le pyarmor, il échoue maintenant avecNo such file or directory: 'source'
- name: "obfuscating python code"
command: "source /opt/company_name/{{ app_name }}/current/bin/activate && pyarmor obfuscate --src='.' -r __init__.py && cp -fr dist/*. && rm -rf dist"
chdir: /opt/intuitive/{{ app_name }}/current/lib/python3.6/site-packages/{{ app_module }}/
TASK [python-app: obfuscating python code] ************************************
fatal: [server]: FAILED! => {"changed": false, "cmd": "source /opt/company/app-name/current/bin/activate '&&' pyarmor obfuscate --src=. -r __init__.py '&&' cp -fr 'dist/*'. '&&' rm -rf dist", "msg": "[Errno 2] No such file or directory: 'source': 'source'", "rc": 2}
Solution du problème
Vous essayez d'utiliser les fonctionnalités du shell avec le command
module. command
n'utilise pas de shell, donc toute votre ligne de commande est passée à en cd
tant qu'arguments. Vous devriez plutôt utiliser le shell
module lorsque vous utilisez des fonctionnalités du shell telles que les pipelines, la globalisation de fichiers, etc.
Vous pouvez également utiliser la prise en charge intégrée du module pour définir le répertoire de travail afin de raccourcir un peu votre commande.
- name: Obfuscate python code
shell:
cmd: pyarmor obfuscate --src='.' -r __init__.py && cp -r dist/*. && rm -rf dist
chdir: /opt/company_name/{{ app_name }}/current/lib/python3.6/site-packages/{{ app_module }}
Commentaires
Enregistrer un commentaire