Как правильно передать учетные данные ssh-steps-плагину `sshCommand` без использования интерполяции строк?

#jenkins #jenkins-pipeline

#дженкинс #дженкинс-конвейер

Вопрос:

итак, у меня есть следующий этап конвейера, который отлично работает:

 stage('Database') {
  steps {
    script {
      remote = createDeployRemote()

      withCredentials([
        usernamePassword(credentialsId: "credential-id", usernameVariable: 'THE_USERNAME', passwordVariable: 'THE_PASSWORD')
      ]) {
        sshCommand remote: remote,
          command: """
            somecommand 
              --username="${THE_USERNAME}" 
              --password="${THE_PASSWORD}"
          """
      }
    }
  }
}
 

Теперь Дженкинс жалуется на следующее предупреждение:

Предупреждение: секрет был передан «sshCommand» с использованием интерполяции строк Groovy, что небезопасно.

Затронутые аргументы использовали следующие переменные: [THE_USERNAME, THE_PASSWORD]

Видишь https://jenkins.io/redirect/groovy-string-interpolation за подробностями.

Конечно, я понимаю, что это небезопасно, но, похоже, это sshCommand не передает ни одну из переменных среды hosts на удаленную машину.

Например, я изменил код на следующий:

 stage('Database') {
  environment {
    THE_CREDS = credentials("credential-id")
  }

  steps {
    script {
      remote = createDeployRemote()

      sshCommand remote: remote,
        command: """
          printenv

          somecommand 
              --username="$THE_CREDS_USR" 
              --password="$THE_CREDS_PSW"
        """
    }
  }
}
 

(printenv должен печатать переменные среды учетных данных)

Итак, возникает вопрос: есть ли какой-либо способ архивировать это без использования интерполяции строк? Я ничего не смог найти в документации.

Спасибо.

Комментарии:

1. Проблема с восходящим потоком: issues.jenkins.io/browse/JENKINS-64552

2. Смотрите документ о конвейере плагинов по адресу jenkins.io/doc/pipeline/steps/credentials-binding о том, как разрешить временные переменные среды внутри команды, а не внутри конвейера, где они будут доступны.

3. @MattSchuchard да, я это понимаю, но при использовании sshCommand (не простого sh) они недоступны.

4. В этом случае вам, вероятно, следует либо удаленно вызвать команду (т. Е. API), либо обернуть команду внутри чего-то локально выполняемого, которое может выполнять SSH (т.Е. Ansible).

5. Хотя Ansible — хорошая идея, мне не нравится, что я вижу, как каждая отдельная команда выполняется как один шаг в BlueOcean. ИТАК, я думаю, я буду придерживаться текущего менее безопасного решения и ждать, пока плагин ssh не реализует что-то для передачи переменных среды. Редактировать : спасибо за ваши усилия.