原创

centos7一步一步搭建docker jenkins 及自定义访问路径重点讲解

  系统环境:centos7.7 (VMware中)

  镜像image 版本:jenkins/jenkins (截止2020.01.10最新版)

  参考文章:https://www.jianshu.com/p/12c9a9654f83

  1、一定要 docker pull jenkins/jenkins ,不要docker pull jenkins ,jenkins版本太旧已不维护了。(感谢文章:https://www.jianshu.com/p/9a3814c88bf2

  

  2、查看拉取的镜像 docker images 。

   

  3、/www下创建一个my_jenkins 文件夹,用于存放Jenkins挂载文件。

  

  4、为my_jenkins 文件夹赋予权限。

  

  默认创建的文件夹为当前登录者的权限,我这里是root创建的,所以权限也为root,但jenkins容器需要的权限是jenkins,所以此处需要给my_jenkins 赋予jenkins权限。(关于权限的添加,我们要感谢下这篇文章:https://blog.csdn.net/fenglailea/article/details/82698596

  

    5、启动一个jenkins容器,命名为my_jenkins_2020,并将上面创建的文件夹挂载到容器。启动成功后docker ps 可以查看到已经成功启动的jenkins 容器。并且默认会映射到50000端口。 

docker run -d --name my_jenkins_2020 -p 8080:8080 --restart=always -e TZ="Asia/Shanghai" -e JENKINS_OPTS="--prefix=/my_jenkins" -e JENKINS_ARGS="--prefix=/my_jenkins" -v /etc/localtime:/etc/localtime:ro -v /www/my_jenkins:/var/jenkins_home jenkins/jenkins
参数解析:
-d 后台运行容器,并返回容器ID;
--name 为容器起一个容易区分且容易书写的名字
-p 映射宿主机端口到容器端口,宿主机端口:容器端口
--restart=always 机器重启时自动启动容器
-e       设定一些必须的环境变量。
          -e TZ="Asia/Shanghai" 设定时区为上海,强烈建议国内设定,否则容器内打印的所有日志时间都会差8小时。
          -e JENKINS_OPTS="--prefix=/my_jenkins" -e JENKINS_ARGS="--prefix=/my_jenkins" 重点!!!设定jenkins访问的路径,非必选,如果是直接根目录或ip地址访问,则不需要添加,如果是想nginx反向代理且不在根目录下,则必须,否则只配置nginx会报静态文件404错误,此处名字应与文件夹名称一致。此处特别感谢两篇文章:https://blog.csdn.net/whh18254122507/article/details/81783430https://www.jianshu.com/p/8315657465ac
-v       挂载宿主机文件到容器。本例两个分别为:
          -v /etc/localtime:/etc/localtime:ro 挂载宿主机时间,保持容器时间正确。
          -v /www/my_jenkins:/var/jenkins_home 绑定挂载文件

   

  6、浏览器中访问自己的centos宿主机ip:8080/my_jenkins 反向代理路径,则进入jenkins配置页面。

  

  上图中提示要去/var/jenkins_home/secrets/initialAdminPassword 中查看初始密码,但由于我们已经将对应文件夹挂载到宿主机了,所以可以直接在宿主机中查看 more /www/my_jenkins/secrets/initialAdminPassword ~~如下,则显示初始密码,每个人的都不同,请使用你自己的初始密码,将该值复制到上面的管理员密码中,点击“继续”。

  

  7、等待初始化完成,继续选择“安装推荐的插件”,开始安装默认插件,根据网速不同安装速度可能会很慢,耐心等待完成。

    

  我这K级龟速,大约1小时20分钟后。。。。

    

  创建账号,既然是来学习这篇文章的,多数是第一次使用,可以创建一个通俗的账号admin,密码也可以简单点,我这里也是admin,正式环境可不要这么随便哟~,邮箱必填,点击“保存并完成”,继续,点击“开始使用jenkins"进入。

    

  进入后我们选择左侧的”Manage Jenkins“,发现还是英文版的,需要重启下容器:docker restart my_jenkins_2020,并重新刷新你的jenkins页面,输入创建的账号密码。

    

  

    

 

  8、安装全局工具配置。本文不讲解 git方式获取代码,所以删除git配置。

    

  本文将以一个存储在svn下的srping mvc项目介绍搭建一个maven构建项目,所以我们需要安装jdk和maven全局工具。默认配置jdk已经安装在/usr/local/openjdk-8,我们只需改成手动配置即可,maven默认没有安装,我们选择自动安装。然后点击保存。

  

  

   9、插件管理。选择系统管理中的“插件管理”——> “可选插件” ——> 输入Maven Integration 过滤,选中多选框,点击底部的直接安装。耐心等待安装完成~~

     

  (非必选)同样的方式过滤安装Deploy to container 插件。该插件用于将项目发布到tomcat下,如果不需要的可以不安装。

   

   安装完成后选中“安装完成后重启jenkins” 。

    

   10、重启后我们创建第一个jenkins任务~~

      如果不进行上一步的maven插件安装,则无法创建maven项目,现在则可以啦。

    

  上面说了,本次我们构建的是svn上的项目,输入svn项目地址后需要绑定访问svn的账号。只需要输入账号密码保存即可,然后下拉菜单中便可以选择新添加的svn账号。

    

  Build 中配置构建方式,输入 clean install(也可以输入其它mvn构建方式,不需要输入mvn package)

  

 

  本篇我们的项目最终要放到tomcat里运行,上面我们已经安装了Deploy to container 插件,便是为此做的准备。最底部选择“添加构建后的操作步骤” ——> “Deploy war/ear to a container”。输入对应内容,此处tomcat URL为tomcat服务的地址,对应的账号为tomcat的访问账号,添加方式如上面的svn账号,不再重复。以上填写完毕后点击保存。

    

  

  回到主页后准备构建。任务后面的下拉菜单选择立即构建,构建开始左侧会有进度,点击进度条查看构建详情,

  

  正常应该就可以执行成功了,配置结束。

  

  但由于我的项目用到了微软的 sqlserver 数据库(别问为什么,问就是必须,不得不,have to),而微软的 com.microsoft.sqlserver:sqljdbc4:jar 默认是不能从maven仓库找到的,所以构建中报错,需要手动添加sqljdbc4.jar到jenkins环境。

   

  11、解决以上问题。需要手动添加sqljdbc.jar 对应版本到jenkins容器中,首先docker jenkins 中虽然已经安装了maven,但是没有放到系统环境变量里,需要设置maven的环境变量才能使用mvn。

    A、将对应版本的sqljdbc.jar 上传到宿主机/www文件夹。(此处我已经上传了sqljdbc42.jar到宿主机,本文不详细讲如何获取并上传该文件)然后复制到docker jenkins容器。

    

    B、复制docker jenkins 的/etc/profile 文件到宿主机文件夹/www/my_jenkins。(为什么要复制到宿主机?因为docker jenkins 容器中默认不能使用vim,不想复制到本地也可以在docker jenkins容器中安装vim直接编辑,可以参考 https://www.cnblogs.com/jying/p/12082929.html 中的jenkins部分。)

    

    C、编辑复制来的profile文件,vi profile,在最后添加maven环境变量。(不会编辑的自己先学习下~~)因为我们用的是jenkins自动安装的maven,所以安装路径在/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3,版本改成自己上面安装maven插件时对应的版本。

    

    D、编辑完成后退出并保存,然后再复制回docker jenkins容器。((强烈建议且必须)同样的方式需要复制docker jenkins容器中的/var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3/conf/setting.xml 文件到宿主机,并修改其镜像为国内阿里镜像,再复制回jenkins容器。但由于我们已经将/var/jenkins_home挂载到宿主机/www/my_jenkins,所以可以直接修改宿主机的/www/my_jenkins/tools/hudson.tasks.Maven_MavenInstallation/maven3.6.3/conf/setting.xml。) 

       

   <!-- 阿里云中央仓库 ,将此段代码放在setting.xml的mirrors内-->
    <mirror>
        <id>nexus-aliyun</id>
        <name>Nexus aliyun</name>
        <mirrorOf>central</mirrorOf>
        <url>http://maven.aliyun.com/nexus/content/groups/public</url>
    </mirror>

       最后以root用户权限登录进jenkins容器,此处注意登录角色,否则可能会提示没有权限。 

    

    E、使设置生效需要执行下:source profile,然后再查看mvn -v,已经有信息了。

    

    F、将sqljdbc.jar加入docker jenkins容器maven仓库。    

mvn install:install-file -Dfile=sqljdbc42.jar -Dpackaging=jar -DgroupId=com.microsoft.sqlserver -DartifactId=sqljdbc4 -Dversion=4.0

这里记得改成自己的版本  -Dfile="jar包的绝对路径+完整文件名称版本"
此处假设你已经将sqljdbc.jar复制进docker jenkins容器文件夹/var/jenkins_home下。

   

   G、退出docker jenkins容器,再次回到页面重新构建maven项目。

   

 正常情况下应该可以了~~ 


  but,我的因为是自己搭建的vmware 虚拟机中centos7.7 ,结果又构建失败:Caused by: java.net.NoRouteToHostException: No route to host (Host unreachable) 

  

   网上查找原因,是防火墙问题,但是按照某些说法直接关掉防火墙后无法连接内网的svn了,,,那些失败的方法我就不贴出来误导大家了,,最后自己在虚拟机上手动添加了8080和8081端口到防火墙,再次构建,终于成功!!!

  

   

  配置完成!!!

  

  

 ~~~~~~~~~~~~~~ 补充 ~~~~~~~~~~~~~~~~~~~~~~~~~~

 jenkins忘记登录密码时重置密码为123456方式:https://www.jianshu.com/p/68fcfff47358 

修改 JENKINS_HOME/users/usernamedir 目录下的config.xml  文件

注:usernamedir 就是你忘记密码对应的用户文件夹
如果是java -jar方式启动的,HOME目录位于/root/.jenkins

修改config.xml,找到 passwordHash部分,替换原有的hash值
  #jbcrypt:$2a$10$DdaWzN64JgUtLdvxWIflcuQu2fgrrMSAMabF5TSrGK5nXitqK9ZMS
修改为  #jbcrypt:$2a$10$4NW.9hNVyltZlHzrNOOjlOgfGrGUkZEpBfhkaUrb7ODQKBVmKRcmK

后者是123456的hash值

重启Jenkins

 

正文到此结束
本文目录