zoukankan      html  css  js  c++  java
  • 基于Docker+Jenkins实现自动化部署

    Jenkins是一个基于java开发的开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

    jenkins官网:https://jenkins.io

    jenkins下载地址:https://jenkins.io/download/

     请检测是否安装docker,如果没有安装或想提速下载请走这里---->>> Linux Centos7(Mac) 安装Docker教程

    准备:

    这里搭建测试整个流程的时候使用的是jenkins+gitee+springboot项目

    1、登录码云https://gitee.com/ 创建自己的代码仓库。

    2、创建springboot项目上传到仓库。

    一、下载Jenkins镜像,安装启动

    有个很残酷的消息在docker的镜像仓库中Jenkins的官方镜像停止维护了,并且推荐使用jenkins/jenkins:lts镜像,所有我这里使用的是Jenkins社区提供维护的镜像

     来吧~~~咱们下面就开始

    1、创建docker挂在目录,目的是将docker中Jenkins的持久化数据写到本地,否则每次重启jenkins都会重置

    mkdir -p /root/jenkins

    2、下载Jenkins镜像,并启动容器

    这个过程可以分成两步,也可以直接运行第二步,docker run 会先下载镜像在构建容器并启动容器:

    第一步下载镜像(点我查看需要镜像)  

    docker pull  jenkins/jenkins

    执行docker run,

    docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /root/jenkins:/var/jenkins_home jenkins/jenkins

     参数详情哈~~ 

    -d :指定容器后台运行

    --name:我给容器起个名字叫jenkins

    -p: 端口映射格式(本地端口:容器端口),8080是访问端口,50000用户其他机器上设置了一个或多个基于JNLP的Jenkins代理程序链接使用,这个端口可以不要滴(-p 50000:50000参数可以去掉)

    -v:物理卷映射,就是本地与容器共享磁盘,格式(本地目录:容器目录)

    jenkins/jenkins  镜像存储名称或者id

    3、查看初始化秘钥的两种方式

    第一、执行以下命令查看日志,这里有个重点,注意敲黑板了:日志中有个字符串入下图,第一次登陆需要使用的秘钥

     docker logs jenkins

    第二、如果发现日志没有哈哈哈,幸运眷顾你,不是第一次启动吧,那你来这里呀~,看看图片是不是跟日志上的一致,嘿嘿~

    cat /root/jenkins/secrets/initialAdminPassword

     二、登录初始化Jenkins

    1、访问方式 http://127.0.0.1:8080 ,格式: http://IP或域名:端口,第一次进入初始化加载页面稍慢3-8分钟,需要大家注意下哈~,莫着急。

    2、访问之后会出现下面的页面,将日志中的秘钥复制进去点击继续

     3、点击继续后进入小等待、点击一下安装社区推荐插件(一下就好),哈哈哈~恭喜你进入一个漫长的等待,因为需要取社区下载插件并安装,过程如下面的图片。

     

    4、经过漫长艰辛的等待我们迎来的曙光,来来咱们一起设置下第一位管理员的信息,设置好点击保存完成

    5、在实例配置中走默认即可,这也是启动时候配置的地址。点击保存并完成,就结束了

      

    三、全局配置并应用项目 

     1、JDK配置

      如果获取jenkins容器中的默认jdk安装路径:

      第一步、需要登录jenkins

    docker exec -it jenkins /bin/bash

      第二步、执行命令 

    echo $JAVA_HOME

      第三步、获取java环境安装地址配置到全局配置的jdk部分

    2、maven配置

     

    3、ssh配置

      系统默认安装docker容器位置  /var/jenkins_home/.ssh

       可以暂时跳过,看下面第四步创建应用下面的第二步源码管理中添加git配置中的第一种方案ssh免密

    4、插件安装

      登录jekins后菜单路径为系统管理-系统配置-插件管理,可以查看

     

    四、创建应用

    1、首页菜单中新建任务,输入任务名称,选择风格确定即可

    2、源码管理中添加git配置

    我们可以看到添加url的时候会出现没有权限,这种情况我们有两种方式解决,第一种ssh公钥免密,第二种设置账号密码,不管第一种还是第二种都需要有项目的权限(比如开源或者账号密码)我用的是开源,gitlab另一种配法:jenkins连接gitlab,提示returned status code 128,附解决办法

    第一种ssh公钥免密:先登录jenkins的docker容器

    docker exec -it jenkins /bin/bash

    然后执行生成秘钥并复制,可以直接执行下面命令,知其然来这里-->Linux 设置秘钥登录(SSH免密连接)

    cd /var/jenkins_home/.ssh
    ssh-keygen  -b 4096 -C niunafei0315@163.com
    touch authorized_keys
    cat id_rsa.pub >> authorized_keys 
    cat authorized_keys 

    使用cat命令获取公钥,复制添加到到码云公钥管理中。

      第二种通过设置Credentials属性。

    因为我采用的是第一种,ssh免密方式下面是结果,

     3、这里部署使用的是脚本部署,先添加顶层maven,指定使用的版本输入命令

    # maven命令,输入框的时候去掉mvn的命令
    mvn clean install -Dmaven.test.skip=true

     远程部署命令【Jenkins】远程部署

    狂踩大小坑

    1、执行docker run 命令,爆出异常 touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied

    太坑了我选的是root目录下,所以原因是映射文件的权限不足,那就给权限呗。

    解决方式:

     chmod 777 /root/jenkins

     2、安装jenkins时出现 No such plugin: cloudbees-folder的解决办法

      1、打开链接“http://ftp.icm.edu.pl/packages/jenkins/plugins/cloudbees-folder/”,在最下面找到并打开“latest”目录。

      2、将目录中的“cloudbees-folder.hpi”下载下来后放在“jenkins安装目录warWEB-INFdetached-plugins”文件夹中。

        执行1、2步骤后刷新页面仍然出现“ No such plugin: cloudbees-folder”错误,猜测这个“hpi”文件可能是项目启动时候加载,是需要重启jenkins服务才可以,因此执行:

      3、在“控制面板-管理工具-服务”中找到“jenkins”服务,重启服务。docker 使用命令docker restart jenkins 

        再次打开jenkins的链接 http://localhost:8080/ 后已经可以正常安装插件,问题解决。

          解决方案转载于:https://www.cnblogs.com/changjianblog/p/10916098.html

      打包异常 https://www.cnblogs.com/sxdcgaq8080/p/10489326.html

     3、初始化完成显示部分插件安装失败,

       方案:更换系统管理--插件管理--高级--升级站点 ,然后在已安装查看异常插件,进行可选插件中搜索并直接安装

      站点链接提供:

    http://updates.jenkins.io/update-center.json
    
    http://mirror.xmission.com/jenkins/updates/update-center.json

     4、jar中没有主清单属性【解决办法】

      原因是maven-plugin中存在repackage需要排除掉

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <fork>true</fork>
                    </configuration>
                    <executions>
                        <execution>
                            <goals>
                                <goal>repackage</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
            <resources>
                <resource>
                    <directory>src/main/resources</directory>
                    <!--一定要设置成true.这样才会用对应env目录下的配置文件覆盖原来的-->
                    <filtering>true</filtering>
                </resource>
            </resources>
        </build>
  • 相关阅读:
    java 数组的定义
    java 流程控制语句
    java 跳转语句(break、continue)
    java 循环嵌套
    java连接数据库
    用JAVA给数据库增加和修改数据代码
    简单匿名内部类的写法
    抽象类的定义以及简单代码
    继承多态的简单代码
    单例模式
  • 原文地址:https://www.cnblogs.com/niunafei/p/12896493.html
Copyright © 2011-2022 走看看