bash -x /var/lib/cloud/instance/user-data.txt выполняется, но пользовательские данные из terraform выдают ошибку - PullRequest
0 голосов
/ 25 апреля 2019

Я пытаюсь запустить скрипт, используя terraform. Содержание пользовательских данных выглядит следующим образом:

.
.
cat <<EOH | java -jar ./jenkins-cli.jar -s $JENKINS_URL -auth admin:$PASSWORD create-credentials-by-xml system::system::jenkins _
<com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey plugin="ssh-credentials@1.16">
  <scope>GLOBAL</scope>
  <id>$CRED_ID</id>
  <description>$SLAVE_IP pem file</description>
  <username>ec2-user</username>
  <privateKeySource class="com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey\$DirectEntryPrivateKeySource">
    <privateKey>${worker_pem}</privateKey>
  </privateKeySource>
</com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey>
EOH
.
.

Когда он выполняется как часть пользовательских данных, он выдает ошибку как No such command create-credentials-by-xml.

Но когда я вхожу в экземпляр и выполняю bash -x /var/lib/cloud/instance/user-data.txt, он работает как положено.

Может кто-нибудь сказать, в чем причина и как это исправить? Спасибо!

Я пробовал #cloudhook и тоже разделял строки, но не сработало.

1 Ответ

2 голосов
/ 30 апреля 2019

Отвечая на мой вопрос:

Где была проблема : Проблема была не в bash, а в самом jenkins-cli.jar.

Сообщение об ошибке показывало No such command create-credentials-by-xml, что заставило меня подумать, что это ошибка bash, но на самом деле это была ошибка файла jar.

Причина : Причиной сбоя при выполнении пользовательских данных, а не при выполнении bash, было то, что он не смог загрузить конфигурацию плагинов за короткий промежуток времени.

Решение : По указанной причине очевидно, что для этого нужно время, поэтому я дал ему sleep 25, чтобы подтвердить, работает он или нет, и да, он работает, но это не было идеальным решением.

Оптимизированное решение : Чтобы сделать его лучше, я перечислил plugins перед выполнением любых команд jar и, если список пуст, перезапустите commnd

# Creating CMD utility for jenkins-cli commands
jenkins_cmd="java -jar /opt/jenkins-cli.jar -s $JENKINS_URL -auth admin:$PASSWORD"

# Waiting for Jenkins to load all plugins
while (( 1 )); do
  count=$($jenkins_cmd list-plugins 2>/dev/null | wc -l)
  ret=$?

  echo "count [$count] ret [$ret]"

  if (( $count > 0 )); then
      break
  fi

  sleep 30
done
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...