jenkins环境构建

整体思路

  1. docker搭建jenkins
  2. docker单独安装jdk、tomcat、maven等
  3. jenkins使用slave调用其它docker主机完成jdk、tomcat、maven等操作
  4. 也可以使用外挂的方式将jdk等基础资源装在主机上
  5. 使用registry搭建docker私库
  6. jenkins通过外挂方式调用docker
  7. jenkins通过生成image来实现容器化持续集成

安装jenkins

docker search jenkins
docker pull jenkins/jenkins
docker images
sudo docker run -d --name enkins -p 8081:8080 -p 50000:50000 --volume $PWD/jenkins:/var/jenkins_home jenkins
chown -R 1000 jenkins
docker start jenkins
docker ps

修改端口

配置文件
端口配置

启动配置

访问地址:http://47.98.226.232:8081
宿主机:
cd jenkins/
[root@guoyasoft jenkins]# find ./ -name initialAdminPassword
cat ./secrets/initialAdminPassword
安装插件
设置管理用户(所有项都必填)
查看日志:docker logs jenkins
image.png
image.png
image.png

更新插件源

插件管理-高级
升级插件源

jenkins镜像地址列表
http://mirrors.jenkins-ci.org/status.html

选择一个进入


随便选一个jenkins镜像
复制打开的地址

安装maven插件

插件管理
maven插件
maven插件安装完成

安装deploy插件

deploy插件

安装git插件

默认已安装


git插件

Maven插件 Maven Integration plugin
发布插件 Deploy to container Plugin
git插件 Git plugin
发送邮件插件 Email Extension Plugin

安装邮件插件

默认已安装


email插件

插件存放位置

插件存放位置

配置环境

全局工具配置
安装工具列表1
安装工具列表2
docker exec -it /bin/bash
java -version
git --version
默认自带
自动安装maven

构建项目

image.png

保留天数和个数

image.png

源码仓库

image.png

定时器

build whenever a snapshot dependency is built 当job依赖的快照版本被build时,执行本job。 
Build after other projects are built:在其他项目构建完成后再进行构建。

这里又分三种情况: 
1. Trigger only if build is stable:其他项目构建成功 
2. Trigger even if the build is unstable:其他项目不稳定 
3. Trigger even if the build fails:其他项目构建失败

Build periodically 隔一段时间build一次,不管版本库代码是否发生变化,通常不会采用此种方式。例如: 0 2 * * * (每天2:00 必须build一次源码) 
Poll SCM:隔一段时间比较一次源代码如果发生变更,那么就build。否则,不进行build,通常采用这种方式; 
定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。配置如下: */5 * * * * (每5分钟检查一次源码变化,如果有更新才build)

在 Schedule中填入* * * * *,代表一分钟监听一次
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
所以 0 * * * * 表示的就是每个小时的第 0 分钟执行一次构建。

五个*依次标识 分钟  小时 每月几号 哪个月月  周几

例:

H/15 * * * *   每15分钟

H(0-29)/10 * * * * 每小时的0到29分钟每15分钟

H 2-19/2 * * 1-5 每周1到周五(工作日)2点到19点每2小时执行

H H 1,15 1-11 *     1到11月1号和15号各执行一次

每15分钟触发1次


定时器

maven编译打包

maven操作

tomcat部署

image.png
image.png
image.png
点击增加构建后操作步骤下拉选择:Deploy war/ear to a container ,多出一个发布选项

WAR/EAR files 是war包的相对路径, 这里填写: target/*.war
Context path是tomcat的发布路径,例如:填写了myDemo , 则访问地址为:http://localhost:8080/myDemo
Containers 发布到的容器,主要可发布到tomcat、jboss、GlassFish 
下拉选择 tomcat7.x
在Manager user name 填写上面自定义的用户名 
在Manager password 填写上面自定义的密码 
在Tomcat URL 中tomcat的访问地址 http://localhost:8689 
(有网友说端口号后面不要加/)
image.png
image.png



image.png
image.png

执行任务

image.png
image.png
构建列表
控制台日志

添加用户

设置允许注册
登录界面
注册界面
注册成功
用户管理
设置用户

其中的账号名称,就是你的用户名。描述就是你对该账号的描述。
API token,说的是用户对外提供的API接口的口令,可以通过change API Token 来修改API Token。
Credentials:证书的可用情况
E-mail: 用户的邮箱地址,可以在这里修改。
My view:视图,目前暂时不知道它们的作用,欢迎大神前来指导。
剩下的密码就不说了,大家都懂的。

maven在docker容器中的仓库

find ./ -name repostory
本地上传到docker宿主机的jenkins外挂文件夹
然后进入docker
再将jdbc6的jar包复制到repository
image.png

权限分配

权限插件
Role Strategy Plugin


权限插件

重启jenkins

1、关闭Jenkins
     只需要在访问jenkins服务器的网址url地址后加上exit。例如我jenkins的地址http://localhost:8080/,那么我只需要在浏览器地址栏上敲下http://localhost:8080/exit 网址就能关闭jenkins服务.
2、重启Jenkies
    http://localhost:8080/restart
3、重新加载配置信息
    http://localhost:8080/reload

4. cmd启动tomcat
java -jar jenkins.war

5. 后台启动
nohup java -jar jenkins.war --httpPort=8081 &

6. windows启动jenkins
 net stop jenkins
 net start jenkins

关于maven

首次选择自动安装
自动安装后

进入jenkins的docker

docker exec -it jenkins /bin/bash

查看maven_home

find ./ -name mvn
./var/jenkins_home/tools/hudson.tasks.Maven_MavenInstallation/maven/bin/mvn

远程ssh发布war包

思路

Publish Over SSH 不是将war包发布到tomcat容器下,而是先利用该插件将build好的文件上传到远程linux 的指定目录下,然后利用该插件远程执行脚本将指定目录下的文件复制到tomcat的执行文件夹下,再利用脚本远程重启tomcat即可

环境要求

远程 tomcat部署在linux上,不支持 windows上远程发布

插件

jenkins 控制台下 系统管理->管理插件->可选插件->通过搜索找到

“Publish Over SSH”,进行勾选安装。安装完毕重起jenkins网页控制台。


ssh插件

配置远程linux SSH的访问权限

系统管理->系统设置界面,滚动配置界面直至如下位置,会看到了多了Publish over SSH的配置选项,点击“增加”SSH Server,出现如下界面,分别填写远程linux的HostName(登录IP)、userName(linux ssh的用户名)。


系统工具配置ssh

配置服务器脚本信息

Transfer Set Source Files这个路径默认是在项目的workspace中,因为构建好的war包在target目录中,所以这里指向了target/shop.war。

Remove prefix可以把target/shop.war的target/去掉,这样上传到服务器上就是shop.war,否则它会创建target目录。


image.png
domain可以与文件目录不一致。主要是 Sources files要与Jenkins上war的位置一致,package的名称需要与jenkins上war名一致

 #!/bin/bash                                  

#bash shell,shell中的一种,linux一般默认是bash shell


domain="man.picking.wms.dmall.com 


"           #给domain赋值,参数化
package="wms-picking-man-web"                
deployid=${package}_${BUILD_ID}            

 #deployid=wms-picking-man-web_BUILD_ID,BUILD_ID=构建版本号
ports="(9000,8000)"                     
# make sure domain directory exists         

 #此句为注释
mkdir -p /web/domains/${domain}             

 #/web/domains/新建文件夹man.picking.wms.dmall.com 
#-p参数:如果没有父目录会直接创建父目录
mkdir -p /web/logs/${domain}
# stop the running tomcat server
ps -aef | grep java|grep "/${domain}/"| grep -v grep | sed 's/ [ ]*/:/g' |cut -d: -f2 |xargs kill -9     

