自动化部署(一) Jenkins01

自动化部署(一) Jenkins01
主要学习内容
    1.持续集成、部署、交付
    2.WEB工程的自动化部署实践(提交代码到SVN后,自动触发项目构建部署)

一、持续集成、部署、交付
    1.持续部署:关注项目部署到服务器后可以运行,为下一步测试环节或生产运行、用户使用做好准备
    2.持续集成:关注在于今早发现项目整体运行问题,尽早解决
    3.持续交付:小版本不断进行快速迭代开发,不断收集用户信息,用最快的速度改进优化
    总体目标:降低风险、减少重复过程(重复过程交予机器自动完成)、任何时间地点都可生成部署软件、增强项目的可见性

二、WEB工程的自动化部署实践
    1.传统构建项目流程图
    自动化部署(一) Jenkins01_第1张图片
    2.实践目标
    自动化部署(一) Jenkins01_第2张图片
    第一步:环境准备(使用centOS 7)
        一台svn服务器192.168.31.128、一台部署应用的tomcat服务器192.168.31.141、一台tomcat+maven+jenkins服务器 192.168.31.132
        1.svn服务器准备
            安装: yum install -y subversion
            配置svn服务器与创建代码仓库: 
                mkdir -p /var/svn/apple
                cd /var/svn/
                svnadmin create apple
                cd /var/svn/apple/conf/
                
                authz:负责账号权限的管理,控制账号是否读写权限
                passwd:负责账号和密码的用户名单管理
                svnserve.conf:svn服务器配置文件

                修改版本库配置:vi /var/svn/apple/conf/svnserve.conf
                自动化部署(一) Jenkins01_第3张图片
                修改版本库权限管理:vi /var/svn/apple/conf/authz,其中自定义用户名,并设置权限为读写,其他用户无权限
                自动化部署(一) Jenkins01_第4张图片
                修改账户名密码:vi /var/svn/apple/conf/passwd,在末尾添加账户名/密码
                juwenzhe = xxxxx(密码)
            启动svn服务:svnserve -d -r /var/svn
            注:svn所在服务器的防火墙要么关闭,要么做端口映射,否则会遇到拒绝连接情况
            使用tortoiseSVN客户端访问测试:
            自动化部署(一) Jenkins01_第5张图片
        2.一台部署应用的tomcat的服务器
            参考:Tomcat8如何正确进入Manager App和Host Manager页面
        3.一台tomcat+maven+jenkins服务器
            安装 maven:CentOS 7.2 安装 Maven
            安装 tomcat:Tomcat8如何正确进入Manager App和Host Manager页面
            将jenkins.war(下载地址:http://ftp-nyc.osuosl.org/pub/jenkins/war/2.167/jenkins.war)放到 /juwenzhe/apache-tomcat-8.5.38/webapps路径下
            修改tomcat8的配置 vi /juwenzhe/apache-tomcat-8.5.38/conf/server.xml
            
            启动tomcat                
    第二步:jenkins使用
        1.访问 192.168.31.132:8080/jenkins,解锁jenkins,查看密码命令:cat /root/.jenkins/secrets/initialAdminPassword
        2.联网安装插件,等待一段时间
        3.安装“部署插件”,Jenkins -> 【插件管理】->【系统设置】,勾选【deploy to container】,点击【直接安装】
            自动化部署(一) Jenkins01_第6张图片
        4.jenkins初始化设置
            Jenkins -> 【系统管理】 -> 【全局安全设置】
            自动化部署(一) Jenkins01_第7张图片
            Jenkins -> 【系统管理】 -> 【全局工具设置】
            [root@localhost apache-maven-3.6.0]# echo $JAVA_HOME
            /usr/src/jdk1.8.0_191
            自动化部署(一) Jenkins01_第8张图片
            [root@localhost apache-maven-3.6.0]# echo $MAVEN_HOME
            /juwenzhe/apache-maven-3.6.0
            自动化部署(一) Jenkins01_第9张图片
            自动化部署(一) Jenkins01_第10张图片
            自动化部署(一) Jenkins01_第11张图片
            自动化部署(一) Jenkins01_第12张图片
            自动化部署(一) Jenkins01_第13张图片
            图上:hello为项目名称
        5.在Eclipse中新建hello工程
            自动化部署(一) Jenkins01_第14张图片
            生成web.xml文件:
            自动化部署(一) Jenkins01_第15张图片
            自动化部署(一) Jenkins01_第16张图片
            自动化部署(一) Jenkins01_第17张图片
            自动化部署(一) Jenkins01_第18张图片
            上传代码到svn,前提Eclipse安装好SVN插件:
            自动化部署(一) Jenkins01_第19张图片
            自动化部署(一) Jenkins01_第20张图片
            自动化部署(一) Jenkins01_第21张图片
        6.进入Jenkins->apple->【源码管理】配置Jenkins拉取的源码地址与版本
         自动化部署(一) Jenkins01_第22张图片
        7.进入Jenkins->apple->【构建触发器】配置触发Jenkins自动化构建的URL
        自动化部署(一) Jenkins01_第23张图片
        8.进入Jenkins->apple->【构建】配置Jenkins调Maven插件所需的构建命令
        自动化部署(一) Jenkins01_第24张图片
        9.进入Jenkins->apple->【构建后操作】配置触发Jenkins调用Maven插件自动构建后的操作,即部署的目标服务器配置
        自动化部署(一) Jenkins01_第25张图片
        10.在svn服务器上,项目源码所在的仓库进行,提交代码后的触发操作(给Jenkins发自动构建通知)配置:
        
    第三步:测试jenkins自动构建
        jenkins -> apple -> 【立即构建】
        访问:http://192.168.31.141:8080/apple/index.jsp确保项目启动
        可以修改代码,并提交检验是否可以触发一系列Jenkins的自动调用流程
        自动化部署(一) Jenkins01_第26张图片


坑1:java.lang.NoClassDefFoundError: Could not initialize class sun.text.normalizer.NormalizerImpl
原因:原来把windows的maven的settings文件直接拷贝到centos7上,maven的编译jdk版本过旧,或者settings文件中的配置出错
解决:还原settings文件,其中的配置一项项的改。有时候省事会招来更烦的事。

坑2:java.net.NoRouteToHostException: 没有到主机的路由 (Host unreachable)
原因:systemctl status firewalld
解决:学习环境下,关闭防火墙

坑3:org.codehaus.cargo.container.ContainerException: Failed to redeploy [/root/.jenkins/workspace/apple/target/hello-demo-0.0.1-SNAPSHOT.war]
    at org.codehaus.cargo.container.tomcat.internal.AbstractTomcatManagerDeployer.redeploy(AbstractTomcatManagerDeployer.java:192)
    at hudson.plugins.deploy.CargoContainerAdapter.deploy(CargoContainerAdapter.java:77)
    at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:147)
    at hudson.plugins.deploy.CargoContainerAdapter$DeployCallable.invoke(CargoContainerAdapter.java:117)
    at hudson.FilePath.act(FilePath.java:1078)
    at hudson.FilePath.act(FilePath.java:1061)
    at hudson.plugins.deploy.CargoContainerAdapter.redeploy(CargoContainerAdapter.java:114)
    at hudson.plugins.deploy.PasswordProtectedAdapterCargo.redeploy(PasswordProtectedAdapterCargo.java:93)
    at hudson.plugins.deploy.DeployPublisher.perform(DeployPublisher.java:64)
    at hudson.tasks.BuildStepMonitor$3.perform(BuildStepMonitor.java:45)
    at hudson.model.AbstractBuild$AbstractBuildExecution.perform(AbstractBuild.java:744)
    at hudson.model.AbstractBuild$AbstractBuildExecution.performAllBuildSteps(AbstractBuild.java:690)
    at hudson.model.Build$BuildExecution.post2(Build.java:186)
    at hudson.model.AbstractBuild$AbstractBuildExecution.post(AbstractBuild.java:635)
    at hudson.model.Run.execute(Run.java:1835)
    at hudson.model.FreeStyleBuild.run(FreeStyleBuild.java:43)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
Caused by: java.net.ConnectException: 拒绝连接 (Connection refused)
原因:tomcat的用户配置有问题
解决:Tomcat8如何正确进入Manager App和Host Manager页面
      Jenkins使用

      
参考文献:
    1.Jenkins的详细安装及使用
    2.Jenkins使用教程
    3.Jenkins使用

你可能感兴趣的:(自动化部署)