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

Comment signer la connexion OKEx API version 5 avec websockets ?

La fonction GCP Cloud pour écrire des données dans BigQuery s'exécute avec succès, mais les données n'apparaissent pas dans la table BigQuery

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