Как запустить удаленный серверный скрипт оболочки с параметрами окружения в Jenkins pipeline

Вопрос или проблема

Я пытаюсь запустить shell-скрипт на удаленном сервере в скриптованном пайплайне Jenkins, используя команду sshScript remote: remote, script:. Эта строка кода сейчас выглядит так:

sshScript remote: remote, script: './bash.sh' "$env.gitTag" "$env.Version"

Однако постоянно говорится, что параметры пусты, и возникает ошибка. Я перепробовал всё и не могу найти ответ. Я выводил параметры перед их передачей, и они содержат строки, которые я ожидаю.

15:56:35  WARNING: Unknown parameter(s) found for class type 'org.jenkinsci.plugins.sshsteps.steps.CommandStep': script
[Pipeline] }
[Pipeline] // stage
[Pipeline] }
[Pipeline] // node
[Pipeline] }
[Pipeline] // timestamps
[Pipeline] End of Pipeline
java.lang.IllegalArgumentException: command is null or empty
    at org.jenkinsci.plugins.sshsteps.steps.CommandStep$Execution.run(CommandStep.java:69)
    at org.jenkinsci.plugins.sshsteps.util.SSHStepExecution.lambda$start$0(SSHStepExecution.java:84)
    at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
    at java.base/java.lang.Thread.run(Thread.java:829)
Закончено: НЕУДАЧА

Это ошибки, которые публикуются в конце.

Я думаю, у вас проблема с кавычками.

sshScript remote: remote, script: "./bash.sh $env.gitTag $env.Version"

Я не на 100% уверен, что правильно понял вопрос. Вот мои мысли:

Переменные окружения отправляются на удаленный сервер по ssh только в том случае, если они явно настроены в sshd_config на удаленном сервере. См. параметр AcceptEnv в man sshd_config.

По умолчанию он обычно установлен так:

AcceptEnv LANG LC_* 

Что означает, что только “Язык” настроен для удаленного хоста.

В вашем случае вам нужно настроить на удаленном сервере в /etc/ssh/sshd_config прием переменных.

Ответ или решение

Для выполнения сценариев оболочки на удаленном сервере с помощью Jenkins Pipeline с заданными параметрами окружения, необходимо учесть несколько ключевых моментов. Я опишу последовательность шагов и проверок, которые помогут вам устранить возникающую ошибку и правильно передать параметры вашему скрипту.

Пошаговая инструкция для запуска скрипта на удаленном сервере

  1. Проверка конфигурации Jenkins Pipeline
    Убедитесь, что вы используете правильный синтаксис для команды sshScript. В вашем коде вы можете столкнуться с проблемой из-за некорректной передачи параметров. Попробуйте воспользоваться следующими модификациями:

    sshScript remote: remote, script: "./bash.sh ${env.gitTag} ${env.Version}"

    Обратите внимание на использование фигурных скобок (${}) для доступа к переменным окружения. Это часто помогает избежать проблем с интерпретацией строк, особенно в контексте множества вложенных параметров.

  2. Проверка значений переменных
    Перед выполнением команды убедитесь, что переменные gitTag и Version действительно содержат ожидаемые значения. Добавьте журналирование перед вызовом sshScript:

    echo "Git Tag: ${env.gitTag}"
    echo "Version: ${env.Version}"

    Это позволит вам убедиться, что переменные не пустые и содержат нужные данные.

  3. Настройки SSH на удаленном сервере
    Чтобы передать переменные окружения на удалённый сервер, необходимо убедиться, что сервер настроен для их принятия. Проверьте файл конфигурации SSH (/etc/ssh/sshd_config) на удаленном сервере и добавьте следующее:

    AcceptEnv GIT_TAG VERSION

    Не забудьте перезапустить службу SSH после внесения изменений:

    sudo systemctl restart sshd

    Таким образом, переменные окружения GIT_TAG и VERSION будут доступны на удаленном сервере.

  4. Изменение скрипта bash
    Убедитесь, что ваш скрипт bash.sh корректно обрабатывает параметры. Например, он должен выглядеть следующим образом:

    #!/bin/bash
    echo "Received Git Tag: $1"
    echo "Received Version: $2"

    Это позволит подтвердить, что переменные передаются правильно.

  5. Устранение ошибок выполнения
    Если возникают ошибки, связанные с командой, убедитесь в том, что указан правильный путь к скрипту на удаленном сервере и что у пользователя, выполняющего команду, есть права на запуск этого скрипта.

Заключение

Используя указанные выше шаги, вы сможете успешно передать параметры окружения для выполнения сценария оболочки на удаленном сервере через Jenkins Pipeline. Важно проверить как синтаксис вашего Jenkins Pipeline, так и настройки SSH на удаленном сервере. Если у вас останутся вопросы или возникнут дополнительные ошибки, не стесняйтесь обращаться за помощью.

Оцените материал
Добавить комментарий

Капча загружается...