远端服务器
功能介绍
使用持续集成任务还可以部署简易项目至远端 Linux 服务器中,下文将介绍操作步骤:
1. 录入 SSH 密钥
获取服务器的 SSH 密钥对,并将私钥录入至 CODING 项目设置中的凭据管理中。
若服务器中还未生成 SSH 密钥对,可以参考此文档进行生成。
2. 配置持续集成
在持续集成中参考下述 Jenkinsfile
,在构建机中编译 Maven 制品后再使用 SSH 协议登录至远端服务器中完成制品发布。
Jenkinsfile
pipeline {
agent any
stages {
stage('检出') {
steps {
checkout(
[$class: 'GitSCM', branches: [[name: env.GIT_BUILD_REF]],
userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]]
)
}
}
stage('构建') {
steps {
echo '构建中...'
// Java Spring Boot Gradle Jar
// sh './gradlew bootJar'
// Java Spring Boot Gradle War
// sh './gradlew bootWar'
// Java Maven
// sh 'mvn package'
// sh 'ls target/'
// PHP
// sh 'composer install --optimize-autoloader --no-dev'
// sh 'tar -zcf /tmp/tmp.tar.gz .'
// 静态资源
sh 'tar -zcf /tmp/tmp.tar.gz apache2/ site/'
echo '构建完成.'
}
}
stage('部署') {
steps {
echo '部署中...'
script {
// 声明服务器信息
def remote = [:]
remote.name = 'web-server'
remote.allowAnyHosts = true
remote.host = '106.54.86.239'
remote.port = 22
remote.user = 'ubuntu'
// 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 id_rsa 无需修改
withCredentials([sshUserPrivateKey(credentialsId: "c4af855d-402a-4f38-9c83-f6226ae3441c", keyFileVariable: 'id_rsa')]) {
remote.identityFile = id_rsa
// SSH 上传文件到远端服务器
sshPut remote: remote, from: '/tmp/tmp.tar.gz', into: '/tmp/'
// 解压缩
sshCommand remote: remote, command: "tar -zxf /tmp/tmp.tar.gz -C /tmp/"
sshCommand remote: remote, sudo: true, command: "mkdir -p /var/www/example-site"
sshCommand remote: remote, sudo: true, command: "cp -R /tmp/site/* /var/www/example-site/"
sshCommand remote: remote, sudo: true, command: "cp -R /tmp/apache2/ /etc/"
// 重启 apache2
sshCommand remote: remote, sudo: true, command: "a2ensite example.com"
sshCommand remote: remote, sudo: true, command: "a2enmod headers rewrite ssl"
sshCommand remote: remote, sudo: true, command: "systemctl reload apache2"
}
}
echo '部署完成'
}
}
}
}
相比于使用账号密码登录登录远端服务器,使用 SSH 密钥对方式获取服务器的控制权会更加安全。若仍希望使用账号密码登录远端服务器,可以参考下述 Jenkinsfile
:
// 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 username 和 password 无需修改
withCredentials([usernamePassword(credentialsId: "xxx", usernameVariable: 'username', passwordVariable: 'password')]) {
remote.user = username
remote.password = password
sshPut remote: remote, from: '/tmp/tmp.tar.gz', into: '/tmp/'
}
问题反馈 >
2022-05-10最近更新
感谢反馈有用
感谢反馈没用
在阅读中是否遇到以下问题?*
您希望我们如何改进?*
如果您希望得到回复,请留下您的邮箱地址。