基于docker搭建Jenkins自动化构建发布(tomcat war包及Java jar包)

一、linux环境准备

安装jdk

https://www.cnblogs.com/fuzongle/p/12811057.html

安装git(此环节可把代码库的公私钥先行配置好)

https://www.cnblogs.com/fuzongle/p/12830572.html

安装maven

https://www.cnblogs.com/fuzongle/p/12825048.html

安装docker

https://www.cnblogs.com/fuzongle/p/12781828.html

二、安装Jenkins

1.启动docker,下载Jenkins镜像

docker pull jenkins/jenkins
image.png

2.创建Jenkins挂载目录并授权权限(我们在服务器上先创建一个jenkins工作目录 /var/jenkins_mount,赋予相应权限,稍后我们将jenkins容器目录挂载到这个目录上,这样我们就可以很方便地对容器内的配置文件进行修改。 如果我们不这样做,那么如果需要修改容器配置文件,将会有点麻烦,因为虽然我们可以使用docker exec -it --user root 容器id /bin/bash 命令进入容器目录,但是连简单的 vi命令都不能使用)

mkdir -p /var/jenkins_mount
chmod 777 /var/jenkins_mount

3.创建并启动Jenkins容器

docker run -d -p 10240:8080 -p 10241:50000 -v /var/jenkins_mount:/var/jenkins_home -v /etc/localtime:/etc/localtime -v /usr/local/apache-maven-3.8.4:/usr/local/apache-maven-3.8.4 -v /home/jdk/jdk1.8.0_291:/home/jdk/jdk1.8.0_291 --name myjenkins jenkins/jenkins
#参数说明
-d 后台运行镜像

-p 10240:8080 将镜像的8080端口映射到服务器的10240端口。

-p 10241:50000 将镜像的50000端口映射到服务器的10241端口

-v /var/jenkins_mount:/var/jenkins_mount /var/jenkins_home目录为容器jenkins工作目录,我们将硬盘上的一个目录挂载到这个位置,方便后续更新镜像后继续使用原来的工作目录。这里我们设置的就是上面我们创建的 /var/jenkins_mount目录,以及maven和jdk的目录同样需要挂载,保证容器内能访问到宿主机上的环境

-v /etc/localtime:/etc/localtime让容器使用和服务器同样的时间设置。

--name myjenkins 给容器起一个别名

#如果有端口
docker ps -l

4.查看jenkins是否启动成功,如下图出现端口号,就为启动成功了

docker ps -l
image.png

5.查看docker容器日志。


image.png

6.访问Jenkins页面,输入你的ip加上10240


image.png

7.管理员密码获取方法,编辑initialAdminPassword文件查看,把密码输入登录中的密码即可,开始使用。
vi /var/jenkins_mount/secrets/initialAdminPassword

至此,Jenkins安装结束!

三、访问Jenkins安装插件

1.系统管理→插件管理→可选插件→搜索如下你要安装的插件。
1.1.默认是英文,如果英文水品不怎么好的,建议安装jenkins中文插件,安装下面三个插件后,可以输入自己的IP+端口/restart重启,也可以手动重启。
Locale plugin
Localization Support Plugin
Localization: Chinese (Simplified)

image.png

1.2安装maven插件
image.png

1.3安装git插件,如果你用的是svn就去下载对应的插件
image.png

1.4安装webhook插件

image.png
  1. 系统管理→全局工具配置


    image.png

    2.2.找到自己安装maven插件的位置的配置文件路劲,jdk安装的文件路径


    image.png

    2.3.找到自己安装git插件的路劲,maven插件路劲,填写成功后应用并保存
    image.png

    到此基础配置已完成!

四、新建项目(tomcat项目)

1.主页→新建项目


image.png

2.在General中选择丢弃旧的构建,保持构建天数自定义,保持最大构建个人数,根据个人需求。


image.png

3.配置项目源码地址库
image.png

