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

У меня есть 2 экземпляра aws ubuntu: 1-й сервер и 2-й сервер.

Ниже приведен мой сценарий конвейера jenkins, который создает образ докера, запускает контейнер на 1-м сервере и отправляет изображение в репозиторий концентратора докеров. Работает нормально.

Я хочу вытащить образ и развернуть его на 2-м сервере.

Когда я использую ssh для 2-го сервера через сценарий конвейера ниже, но он входит на 1-й сервер, даже если учетные данные ssh ('my-ssh-key') принадлежат 2-му серверу. Я смущен тем, как он регистрируется на 1-м сервере, и я проверил сенсорные команды, поэтому файл создается на 1-м сервере.

pipeline {
  environment {
    registry = "docker-user/docker-repo"
    registryCredential = 'docker-cred'
    dockerImage = ''
  }
  agent any
  stages {
    stage('Cloning Git') {
      steps {
        git url: 'https://github.com/git-user/jenkins-flask-tutorial.git/'
      }
    }
    stage('Building image') {
      steps{
        script {
          sh "sudo docker build -t flask-app-one ."
          sh "sudo docker run -p 5000:5000 --name flask-app-one -d flask-app-one "
          sh "docker tag flask-app-one:latest docker-user/myrepo:flask-app-push-test"
        }
      }
    }
    stage('Push Image') {
      steps{
        script {
          docker.withRegistry( '', registryCredential ) {
          sh "docker push docker-user/docker-repo:flask-app-push-test"
          sshagent(['my-ssh-key']) {
            sh 'ssh -o StrictHostKeyChecking=no ubuntu@2ndserver && cd /home/ubuntu/ && sudo touch test-file && docker pull docker-user/docker-repo:flask-app-push-test'
          }
         } 
        }
      }
    }

Мой вопрос: как войти на второй сервер и вытащить изображение докера на второй сервер через сценарий конвейера Дженкинса? Помогите мне, где я делаю не так.


person rajeev singh    schedule 29.09.2020    source источник
comment
Примечание. Вы можете ограничить authorized_keys command запуском сценария ie deploy.sh. который существует на удаленном сервере с командами для развертывания изображений и использования ssh_config, чтобы скрыть сведения о соединении (например, User) для хоста. Тогда это просто ssh 2ndserver на этапе вашего конвейера.   -  person masseyb    schedule 29.09.2020
comment
Похоже, проблема связана с вашей ssh командой, вы && объединяете команды вместе (например, если ssh возвращает 0, тогда cd ... - вы не хотите, чтобы ssh выходил), когда вы хотите выполнить команды на удаленном хосте. (например, ssh -o StrictHostKeyChecking=no ubuntu@2ndserver "cd /home/ubuntu/ && ..."). Этот ответ правильный.   -  person masseyb    schedule 29.09.2020
comment
Вы можете указать первый сервер как agent для начальных этапов, а затем второй сервер как agent для последующих этапов. agent any блокирует вас здесь.   -  person Matt Schuchard    schedule 29.09.2020


Ответы (1)


Это скорее альтернатива, чем решение. Вы можете выполнять удаленные команды как часть ssh. Это выполнит команду на сервере и отключится.

ssh name@ip "ls -la /home/ubuntu/"
person abskmj    schedule 29.09.2020