当前位置:   article > 正文

Day03-Jenkins与集成案例

Day03-Jenkins与集成案例

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去拉取代码仓库最新的代码并部署到测试环境中.
  • 这个案例一般用于测试环境自动化部署代码

image-20240521140710013

7.2 步骤

  • jenkins添加gitlab插件(gitee用).

  • 在jenkins创建钩子令牌(认证).

  • 在gitlab配置jenkins钩子和令牌.

  • 测试,提交代码.

image-20240521143420068

7.3 详细步骤

1)安装插件

image-20240521142424361

image-20240521142530789

2)创建任务

image-20240521141625362

image-20240521143519597

image-20240521143705148

  • 开启构建触发器:获取钩子地址和创建令牌

image-20240521144219612

image-20240521144257633

7.4 gitlab配置钩子

1) 解除钩子局域网访问限制

image-20240521150556554

image-20240521150704847

2) gitlab配置钩子

  • 进入到Gitlab项目中进行配置.

image-20240521145755570

image-20240521145906564

  • 测试钩子

image-20240521150842672

  • 测试结果

image-20240521150927313

image-20240521151116523

  • 补充:如果是码云:
  • 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/"
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

image-20240521151618492

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
jenkinsjk10.0.0.72/172.16.1.72
web03tomcat+jdk10.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.

image-20240521153840725

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
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

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>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

3) jenkins拉取代码与手动编译代码

  • 创建maven项目

image-20240522103953157

  • 配置源码

image-20240522111705972

  • 根据提示配置maven位置.

image-20240522111952493

image-20240522112203126

  • 继续配置项目

image-20240522113350792

  • 运行项目检查结果

image-20240522113517983

  • 下面是手动编译的命令和说明
mvn clean package
clean清除已经生成的war/jar.
package创建war或jar包,打包
  • 1
  • 2
  • 3

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/
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • web节点部署代码
传输war包到web节点上/opt/
进入/opt/改war包名字 ROOT.war
清理已有的目录和文件rm -fr /app/tools/tomcat/webapps/ROOT*
/opt/ROOT.war移动到/app/tools/tomcat/webapps/
重启tomcat
  • 1
  • 2
  • 3
  • 4
  • 5
  • 检查结果

image-20240522123812552

8.4 自动实现

image-20240522135309812

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}
do
  scp ${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
#重启tomcat

deploy() {
for ip in ${web_list}
do
  ssh 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() {
  fenfa
  deploy
  }
   
main
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50

今日总结:

熟练使用今日案例05.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/天景科技苑/article/detail/797981
推荐阅读
相关标签
  

闽ICP备14008679号