超详细!手把手搭建Jenkins实现自动化部署 (已排雷)

一、搭建环境

使用Jenkins做部署之前,需要安装jdk和maven,docker私有仓库,项目需要连接数据库就要安装数据库如mysql
docker安装教程百度上很多,这里就不讲了。

0、mysql安装

  • 在命令行窗口执行拉取镜像命令

    docker pull mysql:5.7
    
  • 下载完成后,查看镜像

    docker images
    

    在这里插入图片描述

  • 在/root/docker/下创建mysql

    mkdir mysql
    
  • 新建:/root/docker/mysql/my.cnf (准备挂载配置文件用)

    # Copyright (c) 2016, Oracle and/or its affiliates. All rights reserved.
    #
    # This program is free software; you can redistribute it and/or modify
    # it under the terms of the GNU General Public License as published by
    # the Free Software Foundation; version 2 of the License.
    #
    # This program is distributed in the hope that it will be useful,
    # but WITHOUT ANY WARRANTY; without even the implied warranty of
    # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    # GNU General Public License for more details.
    #
    # You should have received a copy of the GNU General Public License
    # along with this program; if not, write to the Free Software
    # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301 USA
    !includedir /etc/mysql/conf.d/
    !includedir /etc/mysql/mysql.conf.d/
    
    [mysqld]
    sql_mode='ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION'
    lower_case_table_names=0
    
  • 运行挂载命令

    docker run --privileged=true --name mysql5.7 -p 3306:3306 -v /root/docker/mysql/datadir:/var/lib/mysql -v /root/docker/mysql/conf.d:/etc/mysql/conf.d -v /root/docker/mysql/my.cnf:/etc/mysql/my.cnf -e MYSQL_ROOT_PASSWORD=root -d mysql:5.7
    
  • 重启mysql容器

    docker restart 容器id
    

    在这里插入图片描述

  • 使用navicat链接试试

    ip是宿主机ip,密码为root

1、jdk安装

个人喜欢使用手动安装,方便后面配置JAVA_HOME,当然也可以选中yum安装,下面只介绍手动安装。

  • 首先在官网下载jdk的安装包

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第1张图片

  • 将jdk安装包上传到linux

    我上传的路径是/usr/local/java

    cd /usr/local/java
    
  • 解压安装包

    tar -zxvf jdk-8u261-linux-x64.tar
    
  • 解压后得到安装包

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-LuQwTd7d-1600064401643)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914102659119.png)]

  • 配置环境变量

    vim /etc/profile
    
  • 在配置文件末端加入

    #set java environment
    export JAVA_HOME=/usr/local/java/jdk1.8.0_261
    export JRE_HOME=${JAVA_HOME}/jre
    export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
    export  PATH=${JAVA_HOME}/bin:$PATH
    

注意 JAVA_HOME 为你压缩包解压后的文件夹的路径

超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第2张图片

  • 刷新环境配置文件

    source /etc/profile
    
  • 查看是否安装和配置成功

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第3张图片

#查看java版本
java -version
#查看java根路径
echo $JAVA_HOME

2、docker本地仓库安装

  • 拉取私有仓库镜像

    docker pull registry
    

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第4张图片

  • 启动私有仓库容器,并挂载镜像到本地

    先 mkdir 创建 /root/docker/registry 文件夹

    docker run -d -v /root/docker/registry:/var/lib/registry -p 5000:5000 --name myregistry registry:latest
    

    宿主机地址:/root/docker/registry

    容器内地址:/var/lib/registry

  • 打开浏览器 输入地址

    http://宿主机ip:5000/v2/_catalog
    

    我的宿主机ip为192.168.220.3

    所以我访问的地址为http://192.168.220.3:5000/v2/_catalog

  • 看到 {“repositories”:[]} 表示私有仓库搭建成功并且内容为空

  • 修改daemon.json,让docker信任私有仓库

    vi /etc/docker/daemon.json
    
    {"insecure‐registries":["宿主机ip:5000"]}
    
  • 重启docker服务

    systemctl restart docker
    

