1. Jenkins概述
1. Jenkins是一个开源持续集成的工具,是由JAVA开发而成
2. Jenkins是一个调度平台,本身不处理任何事情,调用插件来完成所有的工作
1.1 什么是代码部署
代码发布/部署>开发书写的程序代码---->部署测试/生产环境 web服务器(站点目录中)
2. Jenkins快速上手指南
安装Jenkins只需要简单几步即可完成。
可参考官网:
2.1 环境准备
主机 | 配置 | ip |
---|---|---|
devops_jenkins_xzb | 2c4G jdk 11版本 | 10.0.0.60/172.16.1.60 |
2.2 部署JDK
## 安装jenkins
## 安装jdk
yum install -y jdk-17
yum install jenkins
systemctl enable jenkins
systemctl start jenkins
## 检查进程端口
ss -lntup ##8080端口
ps -ef |grep java
##浏览器解析访问
10.0.0.60:8080
2.3 选择关闭
2.4 提示jenkins已经就绪
2.5 登录
2.6 安装插件
Jenkins插件安装方式 | 说明 |
---|---|
web页面,选择与安装(联网) | 一个一个找选择,安装重启jenkins |
自己下载插件,jenkins替你安装(hpi) | web页面一个一个安装,未来批量安装需要脚本 |
导入插件(手动,批量) | 去一个机器上面把已经下载安装的插件打包,新机器解压,修改所有者 |
jenkins不同版本的插件不通用 |
2.7 修改密码
3. 体验Jenkins-Jenkins-Shell集成
3.1 对jenkins配置
1. 为了方便JK进行操作与管理各种节点,避免出现权限问题
2. 这里把jenkins运行用户改为root。
3. 当然也可以给Jenkins配置sudo权限,这里我们选择修改为root。
##修改所以者
egrep -i '^User|^Group' /usr/lib/systemd/system/jenkins.service
User=root
Group=root
##重启daemon
systemctl daemon-reload
##重启jenkins
systemctl restart jenkins
3.2 创建并运行jenkins项目,执行 Shell命令
1. 通过运行jenkins 任务,提示我们进行选择:
dev #开发环境
prod #生产环境
2. 把选择结果放在变量中choose
3. jenkins执行脚本
3.3 项目详细步骤
创建对应的的目录
创建文件夹
创建freestyle项目
进入到dev目录创建1个项目
补充说明:
自由风格: 一般用于部署静态,各种都可以。
maven项目:java代码
流水线(pipeline):把第1个或第2个任务通过指令(代码)方式实现。
配置构建保存
配置参数化构建
添加参数化构建
配置变量与选择的值
配置构建与shell
添加执行shell
配置命令或代码
3.4 运行任务
运行工程
检查输出
3.5 所有构建记录是否要保留
丢弃旧的构建
4. Jenkins实现Gitee集成
4.1 准备windows环境
安装git-bash
准备代码目录(代码目录绝对路径中不要包含中文字符)
创建密钥并配置gitee
## 创建密钥
ssh-keygen.exe
## 查看密钥
cat /c/Users/Administrator/.ssh/id_rsa.pub
创建gitee项目
配置密钥认证
初始化并上传代码
##配置基本信息
git config global user.name "Administrator"
git config global user.email "[email protected]"
git config global list
##初始化
git init
#配置远程仓库地址
git remote add origin [email protected]:xing-zhibang/csdn_-jenkins-xzb.git
git remote -v
##上传代码与标签
git add .
git commit -m "CSDN_Jenkins_xzb 项目完成100"
git tag -a 'v1' -m '项目完成100%'
git push -u origin master ##上传主分支
git push -u origin v1 ##上传标签
检查
4.2 配置jenkins
添加任务
源码管理
配置git仓库地址(从gitee获取)
配置访问凭证
把windows下面的私钥写入进去
配置下shell命令
4.3 运行查看结果
4.4 配置脚本
1. 这部分配置build步骤,表示对拉取过来的代码进行处理
2. 这里可以选择打包
构建与检查结果
5. Jenkins基于tag标签的代码拉取与部署
案例背景:
1. 上个案例中拉取的代码总是最新的
2. 目前我们需要部署指定的tag标签(版本)的代码
3. 最后代码打包并分发web服务器
5.1 准备代码
修改index.html,修改标题. 提交,打标签,
创建出v2.0 v3.0版本即可.
修改代码标题
提交代码
git add .
git commit -m v2.0
git tag -a v2.0 -m v2.0
git push -u origin all
git push -u origin tags
检查
5.2 安装jenkins获取git tag标签的插件
5.3 创建Jenkins任务
添加参数化构建之git参数
配置git参数
配置源码管理
配置每次构建之前清空工作目录(避免缓存导致问题)
配置Build步骤(shell脚本)
检查结果
5.4 部署到web节点
在web主机上编写nginx配置文件
cat /etc/nginx/conf.d/firework.conf
server{
listen 80;
server_name firework.oldboylinux.cn;
access_log /var/log/nginx/firework/access.log main;
error_log /var/log/nginx/firework/errot.log notice;
root /app/code/firework;
location / {
index index.html;
}
}
在Jenkins主机上创建密钥认证
ssh-keygen
ssh-copy-id [email protected] ##分发给web主机
ssh [email protected] 远程连接web主机
jenkins项目配置(shell部分)
检查部署结果
5.5 shell实现方式
## 配置jenkins到 web密钥认证
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.8
ssh-copy-id -i /root/.ssh/id_rsa.pub 172.16.1.5
# 下载代码
git clone [email protected]:xing-zhibang/csdn_-jenkins-xzb.git
## 代码打包
tar zcf /tmp/web_html-$(date +%F).tar.gz csdn_-jenkins-xzb/
##查看
ll /tmp/
-rw-r--r-- 1 root root 7498973 Nov 18 14:09 web_html-2024-11-18.tar.gz
# 推送代码包scp:推送到web服务器的/opt
for ip in 8 5;
do
scp /tmp/web_html-2024-11-18.tar.gz 172.16.1.${ip}:/opt;
done
## 解压,修改目录名字,创建软连接
for ip in 8 5 ;
do
ssh 172.16.1.${ip} "cd /opt && tar xf web_html-2024-11-18.tar.gz && mv csdn_-jenkins-xzb csdn_-jenkins-xzb-$(date +%F) && rm -f /app/code/html && ln -s /opt/csdn_-jenkins-xzb-$(date +%F) /app/code/html";
done
使用jenkins自动拉取代码并自动上线 (通过jenkins执行脚本)
#!/bin/bash
#author:xzb666
##desc:通过脚本打包,分发,解压,连接,部署
App_time=`date +%F`
App_dir=/tmp
App_dest_dir=/opt
App_web_servers="172.16.1.8 172.16.1.5"
app_pack(){
##代码打包
tar zcf ${App_dir}/web_html-${App_time}.tar.gz ${App_dir}/csdn-jenkins-xzb
}
app_scp(){
##代码推送
for ip in ${App_web_servers}
do
scp ${App_dir}/web_html-${App_time}.tar.gz ${ip}:${App_dest_dir}
done
}
app_deploy(){
## 解压,修改目录名
for ip in ${App_web_servers}
do
ssh $ip "cd ${App_dest_dir} && tar xf web_html-${App_time}.tar.gz && rm -f /app/code/html && ln -s ${App_dest_dir}/tmp/csdn-jenkins-xzb /app/code/html "
done
}
main(){
app_pack
app_scp
app_deploy
}
main
jenkins 配置 主要修改执行shell部分即可
6. Jenkins部署java项目
由于java编写的代码是无法直接在服务器上运行,需要使用maven工具进行打包。
1. .开发提交代码------>gitee
2. jenkins------->git------->获取Gite代码
3. 代码的质量检测; sonarqube
4. 代码的编译; mvn clean package ----->jar/war
5. 发布过程:
摘除节点
发布代码,创建软连接。
重载Tomcat服务,curl测试一下;
加入节点;
6. 继续下一台节点;
6.1 手动实现构建Java项目-手动
## 下载源码
git clone https://gitee.com/94fzb/zrlog.git
##去清华镜像网站下载maven
mv apache-maven-3.8.8-bin.tar.gz /app/tools
## 解压
tar xf apache-maven-3.8.8-bin.tar.gz
## 创建软连接
ln -s /app/tools/apache-maven-3.8.8 /app/tools/maven
## 增加环境变量
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile
## 查看版本
mvn --version
## 配置maven源
vim /app/tools/maven/conf/settings.xml
147 <mirror>
148 <id>aliyunmaven</id>
149 <mirrorOf>*</mirrorOf>
150 <name>阿里云公共仓库</name>
151 <url>https://maven.aliyun.com/repository/public </url>
152 </mirror>
## 使用maven编译java代码 pom.xml所在目录执行.
mvn clean package
## 检查代码包
ll /tmp/zrlog/package-web/target
6.2 jenkins拉取代码与手动编译代码
创建maven项目
配置源码
根据提示配置maven位置
运行项目检查结果
6.3 war包的部署
1. 准备好tomcat环境
2. 传输war包到web节点上/opt/
3. 进入/opt/改war包名字 ROOT.war
4. 清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*
5. /opt/ROOT.war移动到/app/tools/tomcat/webapps/
6. 重启tomcat
7. 基于docker的案例实现静态代码
7.1 代码准备
7.2 书写dockerfile
1. jenkins机器安装与启动docker
2. 发送代码到jenkins的/app/code/bird/下面
3. 准备开始书写dockerfile
##当代码拉到本地
cd /app/code/cxk
git clone [email protected]:xing-zhibang/jenkins-docker.git
##书写Dockerfile文件
FROM nginx:1.22-alpine
LABEL author='xzb'
COPY . /usr/share/nginx/html
EXPOSE 80
docker build -t web:ngx_cxk_v1.0 .
## 运行容器
docker run -d --name "nginx_cxk" -p 8888:80 --rm web:ngx_cxk_v1.0
7.3 准备私有仓库
## 在docker02上拉取仓库,并启动仓库
docker pull registry:latest
docker run -d -p 5000:5000 -v registry:/var/lib/registry --name "xzb_registry" --restart=always registry:latest
## 上传镜像到镜像仓库
docker push reg.oldboylinux.cn:5000/xzb/nginx_cxk_v1.0
7.5 创建jenkins任务
书写脚本
检查结果
web节点上启动对应的docker容器
## 密钥认证
##vars
web_server="172.16.1.82"
##判断git_tag是否为默认
if [ "$git_tag" = "origin/master" ];then
git_tag=latest
fi
## 构建镜像
docker build -t reg.oldboylinux.cn:5000/xzb/web:nginx_cxk${git_tag} .
## 推送到私有仓库
docker push reg.oldboylinux.cn:5000/xzb/web:nginx_cxk${git_tag}
## 部署web服务器
for ip in ${web_servers}
do
ssh root@${ip} "docker run -d --name "nginx_cxk${git_tag} " -p 80:80 restart=always reg.oldboylinux.cn:5000/xzb/web:nginx_cxk${git_tag}"
done