文章目录
- maven 项目的编译构建可以用这个
- 2.7 这个要新建的
- 写服务器地址 启用部署到远程服务器
- 新建ssh 登陆凭证 很重要
- SSH 私钥*获取 方法 这里演示的是宝塔服务器 其他也差不多
- 在宝塔 终端 输入 ssh-keygen -m PEM -t rsa 点击回车
- SSH 私钥* 在 这个文件里面 把这个 SSH 私钥* 放到 这里保存
- 还有 ssh 公钥 要在 宝塔 配置 公钥 在这个文件里面
- 将生成的公钥(id_rsa.pub.)的内容 复制 后 放入(被访问)服务器 root/.ssh/authorized_keys 粘贴放入此文件之后 ,表示授权;其他服务器可以通过私钥访问此服务器 没有该文件或文件夹就创建一个;
- 建议 这里 直接授权 点击确认
- 创建后 复制这个 凭证id 保存起来 下面要用
- 记得 选择自己创建的代码 仓库
- 这里 点击确认
- 点击确定后会跳转到流程配置,点击文本编辑器,用下面这段内容覆盖原本的内容:
- 需要覆盖的就是这里的内容
- 授权
- 3. 一定要配置
- 4. 下面要设置 推送代码自动构建
- 接下来,我们只需在idea里随意改动代码的一个地方,将改动推到我们的代码仓库就会自动触发构建,我们不需要做任何事情就能完成自动化的部署。
- 另外 每次构建时间太长 就需要设置一个 变量与缓存
- 到这里就结束了
- 上传 jar 后是这样的
Coding是啥嘞?看看百度百科把
https://baike.baidu.com/item/coding/8921246?fr=aladdin
普通部署和自动化部署比较
普通部署:打jar包->将jar包上传到服务器->执行java -jar命令,好像也不是很麻烦…
coding自动化部署:提交代码->触发构建,开始自动化部署,是不是非常的方便快捷
这里演示的是 把 springboot 项目自动部署到 宝塔服务器上
Coding自动化部署
1.首先,创建一个项目:
然后点击完成创建
点击这里把 项目上传过来
选择第一个模板即可。
创建成功后,随便建一个Spring Boot项目,上传到该项目的代码仓库。
2. 开始配置构建
2.1 点击持续集成
2.2 点击创建构建计划
2.3 选择 java 这个
2.5 下面 按照我圈的来 配置
2.6 这几个 如果没有新建 即可 这里 不用 docker
maven 项目的编译构建可以用这个
mvn clean install
2.7 这个要新建的
写服务器地址 启用部署到远程服务器
新建ssh 登陆凭证 很重要
SSH 私钥*获取 方法 这里演示的是宝塔服务器 其他也差不多
在宝塔 终端 输入 ssh-keygen -m PEM -t rsa 点击回车
SSH 私钥* 在 这个文件里面 把这个 SSH 私钥* 放到 这里保存
/root/.ssh/id_rsa.
还有 ssh 公钥 要在 宝塔 配置 公钥 在这个文件里面
/root/.ssh/id_rsa.pub.
将生成的公钥(id_rsa.pub.)的内容 复制 后 放入(被访问)服务器 root/.ssh/authorized_keys 粘贴放入此文件之后 ,表示授权;其他服务器可以通过私钥访问此服务器 没有该文件或文件夹就创建一个;
建议 这里 直接授权 点击确认
创建后 复制这个 凭证id 保存起来 下面要用
记得 选择自己创建的代码 仓库
这里 点击确认
点击确定后会跳转到流程配置,点击文本编辑器,用下面这段内容覆盖原本的内容:
需要覆盖的就是这里的内容
把下面这个代码 覆盖到 上面 图片 里面
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('构建${packageType}') {
steps {
echo '构建中...'
sh 'mvn clean package -Ptest -DskipTests'
echo '构建完成.'
}
}
stage('收集构建物') {
steps {
archiveArtifacts 'target/*.jar'
}
}
stage('部署到服务器') {
steps {
script {
def remote = [:]
remote.name = 'zqh'
remote.host = '自己服务器ip地址'
remote.user = 'root'
remote.allowAnyHosts = true
withCredentials([sshUserPrivateKey(credentialsId: "刚才复制的凭据id", keyFileVariable: 'id_rsa')]) {
remote.identityFile = id_rsa
stage("推送文件到远程服务器") {
sshPut remote: remote, from: 'target/jshERP.jar', into: '/coding/zqh/'
}
stage("重启服务") {
$result = sshCommand remote: remote, command: 'sh /coding/zqh/spring-start.sh restart /coding/zqh/jshERP.jar 7003'
if($result.indexOf("jar包启动超时-1") > -1){
echo 'jar包启动超时-1'
set -e
}
}
}
}
}
}
}
}
上面代码有要修改的 地方 和注意事项
1. 确保 宝塔 服务器 有这两个文件夹 /coding/zqh 都是需要新建的 新建完成 要授权 不然 jar 上传不了 会报错
授权
2. 填入自己的服务器ip
3.一个是填入凭据id,刚才创建构建计划的时候已经帮我们自动创建了一个,只需去复制凭据id即可(下方图片是凭据id的位置):
到此配置就结束了。
3. 一定要配置
需要一个spring-start.sh的脚本,将该脚本复制到服务器的/coding/zqh/目录即可 要注意 jdk 目录是否正确 和 jar包所在的目录 所在目录是否正确
#!/bin/bash
JVM_OPEION='-Xms246m -Xmx246m'
JAR_PID='无效'
# jar包所在的目录
JAR_HOME='/opt/zqh/'
# JDK的目录
JAVA_HOME='/usr/local/btjdk/jdk8/bin/java'
JAR_ACTIVE='prod'
# 检查次数
EXAMINE_TIME=50
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh spring-startup.sh [start|stop|restart|status]"
exit 1
}
#检查程序是否在运行
is_exist() {
orderStr="ps -ef | grep $1 | grep -v "\$0" | grep -v "grep" | awk '{print \$2}'"
echo "检查命令: $orderStr"
pid=$(eval $orderStr)
#如果存在返回1,不存在返回0
if [ -n "${pid}" ]; then
JAR_PID=$pid
echo "pid=${pid}"
echo "JAR_PID=${JAR_PID}"
return 1
else
return 0
fi
}
#启动方法
start() {
is_exist $1
if [ $? -eq "1" ]; then
echo "$1 is already running. pid=${JAR_PID} ."
else
echo "--------$1 开始启动--------"
jarname=$1
filename=${jarname##*/}
name=${filename%.*}
logName=${name%_*}_$2.log
javaShellStr="nohup $JAVA_HOME -jar $1 --spring.profiles.active=$JAR_ACTIVE --server.port=$2 >/opt/api-server/logs/$logName 2>&1 &"
echo "启动命令: $javaShellStr"
eval $javaShellStr
# 检查端口
portStr="lsof -i:$2 | grep "LISTEN" | awk '{print \$2}'"
echo "端口检查:$portStr"
jarPort=$(eval $portStr)
# 计时器
stime=0
# 判断端口是否为0,次数是否小于7
until [[ -n "$jarPort" ]]; do
sleep 3s
tail -n 5 $JAR_HOME/logs/$logName
stime=$((stime + 1))
jarPort=$(eval $portStr)
echo "启动检查第$stime次"
# 超时判断 大于13,打印 -1 结束当前操作
if [ $stime -ge $EXAMINE_TIME ]; then break; fi
done
if [ $stime -ge $EXAMINE_TIME ]; then
echo "jar包启动超时-1"
exit; fi
echo "$1 start success"
fi
}
#停止方法
stopPort() {
portStr="netstat -nlp | grep :$1 | awk '{print \$7}' | awk -F\"/\" '{ print \$1 }'"
echo "启动命令: $portStr"
JAR_PID=$(eval $portStr)
if [ -n "$JAR_PID" ]; then
kill -9 $JAR_PID
JAR_PID=$(eval $portStr)
if [ -n "$JAR_PID" ]; then
echo "$1 is running. Pid is ${JAR_PID}"
else
echo "$1 is stop."
fi
else
echo "$1 is not running"
fi
}
#停止方法
stop() {
is_exist $1
if [ $? -eq "1" ]; then
while [[ -n "$JAR_PID" && "$JAR_PID" -ne "0" ]]; do
echo "$1 is already running. pid=${JAR_PID} ."
kill -9 $JAR_PID
sleep 1s
is_exist $1
JAR_PID=$?
done
echo "$1 is kill"
else
echo "$1 is not running"
fi
}
#输出运行状态
status() {
is_exist $1
if [ $? -eq "1" ]; then
echo "$1 is running. Pid is ${JAR_PID}"
else
echo "$1 is NOT running."
fi
}
#重启
restart() {
stop $1
start $1 $2
}
#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start $2 $3
;;
"stop")
stop $2
;;
"status")
status $2
;;
"restart")
restart $2 $3
;;
*)
usage
;;
esac
4. 下面要设置 推送代码自动构建
接下来,我们只需在idea里随意改动代码的一个地方,将改动推到我们的代码仓库就会自动触发构建,我们不需要做任何事情就能完成自动化的部署。
可以手动构建
另外 每次构建时间太长 就需要设置一个 变量与缓存