3、maven安装

  • 在线下载

    # 我安装的目录为 /root/docker/maven 没有则先创建
    # 下载maven(3.6.3)
    wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz
    
  • 安装maven并上传本地仓库

    #解压
    tar zxvf apache-maven-3.6.3-bin.tar.gz 
    #移动并重命名
    mv apache‐maven‐3.6.3 /root/docker/maven
    #创建仓库保存目录
    mkdir repository 
    
  • 配置环境变量和映射仓库地址

    #设置环境变量
    
    vim /etc/profile
    
    #在/etc/profile中添加以下几行并保存
    
    export MAVEN_HOME=/root/docker/maven
    
    export PATH=$MAVEN_HOME/bin:$PATH
    
    #执行source /etc/profile使环境变量生效
    
    source /etc/profile
    
    #最后运行mvn -v验证maven是否安装成功,如果安装成功会打印如下内容:
    
    mvn -v
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SEPFmbb2-1600064401648)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914110910004.png)]

    安装maven之前要安装jdk,如果提示找不到JAVA_HOME可能是JDK没有配置成功

  • 修改配置文件,指定本地仓库位置

    cd /root/docker/maven/conf
    vim settings.xml
    
    • 配置阿里云镜像(自选,配置了下载会快点)

      超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第5张图片

      
            alimaven
            aliyun maven
            http://maven.aliyun.com/nexus/content/groups/public/
            central
      
      

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第6张图片

    /root/docker/repository/repo
    

4、jenkins安装

​ 安装jenkins之前,必须安装好maven

  • 拉取jenkins镜像

    docker pull jenkins/jenkins:lts-alpine
    
  • 在/root/docker下创建 Jenkins目录

    cd /root/docker
    mkdir jenkins
    
  • 给Jenkins文件夹授权(不授权的话,后面jenkins会找不到jdk和maven目录)

    chown -R root:root jenkins/ 
    
  • 创建Jenkins容器,把容器里面的8080和50000端口映射为18080和50000,挂载jenkins_home和maven目录,同时设置Jenkins的时区为上海

    docker run -d -p 18080:8080 -p 50000:50000 --privileged=true -u root -v /root/docker/jenkins:/var/jenkins_home -v /root/docker/maven:/usr/local/apache-maven -v /usr/local/java/jdk1.8.0_261:/usr/local/java/jdk1.8 -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai --name myjenkins jenkins/jenkins:lts-alpine
    

    注意,在Jenkins中配置的jdk和maven的路径应为后面docker容器映射的路径:

    jdk: /usr/local/java/jdk1.8

    maven:/usr/local/apache-maven

  • 在浏览器中输入宿主机ip:18080进入Jenkins

    http://192.168.220.3:18080/

    第一次进入需要获取初始密码

    #进入Jenkins目录
    cd /root/docker/jenkins
    #查看密码
    cat secrets/initialAdminPassword
    

    先别急着安装依赖

    1、解决离线问题

    #修改/root/docker/jenkins下的hudson.model.UpdateCenter.xml 文件
    将 url 中 https://updates.jenkins.io/update-center.json 
    更改为
             https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
    是国内的,清华大学的镜像地址。
    

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第7张图片

    2、解决插件安装很慢的问题

    #Jenkins 在启动的时候需要安装一些插件,下载速度很慢不说还很多报错,下面是解决办法:
    #找到 default.json 文件
    #在 Jenkins 的安装目录里查找
    find . -name default.json
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-79UJ7K6o-1600064401651)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914115708017.png)]

    进入该目录

    #替换 default.json 中的内容
    #将 updates.jenkins-ci.org/download 替换为 mirrors.tuna.tsinghua.edu.cn/jenkins,
    #将 www.google.com 替换为 www.baidu.com,
    #具体命令如下:
    sed -i 's/www.google.com/www.baidu.com/g' default.json
    sed-i 's/updates.jenkins-ci.org\/download/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json
    #重启 Jenkins
    docker restart jenkins的容器id
    
  • 现在可以登录安装依赖了

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第8张图片

二、jenkins 环境配置

给jenkins配置jdk和maven

  • 进入系统管理—全局工具配置

超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第9张图片

  • 因为我们的jenkins是docker安装的,所以要注意路径均为docker容器中映射的路径而非宿主机的路径

    • 配置settings

      超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第10张图片

    • 配置maven

      去掉自动安装

      超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第11张图片

    • 配置jdk

      去掉自动安装

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第12张图片

  • 进入系统管理—系统配置

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第13张图片

    配置环境变量

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第14张图片

至此jdk和maven环境已配置完成

