В моей компании я запускаю конвейер как проект кода, в котором мой Jenkinsfile получает динамический IP из сценария оболочки и внедряет его в переменную среды PrivateIP.Следующий шаг вызывает пользовательский плагин (разработанный внутри компании), который принимает аргумент «серверы» в качестве IP-адресов, хотя, предположительно, не анализирует его правильно, поскольку вывод ошибки указывает на неразрешимый хост.
IВызвали переменную PrivateIP сразу после шага плагина, и он определенно выдает правильное значение.
Плагин работает, если ему дано жесткое значение для IP, но не работает, если ему дано что-то динамическое.Встроенные модули, такие как dir
, не создают подобных проблем.Мне не удалось заполучить разработчика плагина, чтобы сообщить о проблеме, и я не получил ни одного ответа на мою проблему.Это типично для пользовательских плагинов?Я видел некоторую документацию в документации разработчика плагинов , которая предполагает, что в плагинах конвейера соблюдается только начальная стадия среды, в противном случае для получения контекстной среды требуется @StepContextParameter
.
stage('Provision') {
environment {
PrivateIP = """${sh(
returnStdout: true,
script: '${WORKSPACE}/cicd/parse-ip.sh'
)}"""
}
steps {
echo "Calling Playbook. PrivateIP: ${PrivateIP}"
customPluginName env: 'AWS',
os: 'Linux',
parameter: '',
password: '',
playbook: 'provision.yaml',
servers: PrivateIP,
gitBranch: '{my branch}',
gitUrl: '{URL}',
username: '{custom user}'
}
}
Я ожидаю, что переменная будет соблюдена и успешно выполнит Ansible Playbook.
Ошибка
>>> fatal: [ansible_ssh_user = {customпользователь}]: недоступно!=> {"change": false, "msg": "Не удалось подключиться к хосту через ssh: ssh: Не удалось разрешить имя хоста ansible_ssh_user = {custom user} : Имя или служба неизвестны \ r \n "," unreachable ": true}
Если это на самом деле поведение пользовательских подключаемых модулей по умолчанию (не обязательно ошибка), каковы хорошие способы обхода?