持续集成/CI(Continuous integration),频繁将已完成的,代码提交到主干。
持续交付/CD(Continuous delivery),频繁将软件最新版本交给质量团队或用户进行评审。
持续部署/CD(Continuous deployment),指通过评审的代码自动部署到生产环境。
持续部署的前提是能自动化完成测试、构建、部署等步骤。
1、docker安装jenkins
docker pull jenkins/jenkins
mkdir /home/jenkins
chown -R 1000:1000 /home/jenkins/
docker run -itd -p 9090:8080 -p 50000:50000 --name jenkins --privileged=true -v /home/jenkins:/var/jenkins_home jenkins/jenkins:latest
2、jenkins配置
- 安装默认所有插件
- 创建管理员账号
- 修改插件国内镜像源:依次点击Maanage Jenkins→Manage Plugins→【Advanced,划到最下面修改升级站点URL
https://repo.huaweicloud.com/jenkins/updates/update-center.json
- 配置
Global Tool Configuration
下的jdk、maven、git等信息。 - 凭据配置:依次点击【Manage Jenkins】→【Manage Credentials】,点击【全局】→【添加凭据】添加gitee账号密码。
4、免密访问应用服务器
- jenkins服务器生成秘钥对,将公钥复制到应用服务器的
~/.ssh/authorized_keys
ssh-keygen -m PEM -t rsa
5、创建Maven项目
- 在【Source Code Management】——>【Git】处输入仓库地址、选择凭据。
- 配置
Pro Steps
,在Goals and options
添加:clean package -U -Dmaven.test.skip=true
- 点击【Build Now】进行构建,点击【Build History】下的构建进程,选择【Console Output】查看输出。
- 点击【Workspace】查看源代码。
- 配置
Post Steps
, 选择Execute shell
,放置发布脚本。
程序发布脚本
#!/bin/bash
# 定义部署的目录和项目名称
DIR="/home/project"
projectName="wuzichaoshi"
# 待部署的应用服务器
server_ips="10.112.1.71"
for server_ip in ${server_ips[@]}; do
echo "ssh连接服务器。"
ssh -Tq -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mkdir -p $DIR/${projectName} $DIR/backup/${projectName}
if [ -f "$DIR/${projectName}/${projectName}.jar" ];then
mv $DIR/${projectName}/${projectName}.jar $DIR/backup/${projectName}/${projectName}-$(date "+%Y%m%d_%H%M%S").jar
fi
EOF
echo "拷贝jar包到目标服务器的tmp目录下"
scp -q -oStrictHostKeyChecking=no ${WORKSPACE}/target/*.jar root@${server_ip}:/tmp/${projectName}.jar
echo "ssh远程连接进行发布操作"
ssh -q -oStrictHostKeyChecking=no root@${server_ip} <<EOF
mv /tmp/${projectName}.jar $DIR/${projectName}/${projectName}.jar
EOF
done
echo "成功!脚本已部署到服务器!"
bash $DIR/${projectName}/stop.sh
bash $DIR/${projectName}/start.sh
start.sh
#!/bin/bash
set -e #一旦报错立即停止
set -o pipefail
# 添加JDK路径
JAVA_HOME=/usr/local/jdk1.8
# 项目根目录和项目名称
DIR="/home/project"
projectName="wuzichaoshi"
nohup $JAVA_HOME/bin/java -jar ${DIR}/${projectName}/${projectName}.jar > release_out.log 2>&1 &
echo $! > /var/run/${projectName}.pid
stop.sh
#!/bin/bash
# 项目根目录和项目名称
projectName="wuzichaoshi"
PID=$(cat /var/run/${projectName}.pid)
kill -9 $PID
网友评论