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 commandmodule. commandn'utilise pas de shell, donc toute votre ligne de commande est passée à en cdtant qu'arguments. Vous devriez plutôt utiliser le shellmodule 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

Posts les plus consultés de ce blog

Erreur Symfony : "Une exception a été levée lors du rendu d'un modèle"

Détecter les appuis sur les touches fléchées en JavaScript

Une chaîne vide donne "Des erreurs ont été détectées dans les arguments de la ligne de commande, veuillez vous assurer que tous les arguments sont correctement définis"