0. 老男孩思想-四种性格的特点
1. Jenkins自动化-webhook(钩子)
- 开发写的代码需要立即看到执行结果,而不是需要手动的设置Jenkins再去部署代码
- 这就需要一个触发器,当前开发人员将代码发布到代码仓库后,仓库可以通知Jenkins代码已更新,并且去部署代码
- 这个过程需要webhook来实现
1.1 Jenkins配置
- 新建项目
1.2 GitLab配置
1.2.1 开启gitlab内网域名解析
- 默认gitlab进制内网域名解析,现在需要开启
1.2.2 配置webhook和token
- gitlab和Jenkins需要添加域名解析
2. 防止重复构建
防⽌重复运⾏jenkins任务造成web节点重复部署代码
- 每次git commit会有Id,Jenkins判断当前Id与之前Id是否相同即可
- 相同则表示代码未修改,则不运行任务
- 在编译的Shell脚本开头添加cid判断:
#0.防止重复构建
if [ "${GIT_COMMIT}" == "${GIT_PREVIOUS_SUCCESSFUL_COMMIT}" ];then
echo "重复构建"
echo "当前CID: ${GIT_COMMIT}"
echo "上一次成功运行的CID: ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}"
exit 0
fi
- 运行任务
3. 部署java代码
- java代码需要通过maven编译,打包成jar包或war包
- 运行代码前需要下载相关maven依赖,需要部署maven下载源
- maven结构代码的配置文件:pom.xml
3.1 部署maven
- 官方下载地址:
[Maven Releases History – Maven](https://maven.apache.org/docs/history.html)
- 软件包:
apache-maven-3.9.6-bin.tar.gz 链接: https://pan.baidu.com/s/1B5pQ5gN3F43epa6hFXbPCg?pwd=xe8b 提取码: xe8b
mkdir -p /app/tools/
tar xf apache-maven-3.9.6-bin.tar.gz -C /app/tools/
ln -s /app/tools/apache-maven-3.9.6 /app/tools/maven
# 添加环境变量
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile
source /etc/profile
mvn --version
- 修改maven的默认下载源,使用阿里云的镜像源:
[maven镜像_maven下载地址_maven安装教程-阿里巴巴开源镜像站](https://developer.aliyun.com/mirror/maven?spm=a2c6h.13651102.0.0.7be81b11FtqZkj)
- 配置文件:
/app/tools/maven/conf/settings.xml
- 配置文件:
3.2 maven编译测试
- 测试代码:
hello-world-war-src-code.zip 链接: https://pan.baidu.com/s/1Sv7tr09T5-5cMA4TF1eAzg?pwd=errp 提取码: errp
- maven依赖的默认下载路径:
~/.m2/repository
[root@devops-jenkins /app/code/hello_world]# ll
总用量 8
drwxr-xr-x 2 root root 29 5月 23 2014 dist
-rw-r--r-- 1 root root 930 5月 23 2014 pom.xml
-rw-r--r-- 1 root root 213 5月 23 2014 README.md
drwxr-xr-x 3 root root 18 5月 23 2014 src
# 在pox.xml目录下编译代码
[root@devops-jenkins /app/code/hello_world]# mvn clean package
[INFO] Scanning for projects...
[INFO]
[INFO] --------------------< com.efsavage:hello-world-war >--------------------
……
# 编译成war包
[root@devops-jenkins /app/code/hello_world/target]# ll
总用量 4
drwxr-xr-x 4 root root 54 8月 8 08:17 hello-world-war-1.0.0
-rw-r--r-- 1 root root 2419 8月 8 08:17 hello-world-war-1.0.0.war
drwxr-xr-x 2 root root 28 8月 8 08:17 maven-archiver
- 将war包传递到web03,使用tomcat打开:
[root@devops-jenkins /app/code/hello_world/target]# scp hello-world-war-1.0.0.war web03:/app/tools/tomcat/webapps/ROOT.war
3.3 前端页面配置maven
3.4 推送代码到gitlab
- 新建项目仓库
- 提交并推送代码
# 删除自带的git仓库信息
rm .git
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git init
git remote add origin git@gitlab.oldboy.cn:gitlab-instance-b39d975d/hello-world.git
git add .
git commit -m "初始代码"
git tag -a "v1.0" -m "v1.0"
git push -u origin --all
git push --tags
3.5 创建Jenkins-maven任务
- Jenkins需要将war包发布到web03上,需配置密钥认证
3.6 发布步骤(Post Steps)
echo $WORKSPACE
echo "#####1.打包#####"
echo "#####2.分发#####"
##2.ansible
ip_list=10.0.0.9
for ip in $ip_list
do
scp ./target/hello-world-war-*.war root@$ip:/opt/ROOT.war
#if
done
echo "#####3.部署#####"
#1.ssh ip 命令
#2.ansible
for pp in $ip_list
do
ssh root@$pp <<EOF
\mv /opt/ROOT.war /app/tools/tomcat/webapps/ROOT.war;
/app/tools/tomcat/bin/shutdown.sh ;
sleep 3;
/app/tools/tomcat/bin/startup.sh;
EOF
done
echo "#####4.通知#####"
- 运行任务
- 解决中文乱码问题:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<title>Hello World!</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<style>
h1 { font-family: "Microsoft YaHei", "SimSun", sans-serif; }
</style>
</head>
……
4. 部署前端代码
前端依赖的底层环境:Node.js
- 下载地址:
[Node.js — Download Node.js®](https://nodejs.org/zh-cn/download)
- 下载地址:
Node.js的包管理工具:npm
前端项目的核心配置文件:package.json
4.1 部署nodejs环境
- nodejs软件包:
node-v14.19.3-linux-x64.tar.xz等2个文件 链接: https://pan.baidu.com/s/1mkLbEAF24QNQkFozBuvGwA?pwd=jiry 提取码: jiry
[root@devops-jenkins ~]# tar xf node-v16.19.1-linux-x64.tar.xz -C /app/tools/
[root@devops-jenkins ~]# ln -s /app/tools/node-v16.19.1-linux-x64 /app/tools/node
[root@devops-jenkins ~]# chown -R root:root /app/tools/node/
[root@devops-jenkins ~]# echo "export PATH=/app/tools/node/bin:$PATH" >> /etc/profile
[root@devops-jenkins ~]# source /etc/profile
[root@devops-jenkins ~]# node -v
v16.19.1
[root@devops-jenkins ~]# npm -v
8.19.3
# 设置npm下载源
[root@devops-jenkins ~]# npm config set registry https://registry.npmmirror.com
# 下载源配置文件
[root@devops-jenkins ~]# cat .npmrc
registry=https://registry.npmmirror.com/
4.2 编译前端代码
4.2.1 前端代码
- 前端代码:
china-ex-main.zip 链接: https://pan.baidu.com/s/1ieP8_PEaCPh8qEMNL6Yr7Q 提取码: ku3a
4.2.2 下载前端依赖
- 当前目录下要有package.json文件
npm install
4.2.3 编译前端代码
npm run build
4.2.4 nginx展示页面
- web01节点:
mkdir -p /app/code/china
cd /app/codechina/
scp 10.0.0.72:/app/code/china/china-ex-main/dist/* .
cd /etc/nginx/conf.d/
cp bird.oldboy.cn.conf china.oldboy.cn.conf
vim china.oldboy.cn.conf -> :%s#bird#china#g
nginx -t
systemctl reload nginx.service
- 主机配置hosts
4.3 推送代码
- 创建gitlab仓库
- 推送代码
git config --global user.name "Administrator"
git config --global user.email "admin@example.com"
git init
git remote add origin git@gitlab.oldboy.cn:gitlab-instance-b39d975d/china.git
git add .
git commit -m "初始代码"
git tag -a "v1.0" -m "v1.0"
git push origin --all
git push --tags
4.4 创建任务
- 构建步骤
#0.vars
CODE_NAME=china.tar.gz
CODE_TMP_DIR=/opt/
CODE_DIR=/app/code/china/
IP_ADDRS="10.0.0.7 "
# 编译
export PATH=/app/tools/node/bin:/app/tools/maven/bin/:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
npm install
npm run build
#1.打包
cd dist/
tar zcf ${CODE_TMP_DIR}${CODE_NAME} .
#2.分发-后期交给ansible copy模块/unarchive 模块
for ip in ${IP_ADDRS}
do
scp ${CODE_TMP_DIR}${CODE_NAME} $ip:${CODE_TMP_DIR}
done
#3.部署-后期交给ansible
#(未涉及到) tag标签
#代码直接解压到/app/code/bird/目录下即可.
for ip in ${IP_ADDRS}
do
ssh $ip <<EOF
rm -fr $CODE_DIR
mkdir -p ${CODE_DIR}
tar xf ${CODE_TMP_DIR}${CODE_NAME} -C ${CODE_DIR}
EOF
done
#4.日志记录
#5.通知
- 运行
5. 思维导图
https://kdocs.cn/join/gpuxq6r?f=101\r\n邀请你加入共享群「老男孩教育Linux运维99期-孙克旭」一起进行文档协作