Day03-Jenkins与集成案例
- 6. CD持续交付,持续部署实现方案
- 7. 案例04: basketball案例,搭建开发测试专用的任务
- 7.1 任务要求
- 7.2 步骤
- 7.3 详细步骤
- 1)安装插件
- 2)创建任务
- 7.4 gitlab配置钩子
- 1) 解除钩子局域网访问限制
- 2) gitlab配置钩子
- 7.5 与部署相关的配置与脚本
- 7.6 案例小结:
- 8. 案例05: java项目代码上线项目
- 8.1 项目描述
- 8.2 项目环境
- 8.3 手动实现
- 1) 代码上传到gitlab
- 2) 配置maven
- 3) jenkins拉取代码与手动编译代码
- 4) war包的部署
- 8.4 自动实现
- 今日总结:
- 熟练使用今日案例05.
6. CD持续交付,持续部署实现方案
CD方案 | 优点 | 缺点 | 应用场景与建议 |
---|---|---|---|
使用Jenkins执行Shell命令,脚本 | 简单,通用 | shell编程,集群中有大批量节点的时候效率低 | 通用的,初学推荐使用 |
通过Jenkins的插件Publish Over SSH插件实现。(分发文件,远程执行命令)。 | 简单 | 所有被管理节点都要在Jenkins页面配置 | 机器较少可以用用2-3台 |
使用Jenkins执行Ansible剧本、Ad-hoc | 批量管理与维护 | 需要掌握Ans剧本,模块 | 网站集群批量更新.jk+ansible命令或jk+ansible插件 |
使用Jenkins执行Docker指令。(架构中使用到了docker) | 更加简单,适用于集群部署。 | 需要掌握dockerfile,dockercompose书写 | jk+docker命令或docker插件.jk+ansible+docker |
jenkins 交付到k8s集群 | … | … | jk+k8s… |
7. 案例04: basketball案例,搭建开发测试专用的任务
7.1 任务要求
- 开发人员书写代码,上传到代码仓库.
- 只要仓库收到开发上传的代码,触发jenkins 04-test-job测试任务.
- jenkins去拉取代码仓库最新的代码并部署到测试环境中.
- 这个案例一般用于测试环境自动化部署代码
7.2 步骤
-
jenkins添加gitlab插件(gitee用).
-
在jenkins创建钩子令牌(认证).
-
在gitlab配置jenkins钩子和令牌.
-
测试,提交代码.
7.3 详细步骤
1)安装插件
2)创建任务
- 开启构建触发器:获取钩子地址和创建令牌
7.4 gitlab配置钩子
1) 解除钩子局域网访问限制
2) gitlab配置钩子
- 进入到Gitlab项目中进行配置.
- 测试钩子
- 测试结果
- 补充:如果是码云:
- gitee怎么配置 我们那个url是内网解析的 gitee解析不了
- 解决: 准备个公网的jenkins.
7.5 与部署相关的配置与脚本
echo "您当前部署的代码版本为: 最新版"
#0.vars
date=$(date +%F)
file=baskball_${date}.tar.gz
#1. 打包压缩
tar zcf /tmp/${file} .
#2. 分发
##for + scp
scp /tmp/${file} root@172.16.1.7:/tmp/
#3. 解压
ssh root@172.16.1.7 "tar xf /tmp/${file} -C /app/code/ball/"
7.6 案例小结:
- 目标:提交代码,自动触发jenkins拉取代码并部署代码
- jenkins webhook钩子
8. 案例05: java项目代码上线项目
8.1 项目描述
- java程序的源代码存放在了代码仓库中.
- 通过jk拉取java源代码,通过工具(maven,gradle)对代码进行编译,最终生成war或jar包.
- 通过jk,分发部署,重启服务
8.2 项目环境
环境 | 角色 | ip |
---|---|---|
gitlab | 代码仓库 | 10.0.0.71/172.16.1.71 |
jenkins | jk | 10.0.0.72/172.16.1.72 |
web03 | tomcat+jdk | 10.0.0.9/172.16.1.9 |
lb01 | 负载均衡 | 10.0.0.5/172.16.1.5 |
8.3 手动实现
- 手动上传代码到gitlab
- 手动在jenkins机器上拉取代码.
- 手动通过maven(mvn)编译代码生产war/jar包.
- war包改名ROOT.war
- 部署:
- war包发送到web节点.
- war包部署webapps/目录下.
- 重启tomcat.
1) 代码上传到gitlab
git remote -v
git remote remove orgin
git remote add origin git@gitlab.oldboylinux.cn:root/hello_world_war.git
git add .
git commit -m "v1.0"
git tag -a v1.0 -m v1.0
git push -u origin master
git push -u origin --tags
2) 配置maven
- 对java源代码进行编译.读取当前目录下面的pom.xml文件.
pom.xml是java代码配置文件,里面记录代码依赖.代码war或jar名字.
-
使用maven下载,部署,修改下配置(加速下载)
-
选择什么版本?根据代码要求.
-
jenkins上部署maven
#1. 安装jdk
java -version
#2. 安装 maven
tar xf apache-maven-3.6.3-bin.tar.gz -C /app/tools/
ln -s /app/tools/apache-maven-3.6.3/ /app/tools/maven
echo 'export PATH=/app/tools/maven/bin/:$PATH' >>/etc/profile
source /etc/profile
mvn --version #3. 配置maven下载源
[root@oldboy-devops-jenkins /app/tools/maven/conf]# pwd
/app/tools/maven/conf
[root@oldboy-devops-jenkins /app/tools/maven/conf]# ll settings.xml
-rw-r--r-- 1 root root 10644 Jun 27 18:07 settings.xml
<mirrors> 下面写入 如下内容即可。
<mirror><id>aliyunmaven</id><mirrorOf>*</mirrorOf><name>阿里云公共仓库</name>
<url>https://maven.aliyun.com/repository/public</url>
</mirror>
3) jenkins拉取代码与手动编译代码
- 创建maven项目
- 配置源码
- 根据提示配置maven位置.
- 继续配置项目
- 运行项目检查结果
- 下面是手动编译的命令和说明
mvn clean package
clean清除已经生成的war/jar.
package创建war或jar包,打包
4) war包的部署
-
target/hello-world-war-1.0.0.war
-
准备好tomcat环境
-
传输war包到web节点上/opt/
-
进入/opt/改war包名字 ROOT.war
-
清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*
-
/opt/ROOT.war移动到/app/tools/tomcat/webapps/
-
重启tomcat.
-
jenkins代码分发
#当前目录
/var/lib/jenkins/workspace/dev测试环境/05-java_hello_maven
#密钥认证
ssh-copy-id root@172.16.1.9
#分发war包
scp target/hello-world-war-1.0.0.war 172.16.1.9:/opt/
- web节点部署代码
传输war包到web节点上/opt/
进入/opt/改war包名字 ROOT.war
清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*
/opt/ROOT.war移动到/app/tools/tomcat/webapps/
重启tomcat
- 检查结果
8.4 自动实现
echo "您当前部署的代码版本为: ${TAG_NAME}"
echo "您任务的URL地址: ${JOB_DISPLAY_URL}"#0.vars
date=$(date +%F)
#web_list后面可以设置为参数化构建,文本参数
web_list="172.16.1.9"
#路径 $WORKSPACE
src_dir=./target/
dst_dir=/opt/
#web节点的变量
code_dir=/server/tools/tomcat/webapps/ROOT
code_file=/server/tools/tomcat/webapps/ROOT.war
#1. 分发
fenfa() {
for ip in ${web_list}
doscp ${src_dir}hello-world-war-1.0.0.war root@${ip}:${dst_dir}
done
}#2. 部署
#OK.进入/opt/改war包名字 ROOT-时间.war
#ok.清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*
#ok.给 /opt/ROOT-时间.war 创建软连接到/app/tools/tomcat/webapps/ROOT.war
#重启tomcatdeploy() {
for ip in ${web_list}
dossh root@${ip} "cd ${dst_dir} ;mv hello-world-war-1.0.0.war ROOT-${date}.war ;[ -d ${code_dir} ] && {mkdir -p /tmp/${date};mv ${code_dir} ${code_file} /tmp/${date} ;};ln -s ${dst_dir}/ROOT-${date}.war ${code_file}systemctl restart tomcat"
done}#主函数
main() {fenfadeploy}main