получить адрес агента EC2 из конвейера Jenkins для git push / scp? - PullRequest
0 голосов
/ 17 февраля 2020

Я настраиваю простой конвейер Jenkins с этапом, работающим на агенте AWS EC2.

pipeline {
  agent none 
  stages {
    stage('Prepare') {
      agent { label 'master' }
      steps {
        sh "touch somefile"
        stash includes: "somefile", name:"ARTIFACT"
      }
    }
    stage('AWS') {
      agent { label 'aws' }
      steps {
        unstash 'ARTIFACT'
        sh "cat somefile"
      }
    }
  }
}

Stash / unsta sh работает для простых файлов, но в идеале я бы как прямое s sh соединение, так что я могу сделать репо sh a git на подчиненном устройстве и, возможно, найти каталог. Моя простая проблема заключается в том, что я не знаю publi c DNS / IP ведомого устройства, запущенного плагином EC2, поэтому не могу подключиться.

Я думаю, я мог бы выяснить это с помощью дополнительных сценариев и установки AWS CLI на моих коробках Jenkins. Также я видел предложения использовать S3 и CodeDeploy для добавления sh чего угодно на экземпляры ... однако это кажется более запутанным, чем я хочу, по крайней мере, на начальном этапе.

Я также видел подсказки для использования метаданных экземпляра и запросов http для получения IP / DNS (https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html#configuring -instance-metadata-options ) - опять-таки выглядит намного сложнее, чем я Я ожидаю (возможно, потому что я новичок ie в aws;), поэтому я думаю / надеюсь, что я не на правильном пути.

Также думал о добавлении дополнительного этапа на aws агент, просто войдите в систему и сделайте что-то вроде «ip addr show» и передайте это обратно в конвейер, чтобы на следующем шаге можно было использовать это для «git pu sh» или scp, et c ..

Я бы предположил, что плагин Jenkins EC2 уже знает IP / DNS подчиненному, иначе он не может подключиться сам.

Так что было бы здорово услышать о более простом и надежное решение.

1 Ответ

1 голос
/ 18 февраля 2020

Получить ec2 publi c ip из метаданных через curl.

stage('AWS') {
  agent { label 'aws' }
  steps {
    unstash 'ARTIFACT'

    cmd = '''curl --fail --noproxy '*' http://169.254.169.254/latest/meta-data/public-ipv4'''
    public_ip = sh(script:cmd, returnStdout:true).trim()

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