搭建jenkins
实现背景:Jenkins通过给定的代码地址URL,将代码拉取到其“宿主服务器”(就是Jenkins的安装位置),进行编译、打包和发布到容器中。在Jenkins的宿主服务器中必须要有可以进行:代码clone(Git)、代码编译(Maven)、代码运行(Tomcat)的基本环境
一、 安装Git
1、安装依赖
yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker
2、下载Git
选择一个目录,存放下载的git,例如我的是:/home/test/,大家可以根据需求到官网下载相应的版本
wget https://github.com/git/git/archive/v2.3.0.zip
3、解压Git
因为下载的是一个zip,所以使用命令将其解压到git目录下:
unzip v2.3.0 -d git
4、编译安装Git
将其安装在“/usr/local/git”目录下,命令如下
make prefix=/usr/local/git all
sudo make prefix=/usr/local/git install
5、配置环境变量
vim /etc/profile
export
PATH=
/usr/local/git/bin:$PATH
source /etc/profile
6、检查是否安装成功
git
--version
此处使用源码安装,也可以使用yum安装:yum –y install git
二、 JDK、Maven安装
1、 下载和解压Maven
tar xf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 /usr/local/maven
2、 安装JDK
tar xf jdk-8u111-linux-x64.tar.gz
mv jdk1.8.0_111/ /usr/local/java
3、配置环境变量
vim /etc/profile
JAVA_HOME=/usr/local/java
export MAVEN_HOME=/usr/local/maven
export PATH=$PATH:$MAVEN_HOME/bin
export JENKINS_HOME=/home/test/tomcat/webapps/jenkins
JRE_HOME=/usr/local/java/jre
JAVA_BIN=/usr/local/java/bin
JRE_BIN=$JRE_HOME/bin
PATH=$PATH:$JAVA_BIN:$JRE_BIN
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export JAVA_HOME JRE_HOME JRE_BIN JAVA_BIN PATH CLASSPATH
source /etc/profile
4、检查是否安装成功
java –version
mvn –version
三、 部署Jenkins
1、 将jenkins的war包放到Tomcat中并启动Tomcat,成功启动之后访问ip和端口如下:
2、 安装插件
系统管理à管理插件à可选插件à过滤
GIT plugin
3、 Jenjins系统设置
1) 系统管理àGlobal Tool Configuration
4、Jenkins Location
这里配置的是ip加端口和一个路径名称,邮箱要进行设定,后期会发送jenkins执行的结果到邮件中
5、邮件通知
这里我配置的QQ邮箱,大家根据情况进行设置相应的smtp服务器,用户名、密码分别为自己的QQ邮箱何密码,如果不进行设置,后期jenkins构建项目的时候会报错,报错信息很好理解也很好找到是没有配置邮件的问题。
首先,要保证邮件的smtp和pop是开启状态的,这样的话才可以通过验证:
最后点击下边的应用、保存即可
5、Configure Global Security
然后回到系统管理,看到Configure Global Security 点击进去,根据下边进行配置即可
点击应用 保存之后,然后在屏幕的右上角,有一个登录-注册 ,点击注册即可实现用户的登录。
这里,如果是公司内网的话,或者最后搭建的jenkins是公司使用,那么最好用户名和密码为公司的账户密码,邮件也是公司的邮件,这样的话方便后期的操作。
至此Jenkins的基本配置完成。
创建Job
1、创建项目
点击登录之后,会看到下边的界面中:My Views
点击进去
点击:创建一个新任务
选择maven项目,点击OK,这里的Item名称是后边需要用到的,下边的配置也有用到这个的,大家可以很好的对应。
2、进行项目的配置
(1)源码管理选择Git,这个时候添加url之后,下边会报错,显示让去认证,认证即可(其他的安装中又遇到这个问题),如果认证失败,请下载认证Github Authentication plugin插件,这个在插件管理的可选插件中搜索安装。
我这里的rul是我在gitos上的一个项目,credentials是我在gitlab上的用户名和密码认证。
(2)构建触发器,就是什么时候执行jenkins的自动化部署
选择第一个,其他的基本是定时执行什么的,大家可以自行查找,查看如何设置,根据需要进行配置
(3)Post Steps
Goals and options后填 clean package install -DskipTests
选择上图中的,然后下边 的Execute shell如下,脚本的编写在下边进行了详细的说明:
#!/bin/bash
#copy file and restart tomcat
export JAVA_HOME=/data/home/server/jdk
export CATALINA_HOME=/home/xuliugen/dubbo-provider
export CATALINA_BASE=/home/xuliugen/dubbo-provider
export BUILD_ID=dontKillMe
tomcat_path=/home/xuliugen/dubbo-provider
project=dubbo-provider
war_name=dubbo-provider.war
war_path=http://
132.153.
131.237/:
8022/jenkins/job/ManenDemo/ws/targetserver_port=
8082
file_path=~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target
$tomcat_path/bin/shutdown.sh
sleep
3s
echo"rm -rf ${tomcat_path}/webapps/ROOT/*"
rm -rf
${tomcat_path}/webapps/ROOT/*
cd$file_path
cp
${war_name}${tomcat_path}
/webapps/ROOT/
cd$tomcat_path
/webapps/ROOT/
unzip
${war_name}
rm -rf
${war_name}
sleep
5s
#$tomcat_path/bin/startup.sh
cd$tomcat_path
/bin/
./startup.sh
echo
"server restarted"
(4)邮件通知
至此基本设置完毕,点击应用、保存
(5)立即构建
点击左上角的立即构建
然后看到下边的Build History 点击蓝色的进去,会进入Console
下边是进行jar的下载,会下载到宿主服务器的maven仓库中:
下边的信息表示项目编译通过:
下边是运行脚本的信息:
脚本的分析
在Jenkins的服务器上查看:
可以看到在/root/.jenkins这个目录,实际存放了Jenkins拉取Git代码之后编译好war的位置,到此,大家也许都该明白了,编译后的位置就在这里啊!然后,接着是部署到宿主服务器的Tomcat容器中,如何将编译好的war放到tomcat中,这就需要脚本来完成,也是上述过程中配置的过程,下边对每一行进行分析。
首先我们应该明白,将编译好的war放到tomcat容器中,我们首先要知道这两个的位置:编译后war的位置和目标容器的位置,很显然我们是知道的。
1、脚本文件的头,这个没得说
#!/bin/bash
2、环境变量设置
export JAVA_HOME=/data/home/server/jdk
export CATALINA_HOME=/home/xuliugen/dubbo-provider
export CATALINA_BASE=/home/xuliugen/dubbo-provider
export BUILD_ID=dontKillMe
上边的各个位置,大家也许都知道,CATALINA_HOME和CATALINA_BASE的位置就是Tomcat容器的位置,这里根据需求我将Tomcat容器的名字改为dubbo-provider了,如果改成/home/xuliugen/tomcat是不是更好理解。
export BUILD_ID=dontKillMe这一句很重要,因为该job启动完后执行下一job,jenkins直接把tomcat进程杀了,所以无论脚本中怎么写了启动tomcat的命令,他是不会启动的。虽然上述截图中显示了Tomcat started、server restarted但是访问项目地址是访问不了的,这在:其他问题的第二个说明了这个问题。
3、其他路径位置
tomcat_path=/home/xuliugen/dubbo-provider
#我的Tomcat位置
project=dubbo-provider
#我的项目编译的名称
war_name=dubbo-provider
.war#最后打包的war名称
war_path=http://
132.153.131.237/:
8022/jenkins/job/ManenDemo/ws/targetserver_port=
8082#宿主服务器的ip何端口
file_path=~/
.jenkins/jobs/ManenDemo/workspace/spring_provider/target
#编译好的war包存放地址
这个:war_path 其实也就是Jenkins的宿主服务器位置IP,端口为jenkins运行的端口,大家只需要将ip地址端口ManenDemo换成自己的即可;
file_path:就是Jenkins帮我们编译好的项目war的位置,上图中大家也可以看到,并且大家不可以完全按照上边的路径,要找到自己宿主服务器上实际war的位置,进行设置。
4、耳熟能详的执行命令
下边就是我们在使用原始方式,部署war的命令,大家很简单的可以理解,其中:
注意:个人写脚本的能力有限,所以我是假设项目已经在运行的情况下,因此我上来就是先关闭Tomcat,(正确的方式,应该判断端口是否打开,如果本身tomcat未启动,我的这种情况,会在Jenkins的Console中报拒绝连接的问题,如下图)。
另外用到了sleep 3s 这个可以让线程休眠一下,这样的话可以看一下tomcat的日志信息。
下边的脚本就是删除原来容器中的文件,然后将编译好的war移动到容器中,解压。运行tomcat。
$tomcat_path/bin/shutdown.sh
sleep
3s
echo"rm -rf ${tomcat_path}/webapps/ROOT/*"
rm -rf
${tomcat_path}/webapps/ROOT/*
cd$file_path
cp
${war_name}${tomcat_path}
/webapps/ROOT/
cd$tomcat_path
/webapps/ROOT/
unzip
${war_name}
rm -rf
${war_name}
sleep
5s
cd$tomcat_path
/bin/
./startup.sh
echo
"server restarted"
将项目布署到远程Tomcat
上述创建项目,可以看出是在本地进行执行的,也就是进行编译后执行的Tomcat是何Jenkins的宿主服务器是在一起的,这很显然不符合我们常规的公司及其部署的方案,通常是将编译之后的代码在运行到其他的Tomcat服务器中的,下边有两种方式,将编译之后的项目部署到远程服务器中。
1、使用脚本的方式部署到远程服务器
采用ansible工具实现:
1)、首先在jenkins服务器上安装ansible,安装方式见ansible安装文档。
2)、在服务器上准备了两个脚本:一个是停tomcat脚本,一个是启动tomcat脚本;
3)、在ansible的hosts文件(一般放在/etc/ansible/),添加tomcat端的主机ip、ssh端口、用户、密码。
点击:创建一个新任务
选择maven项目,点击OK,这里的Item名称是后边需要用到的,下边的配置也有用到这个的,大家可以很好的对应。
2、进行项目的配置
(1)源码管理选择Git,这个时候添加url之后,下边会报错,显示让去认证,认证即可(其他的安装中又遇到这个问题),如果认证失败,请下载认证Github Authentication plugin插件,这个在插件管理的可选插件中搜索安装。
我这里的rul是我在gitos上的一个项目,credentials是我在gitlab上的用户名和密码认证。
(2)构建触发器,就是什么时候执行jenkins的自动化部署
选择第一个,其他的基本是定时执行什么的,大家可以自行查找,查看如何设置,根据需要进行配置
(3)Post Steps
Goals and options后填 clean package install -DskipTests
选择上图中的,然后下边 的Execute shell如下,脚本的编写在下边进行了详细的说明:
将ansible命令文件里面的内容根据自己的需要粘贴到上图中的command处。
然后先点Apply—再点保存。
保存完成后执行立即构建。
2、使用Deploy to container Plugin
插件部署到远程服务器
上述的开始阶段就安装了这个插件,下边就开始发挥其作用。
在创建的Job左侧点击设置,其他配置何在远程搭建项目是一致的,不同的是在这个地方:
以前我们在编译之后,将编译后的通过脚本补助到Jenkins的宿主服务器,使用插件,就不需要这种方式了。
还有就是的在构建之后,将编译后的文件**/target/dubbo-provider.war
(就是上边的~/.jenkins/jobs/ManenDemo/workspace/spring_provider/target目录)部署到下边的远程Tomcat容器中;这里Containers的用户名和密码是Tomcat管理员的账户密码,Tomcat URL 就是你需要进行部署的远程Tomcat服务器的ip和端口。
这里需要进行设置的是远程Tomcat的管理员信息,修改远程Tomcat容器下的conf–tomcat-users.xml文件,在内添加下边的内容:
<role rolename="manager"/>
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="admin"/>
<user username="admin" password="admin" roles="admin,manager,manager-script,manager-gui"/>
即可实现远程的访问,测试是可以通过的,但是有一个问题,通过这种方式,只将war复制到了wenapps下:
因此这种方式的话,我们访问的时候必须是ip、端口和项目名,例如:
http:
//115.159.151.247:8030/dubbo-provider/
当然这种方式 也是在实际的应用中不提倡的,解决方式就是修改Tomcat默认的访问路径即可,设置Tomcat–conf–server.xml文件如下:
在Host节点之间添加:
<Context path=
""docBase=
"dubbo-provider"debug
=
"0"reloadable=
"true"/>
或者在docBase里边输入项目的绝对路径,例如我的:
<Context path=
""docBase=
"/home/xuliugen/dubbo-provider/webapps/dubbo-provider"debug
=
"0"reloadable=
"true"/>
然后重启Tomcat,这样的话,http://ip:8030/dubbo-provider/ 和http://ip:8030这两种方式都可以访问到该项目。
其他问题
1、部署项目的时候报错
这个大家很好理解,是因为下载jar失败的问题,由于是第一次使用Maven,需要第一次下载很多jar到Maven仓库中,由于网络的问题下载失败,大家可以多次构建让他重新下载,或者直接到:https://repo.maven.apache.org/maven2 根据报错的jar,在maven2中找到自己缺失的jar,然后在/root/.m2/repository
相应的位置添加jar即可。
2、编写脚本文件启动tomcat但是项目仍然运行不起来
就是上边说道的问题了:
添加:export BUILD_ID=dontKillMe
,因为该job启动完后执行下一job,jenkins直接把tomcat进程杀了,所以无论脚本中怎么写了启动tomcat的命令,他是不会启动的。
3、遇到下边的问题
这就是在系统设置的时候,设置的git的地址不对,上述已经说明了,应该是git的可执行文件的地址,如果只是git的目录,是无法找到git这个可执行文件的,如下:
可以看出使用的是这个:/usr/local/git/bin/git 进行git仓库的配置何代码的拉取,因此这设置git的目录,jenkins默认是不会找bin目录下的git可执行文件的。
搭建jenkins的更多相关文章
- 一步一步搭建Jenkins环境
Jenkins使用经验谈1(一步一步搭建Jenkins环境)在公司使用 Jenkins 软件已经有一段时间了,走了很多弯路,但也积累了一些经验,可以和大家分享一下.我们来一起搭建Jenkins环境.首 ...
- Docker下搭建Jenkins构建环境
首先需要搭建好docker环境的linux系统,这个教程多如牛毛,在此不再赘述. 然后编写一个dockerfile来生成一个镜像,dockerfile其实就是一系列命令的集合,有点像windows的批 ...
- 搭建jenkins实现自动化部署
搭建jenkins实现自动化部署 一.安装jenkins 1.添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo https://p ...
- Jenkins持续集成学习-搭建jenkins问题汇总
目录 Jenkins持续集成学习5-搭建jenkins问题汇总 目录 前言 问题列表 nuget还原包问题 编译问题 SVN更新问题 参考文档 Jenkins持续集成学习5-搭建jenkins问题汇总 ...
- 搭建jenkins集群
搭建jenkins集群是为了解决单点服务器存在的性能瓶颈,也有业务的需要,比如:java服务打包的环境我们需要linux,ios打包的服务器需要mac机. 一.创建agent节点 1.打开 系统管理- ...
- 基于Centos搭建Jenkins 环境搭建
系统要求: CentOS 7.2 64 位操作系统 安装 Jenkins Jenkins 简介 Jenkins 是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提 ...
- Linux 搭建 Jenkins
环境准备 安装JDK 安装 JDK 之前写过一篇文章,本文就不具体讲了: Linux 安装 JDK 注意:Java版本不能是gcj,会导致Jenkins有问题,centos7搭建jenkins小记文章 ...
- 自动化测试全套流程(一)-搭建Jenkins环境
前提 既然要做自动化测试,那我们就做得彻底一些,将整套系统部署在Linux服务器上,在搭建Jenkins环境之前,我已经通过VirtualBox安装了一个CentOS的服务器,搭建Jenkins是基于 ...
- 个人环境搭建——搭建jenkins持续构建集成环境
---恢复内容开始--- 搭建jenkins持续构建集成环境 要搭建jenkins持续构建集成环境,首先要安装tomcat和JDK: 第一部分,基本说明: 敏捷(Agile) 在软件工程领域 ...
- centos7 搭建jenkins
centos7 搭建jenkins.note 环境:VMware 虚拟机 centos 7+ jdk 1.8+ tomcat7+jenkins搭建好linux 服务器后,关闭防火墙 停止firewal ...
随机推荐
- Python学习-17.Python中的错误处理(二)
错误是多种多样的,在 except 语句中,可以捕获指定的异常 修改代码如下: import io path = r'' mode = 'w' try: file = open(path,mode) ...
- ActiveMQ5.0实战三:使用Spring发送,消费topic和queue消息
实战一 , 实战二 介绍了ActiveMQ的基本概念和配置方式. 本篇将通过一个实例介绍使用spring发送,消费topic, queue类型消息的方法. 不懂topic和queue的google 之 ...
- 解决Navicat连接Oracle时报错ORA-28547
1:ORA-28547 原因:navicate Primium版本的OCi和本地数据库的OCI版本不一致. 解决方法: 1:把navicate Primium版本自带oci.dll替换本地Oracle ...
- jzoj5879. 【NOIP2018提高组模拟9.22】电路图 B
tj:一道好題 看區間操作可以想到線段樹 並聯操作公式:a1∗a2/(a1+a2)a1*a2/(a1+a2)a1∗a2/(a1+a2) 串聯操作公式:a1+a2a1+a2a1+a2 我們發現,一個區間 ...
- Python面向对象(成员修饰符)
day25 成员修饰符 class Foo: def __init__(self, name, age): self.name = name self.__age = age#私有,外部无法直接访问 ...
- FunDA(6)- Reactive Streams:Play with Iteratees、Enumerator and Enumeratees
在上一节我们介绍了Iteratee.它的功能是消耗从一些数据源推送过来的数据元素,不同的数据消耗方式代表了不同功能的Iteratee.所谓的数据源就是我们这节要讨论的Enumerator.Enumer ...
- java中的安全模型(沙箱机制)
java中的安全模型(沙箱机制) java安全沙箱(一)之ClassLoader双亲委派机制 java安全沙箱(二)之.class文件检验器 java安全沙箱(三)之内置于Java虚拟机(及语言)的安 ...
- struts+spring+hibernate两张表字段名一样处理方法
在利用struts2+spring+hibernate(利用Hibernate进行分页查询)三大框架进行开发项目的时候,出现一个问题:居然要进行关联查询的十几张表中有两张表的字段一样,并且这两张表中的 ...
- 企业IM (或业务系统)web api的json格式设计思考(原创)
在企业IM开发中,经常用到和业务系统的数据交换,在中国企业最常见的比如组织架构变更,一般在客户端加密保存了组织架构树(便于快速的查询和树展示),当HR或OA或AD域这些管控企业组织架构的数据发生改变, ...
- Java_使用日志
日志有什么用? 在实际开发中,不可能使用控制台输出所有数据,可以用日志把程序运行的过程记录下来,包括运行中出现的异常和BUG 当出现问题的时候,程序员可以去查看日志,从而能快速的找到问题所在. 一般来 ...