首页 > 解决方案 > Jenkins 管道中的单一 SSH 连接

问题描述

我创建了 Jenkinsfile 用于在生产中构建我的项目,管道如下所示:

pipeline {
  agent any
  stages {
    stage('Pull') {
      steps {
        sh '''ssh ${SSH_USER}@${SERVER_ADDRESS} <<EOF
              cd ${SOURCE_FOLDER}/project 
              git pull
              git status
           EOF'''
      }
    }
    stage('Composer') {
      parallel {
        stage('Composer') {
          steps {
            sh '''ssh ${SSH_USER}@${SERVER_ADDRESS} <<EOF 
                  docker run --rm -v ${SOURCE_FOLDER}/project:/app composer/composer:latest install
               EOF'''
          }
        }
        stage('Composer 2') {
          steps {
            sh '''ssh ${SSH_USER}@${SERVER_ADDRESS} <<EOF
                  docker run --rm -v ${SOURCE_FOLDER}/project/sub:/app 
composer/composer:latest install
               EOF'''
          }
        }
      }
   }
  }
 }

有没有办法将所有阶段都放在一个 SSH 连接中,以最大限度地减少开销和连接数?

我通过创建密钥并将公钥粘贴到生产机器上手动完成了所有 SSL 工作。

标签: dockerjenkinssshjenkins-pipeline

解决方案


您可以为连接创建一个函数并将 SSH_USER 和 SERVER_ADDRESS 作为输入参数传递给该函数。从所有阶段调用此函数。


推荐阅读