#过滤java进程中包含${domain}的进程传递给xargs
#grep -v grep 过滤掉查询进程                                                                                             

#sed 's/ [ ]*/:/g'将获取到的进程数据,按照空格拆开用:隔开组合,[中间是空格]*匹配1个或多个空格
#cut -d: -f2 取:隔开的第二个字符
#xargs kill -9 等于 kill -9 PID 9是信号变量
#kill -9 pid等于kill -s 9 pid,表示强制,尽快终止一个进程
# unzip package


mkdir "/web/app/${domain}"                  #等于 mkdir -p /web/app/${domain}              

mv /web/app/deploy/${package}.war /web/app/deploy/${deployid}.war      #将war包重命名为项目名+构建号      

rm -rf /web/app/${domain}/*                           #删除所有原目录下所有文件

echo "deploy ${domain} application"   #打印提示:deploy man.picking.wms.dmall.com 

application
unzip /web/app/deploy/${deployid}.war -d /web/app/${domain}           #将需要部署的war包,解压到/web/app/man.picking.wms.dmall.com 

#此文件夹为代码库
domain_conf="/web/servers/tengine/conf/domains/${domain}.conf"          
if [ ! -f "${domain_conf}" ]; then                                 #如果配置文件domain_conf不存在

cp /home/dmadmin/deploy/domain.conf ${domain_conf}              #将/home/dmadmin/deploy/domain.conf拷贝到domain_conf去

sed -i "s/{domain}/${domain}/g" ${domain_conf}          #将domain_conf文件中所有{domain}替换${domain}

else
sed -i "/weight=10 max_fails=2 fail_timeout=30s;/d" ${domain_conf}    #否则,删除weight=10 max_fails=2 fail_timeout=30s;这行

fi
# deploy
for port in $ports;                                                   #ports中有多少个参数就执行多少次
do
port=${port//(/}                                                      #去括号,port=9000,800)
port=${port//)/}
# tomcat connection port
sd_port=`echo $port|cut -d "," -f1`                        #将port元素按照“,”分开,取第一个数
# tomcat shutdown port
conn_port=`echo $port|cut -d "," -f2`
# insert upstream into nginx domain

 #######
sed -i "1 a    server 172.16.195.30 


:${conn_port}  weight=10 max_fails=2 fail_timeout=30s;" ${domain_conf}     #在${domain_conf}配置文件中第一行插入服务器数据,nginx监听

#copy conf to 193 server
 scp -P 50027 -i /home/dmadmin/kp-lsq6dded ${domain_conf} [email protected]:/web/servers/tengine/conf/domains    #当前服务器为172.16.195.30 

#将当前服务器的配置文件domain_conf拷贝到119.254.210.145 

常见问题

1. tomcat内存溢出

tomcat内存溢出

解决办法:
这个错误有很多原因,除了catalina.out日志外
去查看 tail -200f localhost.2018-04-24.log


mapper不存在

原因:
maven编译src的时候,只会编译java文件,而mapper里面的xml没放在resource里,需要在pom.xml文件里面配置文件类型

    
        
            
                src/main/resources
                
                    **/*.properties
                    **/*.xml
                    **/*.tld
                
                false
            
            
                src/main/java
                
                    **/*.properties
                    **/*.xml
                    **/*.tld
                
                false
            
        
        

jemeter持续集成

jemeter插件
安装列表
image.png

美化报告

image.png
image.png

你可能感兴趣的:(jenkins环境构建)