首页 > 解决方案 > 如何通过 jenkins 管道在远程服务器上拉取和运行 docker 镜像

问题描述

我有 2 个 aws ubuntu 实例:第一个服务器和第二个服务器。

下面是我的 jenkins 管道脚本,它创建 docker 镜像并在第一台服务器上运行容器并将镜像推送到 docker hub repo。这工作正常。

我想提取图像并将其部署在第二台服务器上。

当我通过下面的管道脚本为第二台服务器执行 ssh 但它登录到第一台服务器时,即使 ssh 凭据('my-ssh-key')属于第二台服务器。我很困惑它是如何记录到第一台服务器的,我检查了触摸命令,所以文件是在第一台服务器上创建的。

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'
          }
         } 
        }
      }
    }

我的问题是,如何通过 jenkins 管道脚本登录到第二台服务器并在第二台服务器上拉取 docker 映像?帮我找出我做错的地方。

标签: dockerjenkinsdockerfilejenkins-pipelinejenkins-groovy

解决方案


这更像是一种替代方案而不是解决方案。您可以将远程命令作为 ssh 的一部分执行。这将在服务器上执行命令并断开连接。

ssh name@ip "ls -la /home/ubuntu/"

推荐阅读