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/bash
RUNENV=$1
MODULE=$2
echo "环境: ${RUNENV}"
# docker 仓库地址
IMAGE_NAME="192.168.206.212:5000/${MODULE}:1.0.0.RC"
echo $IMAGE_NAME >> IMAGE_NAME
docker build --build-arg RUNENV=${RUNENV} -t ${IMAGE_NAME} .
docker push ${IMAGE_NAME}
(2)docker_deploy.sh
#!/bin/bash PORT=$1
IMAGE=$2
MODULE=$3
echo "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/oraclejdk
MAINTAINER hmw 1445496485@qq.com ARG RUNENV=${RUNENV}
ENV RUNENV=${RUNENV} ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone RUN mkdir -p /var/yjz/demo \
echo ${RUNENV} > /tmp.properties COPY target/demo.jar /var/yjz/demo/app.jar WORKDIR /var/yjz/demo ENTRYPOINT ["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/expect set 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.sh expect "*password:"
send "root\r" spawn ssh root@192.168.206.213
expect "*password:"
send "root\r" expect "]# "
send "sh /home/service/fesco/$module.sh $port $image $module\r" send "exit\r"
expect eof
exit
(5)start.sh
#!/bin/bash PORT=$1
MODULE=$2
IMAGE_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}'
}
}
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-repository
chmod -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/
Jenkins+Svn+Docker搭建持续集成环境 自动部署的更多相关文章
- 使用Docker构建持续集成与自动部署的Docker集群
为什么使用Docker " 从我个人使用的角度讲的话 部署来的更方便 只要构建过一次环境 推送到镜像仓库 迁移起来也是分分钟的事情 虚拟化让集群的管理和控制部署都更方便 hub.docke ...
- Jenkins+Maven+SVN快速搭建持续集成环境
http://www.cnblogs.com/sunzhenchao/archive/2013/01/30/2883289.htmlhttp://blog.csdn.net/pein_zero/art ...
- Jenkins+Maven+SVN快速搭建持续集成环境(转)
Jenkins是一个可扩展的持续集成引擎,Jenkins非常易于安装和配置,简单易用,下面看看我们是如何几分钟就快速搭建一个持续集成环境吧. 假设我们目前已经有2个maven项目:entities(J ...
- Jenkins+ANT+SVN快速搭建持续集成环境
伟大的语言都从helloworld开始,这里我们用Jenkins+ANT+SVN来搭建这一套持续集成环境. 环境准备: 一台已经配置好Jenkins和Ant的机器. 项目准备: 用Ecplise建立一 ...
- Jenkins + svn + maven 构建持续集成环境搭建
Jenkins简介 Jenkins是一个开源软件项目,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能. Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: ...
- Jenkins+Maven+Git搭建持续集成和自动化部署的配置手记
前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新 ...
- Jenkins学习总结(3)——Jenkins+Maven+Git搭建持续集成和自动化部署的
前言 持续集成这个概念已经成为软件开发的主流,可以更频繁的进行测试,尽早发现问题并提示.自动化部署就更不用说了,可以加快部署速度,并可以有效减少人为操作的失误.之前一直没有把这个做起来,最近的新项目正 ...
- selenium+jenkins+maven+testNG搭建持续集成环境
为了简明起见,分几大部分,很基础的细节就不详述了 一·安装jenkins 二·创建一个maven项目的job 2.1 填上SVN的Repository URL 2.2 由于是在本地执行maven ...
- 阿里云 持续集成环境自动部署cordova项目热更新脚本
linux脚本: #!/bin/sh rm -rf /home/tomcat/xiecang_hybird_web/xiecang_hybird_web.zip rm -rf /home/tomcat ...
随机推荐
- Java语言学习day07--7月6日
今日内容介绍1.流程控制语句switch2.数组 ###01switch语句解构 * A:switch语句解构 * a:switch只能针对某个表达式的值作出判断,从而决定程序执行哪一段代码. * ...
- 2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ π )
2021.12.06 P2508 [HAOI2008]圆上的整点(数论+ \(\pi\) ) https://www.luogu.com.cn/problem/P2508 题意: 求一个给定的圆 \( ...
- k8s入门之集群搭建(二)
一.准备三台节点 从上篇文章 k8s入门之基础环境准备(一)安装的Ubuntu虚拟机克隆出三台虚拟机,如图所示 启动这三台虚拟机节点,分别做如下配置 虚拟机名称 IP HostName k8sMast ...
- ArcGIS建筑物简化和建筑物群聚合算法实验
一.下载OSM数据 首先从OpenStreetMap官网下载我们需要的实验数据,这里我选择清华和北大校园作为本次实验数据 二.数据处理 将我们下载的实验数据导入ArcGIS.由于OSM数据是.osm格 ...
- nacos 详细介绍(一)
一.Nacos介绍 Nacos是SpringCloudAlibaba架构中最重要的组件. Nacos 是一个更易于帮助构建云原生应用的动态服务发现.配置和服务管理平台,提供注册中心.配置中心和动态 D ...
- delete-drop语句生成的存储过程
问题: 开发时有时候需要对很多表进行操作. 例如:清空(删除)所有(某些)表,删除所有表某时间点之后导入的数据(类似于回滚) 解决方式: 对选定的表集合执行相同的查询条件(可为空),如果这个执行结果大 ...
- Vue图片浏览组件v-viewer使用
简单介绍v-viewer的两种使用方法: Demo 安装依赖: npm install v-viewer --save 全局引入 import Viewer from 'v-viewer' impor ...
- 1.8 常见Linux发行版本有哪些?
新手往往会被 Linux 众多的发行版本搞得一头雾水,我们首先来解释一下这个问题. 从技术上来说,李纳斯•托瓦兹开发的 Linux 只是一个内核.内核指的是一个提供设备驱动.文件系统.进程管理.网络通 ...
- .NET ORM 仓储层必备的功能介绍之 FreeSql Repository 实现篇
写在开头 2018年11月的某一天,头脑发热开启了 FreeSql 开源项目之旅,时间一晃已经四年多,当初从舒服区走向一个巨大的坑,回头一看后背一凉.四年时间从无到有,经历了数不清的日夜奋战(有人问我 ...
- python网络自动化ncclient模块,netconf协议检索与下发交换机配置
以juniper和华为设备为例 交换机必要配置,配置简单,使用ssh模式传输 #juniperset system services netconf ssh#华为 local-user netconf ...