三、完成maven环境的自动化部署配置

  1. 修改宿主机的docker配置,让其可以远程访问

    vim  /lib/systemd/system/docker.service
    

    根据docker版本不同配置文件也不同

    情况1:

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第15张图片

    情况2:

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OakFAIQ5-1600064401661)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914123956137.png)]

  2. 刷新配置,重启服务

    systemctl daemon-reload
    systemctl restart docker
    要记得把之前没有设置为开机启动的容器重新启动,如本地仓库容器
    或者设置为自启动:
    docker update 容器id --restart=always
    
  3. 在项目代码的pom文件指定编译脚本(开发人员工作),会生成一个dockerfile脚本完成镜像上传和打包。

    这里以上一篇springsecurity的demo为例

    • 修改pom.xml文件
    
            app
            
                
                    org.springframework.boot
                    spring-boot-maven-plugin
                    2.2.6.RELEASE
                
                
                
                    com.spotify
                    docker-maven-plugin
                    0.4.13
                    
                        192.168.220.3:5000/${project.artifactId}:${project.version}
                        jdk1.8
                        ["java", "-jar", "/${project.build.finalName}.jar"]
                        
                            
                                /
                                ${project.build.directory}
                                ${project.build.finalName}.jar
                            
                        
                        http://192.168.220.3:2375
                    
                
            
        
    

    其中要修改的地方如下

    #192.168.220.3改为自己宿主机的ip,192.168.220.3:5000为本地仓库的地址,不能去掉
    192.168.220.3:5000/${project.artifactId}:${project.version}
    #这修改为宿主机的docker地址
    http://192.168.220.3:2375
    #注意要将这两个端口都添加到防火墙的白名单中!!!
    
    • 修改application.yml文件
    spring:
      datasource:
        url: jdbc:mysql://mysql:3306/security_authority?useUnicode=true&characterEncoding=UTF-8 #172.17.0.5
        username: root
        password: root
        driver-class-name: com.mysql.cj.jdbc.Driver
      jpa:
        hibernate:
          ddl-auto: update
        show-sql: true
    server:
      port: 8888
    

    给项目指定上端口号,将mysql的url的ip改为mysql,同理,如果有redis的就将ip改为redis

    因为我们的jar包是部署在docker上的,所以他访问的应该是docker中mysql的ip地址,而非宿主机ip的地址,故这里使用一个变量“mysql”代替,在后面启动jar包时再通过参数注入的方式注入。后面会详细讲。

    四、构建Jenkins的自动化安装部署任务

    1. 创建一个maven项目

      超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第16张图片

    如果没有这个选项,则进入系统管理中的插件管理

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第17张图片

    选择 “可选插件” 搜索maven,安装此插件

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aqhONpc4-1600064401663)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914125350910.png)]

  4. 配置任务

    在打包之前要将项目上传到github、gitlab或码云中,推荐使用码云,否则容易因为墙的原因,连不上GitHub导致打包时报错。

    超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第18张图片

    git中pom文件的路径

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uHSSvfzJ-1600064401665)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914130000845.png)]

clean package docker:build -DpushImage
  1. 构建项目即可

超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第19张图片

进入任务,选择控制台输出,可以看到打包情况

超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第20张图片

  1. 运行镜像

    docker images 查看镜像

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ukFmFRu5-1600064401667)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914133319280.png)]

    启动镜像

    docker run -p 8888:8888 -d --link=mysql5.7:mysql --name spring-security-demo 镜像id
    

    mysql5.7是mysql容器的name,冒号后面的mysql对应url中的mysql变量

    用来给上面application配置文件中mysql的url赋值

  2. 查看镜像

    docker ps
    

    [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ETwOB2O6-1600064401668)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914133657939.png)]

    #查看容器启动日志,如果启动不成功也可以通过查看日志纠错
    docker logs -f -t --tail 1000 spring-security-demo
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PuPc2B7m-1600064401669)(C:\Users\蔡隽贤\AppData\Roaming\Typora\typora-user-images\image-20200914133921464.png)]

至此,jenkins自动部署项目已完成。

  • 浏览器输入项目地址
  • 超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第21张图片
    可以看到访问主页成功!

五、常见问题

  1. push镜像到本地registry时出现的500 Internal Server Error

    • 检查远程访问有没有配置错误

      systemctl status docker
      

      超详细!手把手搭建Jenkins实现自动化部署 (已排雷)_第22张图片

    • 禁用sellinux

      /usr/sbin/sestatus -v 查看状态
      
      setenforce 0 禁用
      

你可能感兴趣的:(javaWeb,linux,docker,服务器,jenkins,maven)