Coding是啥嘞?看看百度百科把
https://baike.baidu.com/item/coding/8921246?fr=aladdin
普通部署和自动化部署比较
普通部署:打jar包->将jar包上传到服务器->执行java -jar命令,好像也不是很麻烦…
coding自动化部署:提交代码->触发构建,开始自动化部署,是不是非常的方便快捷
Coding自动化部署
首先,创建一个项目:
选择第一个模板即可。
创建成功后,随便建一个Spring Boot项目,上传到该项目的代码仓库。
创建构建计划
选择“构建计划”->“创建构建计划”->Java + Spirng + Docker模板
点击选择凭据->录入新凭据并授权:
将这段SSH密钥添加到服务器/root/.ssh/authorized_keys文件中,没有该文件或文件夹就创建一个;点击确定后会跳转到流程配置,点击文本编辑器,用下面这段内容覆盖原本的内容:
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/myblog-4.0.0-SNAPSHOT.jar', into: '/opt/zqh/'
}
stage("重启服务") {
$result = sshCommand remote: remote, command: 'sh /opt/zqh/spring-start.sh restart /opt/zqh/myblog-4.0.0-SNAPSHOT.jar 8080'
if($result.indexOf("jar包启动超时-1") > -1){
echo 'jar包启动超时-1'
set -e
}
}
}
}
}
}
}
}
上方的配置有3个需要注意的地方:
-
填入自己的服务器ip
-
需要一个spring-start.sh的脚本,将该脚本复制到服务器的
/opt/zqh/
目录即可#!/bin/bash JVM_OPEION='-Xms246m -Xmx246m' JAR_PID='无效' # jar包所在的目录 JAR_HOME='/opt/zqh/' # JDK的目录 JAVA_HOME='/usr/java/jdk1.8.0_271/bin/java' JAR_ACTIVE='prod' # 检查次数 EXAMINE_TIME=13 #使用说明,用来提示输入参数 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
-
一个是填入凭据id,刚才创建构建计划的时候已经帮我们自动创建了一个,只需去复制凭据id即可(下方图片是凭据id的位置):
左下方的项目设置–>开发者选项–>凭据管理
到此配置就结束了。
推送代码自动构建
接下来,我们只需在idea里随意改动代码的一个地方,将改动推到我们的代码仓库就会自动触发构建,我们不需要做任何事情就能完成自动化的部署。