4.配置git私钥,同PC端配置git公私钥,此处配置好私钥即可,配置好后选择对应的分支


image.png

5.选择构建触发器,此处选择定时轮询策略,即定时检查代码有无更新,有则触发构建
image.png

6.选择构建前置操作,主要是maven的配置及命令,注意:此处可能会提示找不到pom文件,可以看看前篇有提到的Jenkins容器中maven目录的映射是否有配置
image.png

7.配置构建后操作
image.png

8.配置tomcat服务账号密码

编辑tomcat配置目录conf下的tomcat-users.xml文件,插入账号密码并授予脚本权限

<user username="admin" password="admin" roles="manager-gui,manager-script,manager-jmx,manager-status"/>

9.立即构建进行测试,构建控制台日志中能看到以下success输出则表示构建成功,即可去tomcat服务器查看war包的运行状态



至此,基于tomcat运行的war包项目在Jenkins上的持续构建配置已经完毕,需要注意的是博主环境是基于docker容器运行的Jenkins,所以tomcat环境等同于远端的服务器,这里主要是通过tomcat自身的机制实现war包的更新发布

五、新建项目(Java jar包项目)

大部分配置与前篇tomcat环境配置相同,此处省略。
1.系统管理-系统配置,配置Publish over SSH(如果找不到该项需要先添加该插件),此处配置用作于Java的jar包构建完成后的运行脚本执行,此处私钥配置可自行百度此处不做详解


image.png

2.配置jar包构建后的操作


image.png

3.脚本核心内容,除了环境变量等配置外,下方截图中突出的两处是解决Jenkins构建完成后杀子进程导致jar包未启动即退出的问题。


image.png

image.png

至此基于Jenkins持续构建Java jar包环境已经搭建完毕,可以进行构建测试了。

六、搭建过程中的问题与解决方案

1.构建过程中提示找不到maven配置文件或目录
解决方案:前篇中提到的基于docker运行的Jenkins需要做相关目录的映射处理,另外在系统管理-全局工具配置中,需要配置maven的主目录及配置文件路径,git也一样


image.png

2.maven打包提示找不到启动类,maven插件异常,以及ava: 程序包com.sun.image.codec.jpeg不存在


image.png

解决方案:
<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                    <encoding>UTF-8</encoding>
                    <compilerArguments>
                        <verbose />
                        <bootclasspath>${java.home}/lib/rt.jar${path.separator}${java.home}/lib/jce.jar</bootclasspath>
                    </compilerArguments>
                </configuration>
            </plugin>

3.部署至远端tomcat时提示访问受限,The username you provided is not allowed to use the text-based Tomcat Manager (error 403)


image.png

解决方案:除了前篇提到过的在tomcat用户中添加相应配置外,还需要在/webapps/manager/META_INF/context.xml文件,将文件中对访问的来源受限设置注释

<Context antiResourceLocking = "false" privileged = "true" > <!--注释这里,去除对访问权限的设置 <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="127\.\d+\.\d+\.\d+|::1|0:0:0:0:0:0:0:1" /> --> </Context >

4.执行jar包脚本时提示 Java:command not found
解决方案:建立Java执行程序软连接


image.png

5.Jenkins构建结束后杀子进程导致的Java jar包部署未结束就退出导致应用运行不起来
解决方案:在执行脚本中设置不杀进程变量,执行启动命令后休眠一段时间使jar包运行起来


image.png

到此整个Jenkins持续构建环境搭建完毕,篇中部分来自以下原文:
https://www.cnblogs.com/fuzongle/p/12840219.html
https://blog.csdn.net/qq_39533847/article/details/81012385

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,294评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,493评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,790评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,595评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,718评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,906评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,053评论 3 410
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,797评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,250评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,570评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,711评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,388评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,018评论 3 316
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,796评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,023评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,461评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,595评论 2 350

推荐阅读更多精彩内容