五、jenkins主要的一些配置
系统配置中配置jdk,maven路径
全局工具配置,配置jdk,maven,git路径和上面的路径要保持一致
凭据配置,有些页面无法出来页面,可以通过http://ip:port/credentials/进行访问
插件看个人需要
配置时间,脚本命令行中执行
点击进入脚本命令行将以下命令运行即可。
system.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')
六、项目配置
创建项目
配置项目
编写shell脚本
###!/bin/bash ### 制定打包模块 arr=(community-starters/community-xxx-starter:8081) ###加前缀 suffix="-"${BUILD_ENV} ###自定义网络 ip_param='' echo "当前环境"${BUILD_ENV} ###如果执行dev环境,走以下流程 if [ ${BUILD_ENV} == "dev" ];then ### 如果是在本机上安装就使用内网ip,这样速度会快很多,内网ip查询:ifconfig -a echo 'export DOCKER_HOST="tcp://xxx.17.0.1:8010"' export DOCKER_HOST="tcp://xxx.17.0.1:8010" ###通过命令docker network create --driver bridge --subnet=xxx.30.0.0/16 common-network创建自定义网段,docker network inspect common-network进行查看,配置的时候,不要以0结尾,如以下配置即可: ip_param='--ip xxx.30.0.2' fi ### for 遍历 for mp in ${arr[*]} do ###截取字符串获得module名称和端口 path=${mp%:*} module=${path###*/} ###arr中配置了端口:8081 port=${mp###*:} ###arr中配置了,container_name=community-starters/community-xxx-starter-dev container_name=$module$suffix ###arr中配置了,image_name=community-starters/community-xxx-starter-dev image_name=$module$suffix echo "开始构建: "$container_name":"$port CID=$(docker ps -a | grep "$container_name") if [ "$CID" != "" ];then echo "删除现有容器" docker stop $container_name docker rm $container_name fi echo "移除镜像" : $image_name docker rmi $image_name cd $module echo "当前路径" :$(pwd) echo "构建容器": $container_name docker build -t $container_name . echo "启动容器" : $container_name docker run --name $container_name --restart=always -d -p 8081:8081 -p 8082:8082-p 8083:8083 -e TZ=Asia/Bangkok -v /root/fragant/logs:/root/logs:z -v /etc/localtime:/etc/localtime:z -e SPRING_PROFILES_ACTIVE=qa -m 2G $image_name echo "连接容器网络" : $ip_param $container_name docker network connect $ip_param common-network $container_name echo "执行完成" done
内网ip查询
项目结构
编写Dockerfile
FROM openjdk:8-alpine MAINTAINER community-xx-starter ADD target/community-xx-starter.jar /community-xx-starter.jar EXPOSE 8081 ENTRYPOINT ["sh","-c","java -jar -Dspring.profiles.active=qa /community-xx-starter.jar"]
进到服务器检出项目的目录,这个时候项目检出并没有打包成jar包,需要手动打包,命令如下:
mvn clean install
如果不成功的话可以尝试使用绝对路径进行调整,例如:
/opt/java/maven/bin/mvn clean install
打包jar包成功之后可以进行自动化部署了
说明:在弄CI流程的时候可能会出现各种问题,比如脚本执行卡住,这个时候可以将脚本中的命令一条条拿到服务器上面执行,排除命令的错误性。比如误删了某个文件,可以进行手动恢复,可参考:Linux系统:第十三章:centos误删文件如何恢复文件数据。比如项目部署成功无法访问,排查项目是否成功运行,对日志进行排查排除项目启动错误导致的无法访问,对网络进行排查排查安全出口和入口等问题。如果觉得jenkins配置太过麻烦,可参考gitlab的CI:Linux系统:第十五章:gitlab集成CI。
博主的心理话:这里还是要吐槽一下,这几天一直在弄二套CI流程(gitlab的ci和jenkins),踩坑无数,目前网络上面太多相同的文章了,搜索出来一页至少超过一半的文章,文章内容一模一样,剩下的就是排版乱的很,看都看不下去的那种,导致找到的解决方法的时间大大延长,希望未来这种环境能够有所改善。
七、jekins迁移到另一台服务器上
首先本服务器上面的jenkins运行正常,另一台服务器的jenkins也运行正常,需要知道二台服务器上面的安装目录
找到jenkins_home目录
find / -name jenkins_home
解压
sudo tar czvf jenkins.tar.gz *
复制压缩包到新服务器上面去,-i "qt_dev_cert.pem"表示访问目标服务器需要携带私钥,qt_dev_cert.pem表示当前目录下的私钥文件,root@xx.xx.xx.xx 表示root用户,xx.xx.xx.xx表示目标服务器的ip,/var/jenkins_home表示复制到那个目录下面。如果是密码登录则换成-p 密码即可。
scp -p "password" jenkins.tar.gz root@xx.xx.xx.xx:/var/jenkins_home ------------------------------------------------------------------------------------ scp -i "qt_dev_cert.pem" jenkins.tar.gz root@xx.xx.xx.xx:/var/jenkins_home
去另一台新服务器解压
tar zxf jenkins.tar.gz
将解压的文件复制到新服务器的jenkins_home目录里面即可
cp /var/jenkins_home /home/jenkins_home