Jenkins+Svn+Docker搭建持续集成环境自动部署

博客 分享
0 159
张三
张三 2022-06-30 16:01:12
悬赏:0 积分 收藏

Jenkins+Svn+Docker搭建持续集成环境 自动部署

一、准备工作:

  • 两台服务器:192.168.206.212,192.168.206.213

  • 自己新建一个maven项目

其中两台机子做下面的软件配置(都有链接,可直达

212机子:

  • 安装expect并配置;

  • 安装jenkins

  • 安装docker

  • 安装私有镜像仓库

  • 安装JDK并配置;

  • 安装maven并配置;

213机子:

  • 安装SVN

  • 安装JDK并配置;

  • 安装maven并配置;

  • 安装docker

其中项目的话可以参照截图,controller,model什么的这些自定义就行。

重点注意红框框的这几个

 1、properties 配置

application-dev.properties 和 application-test.properties 主要就是数据库地址不一样,其他都一样。这里这两个文件不配置内容也可以。

 

2、pom文件

pom文件主要就配置红框框位置的这个,我这里的名称demo就可以让每次打包都是 demo.jar 这个名称

 

 

3、脚本文件

主要的来了。这五个配置文件

(1)docker_build.sh

#!/bin/bashRUNENV=$1MODULE=$2echo "环境: ${RUNENV}"# docker 仓库地址IMAGE_NAME="192.168.206.212:5000/${MODULE}:1.0.0.RC"echo $IMAGE_NAME >> IMAGE_NAMEdocker build --build-arg RUNENV=${RUNENV} -t ${IMAGE_NAME} .docker push ${IMAGE_NAME}

 (2)docker_deploy.sh

#!/bin/bashPORT=$1IMAGE=$2MODULE=$3echo "update image to: ${IMAGE}"docker stop ${MODULE}# 删除容器docker rm ${MODULE}# 减少磁盘空间 删除镜像docker rmi -f $(docker images | grep ${MODULE})docker run -d -p ${PORT}:8070 -v /home/logs:/home/logs --name ${MODULE} ${IMAGE}

 (3)Dockerfile

FROM airdock/oraclejdkMAINTAINER hmw 1445496485@qq.comARG RUNENV=${RUNENV}ENV RUNENV=${RUNENV}ENV TZ=Asia/ShanghaiRUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezoneRUN mkdir -p /var/yjz/demo \    echo ${RUNENV} > /tmp.propertiesCOPY target/demo.jar /var/yjz/demo/app.jarWORKDIR /var/yjz/demoENTRYPOINT ["java","-jar","app.jar","--spring.profiles.active=${RUNENV}"]# EXPOSE命令只是声明了容器应该打开的端口并没有实际上将它打开!# 我们声明了EXPOSE端口之后,我们使用-P命令进行随机映射的时候,是会对这个端口进行映射的。# 比如说我们现在对一个tomcat容器进行EXPOSE 9999声明,那么我们进行-P随机映射的时候是会对9999端口进行映射的。EXPOSE 8063:8063

 (4)expect.sh

#!/usr/expect/bin/expectset timeout -1# 获取传入参数set pwd [lindex $argv 0]set module [lindex $argv 1]set port [lindex $argv 2]set image [lindex $argv 3]spawn scp $pwd/docker_deploy.sh root@192.168.206.213:/home/service/fesco/$module.shexpect "*password:"send "root\r"spawn ssh root@192.168.206.213expect "*password:"send "root\r"expect "]# "send "sh /home/service/fesco/$module.sh $port $image $module\r"send "exit\r"expect eofexit

 (5)start.sh

#!/bin/bashPORT=$1MODULE=$2IMAGE_NAME="192.168.206.212:5000/${MODULE}:1.0.0.RC"echo "目录:" $(pwd)echo "模块:" ${MODULE}echo "端口:" ${PORT}./expect.sh $(pwd) ${MODULE} ${PORT} ${IMAGE_NAME}

二、jenkins创建项目

1、新建item——>选择流水线(PipeLine)。

  

 2、设置参数

 

 

 

 3、流水线脚本

node {	stage('checkout_order') {	 	deleteDir()        checkout([            $class: 'SubversionSCM',            additionalCredentials: [],            excludedCommitMessages: '',            excludedRegions: '',            excludedRevprop: '',            excludedUsers: '',            filterChangelog: false,            ignoreDirPropChanges: false,            includedRegions: '',            locations: [                [                    credentialsId: '1a2dc2fc-8eed-46a3-b22d-169a863376ec',                    depthOption: 'infinity',                    ignoreExternalsOption: true,                    local: '.',                    remote: 'http://192.168.206.213/svn/svnrepos/branch/@HEAD'               ]            ],             workspaceUpdater: [$class: 'UpdateUpdater']       ])    }    stage("mvn_order") {        echo "start compile mvn_common"        sh "mvn -DskipTests clean package"	}	stage("docker_build") {        echo "start build image"        sh 'chmod 777 ./docker_build.sh'        sh './docker_build.sh ${RUNENV} ${MODULE}'    }         stage("docker_deploy") {        echo "deploy on docker"        sh 'chmod 777 ./docker_deploy.sh'        sh 'chmod 777 ./expect.sh'        sh 'chmod 777 ./start.sh'        sh './start.sh ${PORT} ${MODULE}'     }}

credentialsId:凭据,如下图所示配置一个

 

 

 

 

 

 

 

remote 后面填自己的项目svn地址,其他不变。下面这是我的。

 脚本的整个过程:

# 1、svn拉取项目# 2、编译maven项目,生成jar包# 3、docker_build.sh结合DockerFile文件 生成镜像并push到镜像仓库# 4、运行start.sh 传入参数(端口号,项目名称等,这里可以把版本号作为参数也发来),调用expect.sh将212机子上的docker_deploy.sh发送到213机子上,并登录213机子,启动docker_deploy.sh, docker_deploy会停止当前容器,删除容器,删除镜像,从镜像仓库上拉取镜像重新生成容器并启动。

4、新建好之后,构建项目即可。

三、构建过程中的问题:

1、错误信息: unix /var/run/docker.sock: connect: permission denied

 解决方案:

# 这个方法只要docker服务重启, 就需要重新设置一次cd /var/run/chmod 777 docker.sock

2、错误信息:java.lang.UnsupportedOperationException: no known implementation of class hudson.scm.SCM is named SubversionSCM

 解决方案:

因为没有安装svn插件,去插件管理中安装svn

3、错误信息:hudson.remoting.ProxyException: org.tmatesoft.svn.core.SVNAuthenticationCancelledException: svn: E200015: Authentication cancelled

 解决方案:

jenkins中添加一个凭据 svn中的用户

 4、错误信息:[ERROR] Could not create local repository at /usr/local/maven-repository -> [Help 1]

解决方案:

没有找到maven中conf文件夹中的settting.conf配置的仓库地址,我的是/usr/local/maven-repository。

所以在Jenknis所在的机子上操作,创建仓库文件夹,并放开权限

cd /usr/local/mkdir maven-repositorychmod -R 777 /usr/local/maven-repository/

5、错误信息:[ERROR] [ERROR] Some problems were encountered while processing the POMs:

 修改jenkins的用户为root,默认是jenkins

vim /etc/sysconfig/jenkins

 重启jenkins

systemctl restart jenkins

另外,要将maven仓库的权限放开。

我的仓库地址是 /usr/local/maven-repository/

chmod -R 777 /usr/local/maven-repository/

 

posted @ 2022-06-30 15:26 云村的王子 阅读(11) 评论(0) 编辑 收藏 举报
回帖
    张三

    张三 (王者 段位)

    821 积分 (2)粉丝 (41)源码

     

    温馨提示

    亦奇源码

    最新会员