图说jenkins pipeline处理前端项目--(4)执行远程主机上的脚本

124 阅读1分钟

上一篇

图说jenkins pipeline处理前端项目--(3)将打包结果上传远程主机 - 掘金 (juejin.cn)

前置条件:让jenkins所在主机能免密登录远程主机

实现方式,详见上一篇文章

执行远程主机上的脚本

先给出脚本test.sh

#!/bin/sh

touch hello
  • 执行该脚本会在当前目录创建hello文件
  • 注意要给test.sh设置可执行权限
  • 注意test.sh中的shell类型,因为我的是alpine linux,因此只有/bin/sh, 所以设置的也是/bin/sh

配置流水线脚本

sshagent配置方式,详见上一篇

image.png

image.png

脚本内容说明

ssh -o StrictHostKeyChecking=no -i ${SSH_KEY} ${SSH_USER}@${SSH_HOST} "
                            cd /root/workspace && 
                            chmod +x test.sh && 
                            ./test.sh
                        "

-o StrictHostKeyChecking=no: 使用ssh命令时,可能会有两处交互的地方,这个配置是为了跳过第一个询问

-i ${SSH_KEY}: 指定ssh密钥文件绝对路径

${SSH_USER}@${SSH_HOST}: 指定连接的主机ip,以及账号

下面这部分则是实际需要执行的脚本:进入cd /root/workspace, 将/root/workspace/test.sh文件设置为可执行,然后执行该文件

"
                            cd /root/workspace && 
                            chmod +x test.sh && 
                            ./test.sh
                        "

image.png

image.png

完整流水线脚本内容

pipeline {
    agent any
    // 自定义环境变量
    environment {
        // 远程主机的账号
        SSH_USER = 'root'
        // 远程主机的ip。因为我用的docker,且该容器已加入自定义网络,所以可以使用荣启名,代替ip
        SSH_HOST = 'myalpine2'
        // 本地ssh密钥文件绝对路径
        SSH_KEY = '/root/.ssh/id_ed25519' // Path to your private key file
    }
    stages {
        stage('拉取代码') {
            steps {
                checkout scmGit(branches: [[name: '*/main']], extensions: [], userRemoteConfigs: [[credentialsId: 'vite-project-repo-account-pwd', url: 'http://192.168.31.200:5000/pan/vite-project.git']])
            }
        }
        stage('安装依赖') {
            steps {
                sh 'pnpm install'    
            }
        }
        stage('打包') {
            steps {
                sh 'pnpm run build'    
            }
        }
        stage('打包结果上传') {
            steps {
                script {
                    sshagent(['myalpine2-ssh-key']) {
                        sh 'echo job工作目录: $WORKSPACE'
                        sh 'scp -r $WORKSPACE/dist root@myalpine2:/root/workspace/'
                    }
                }
            }
        }
        stage('执行远程主机脚本') {
            steps {
                script {
                    sshagent(['myalpine2-ssh-key']) {
                        sh """
                        ssh -o StrictHostKeyChecking=no -i ${SSH_KEY} ${SSH_USER}@${SSH_HOST} "
                            cd /root/workspace && 
                            chmod +x test.sh && 
                            ./test.sh
                        "
                        """
                    }
                }
            }
        }
    }
}