上一篇
图说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配置方式,详见上一篇
脚本内容说明
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
"
完整流水线脚本内容
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
"
"""
}
}
}
}
}
}