两台服务器:192.168.206.212,192.168.206.213
自己新建一个maven项目
其中两台机子做下面的软件配置
212机子:
安装expect并配置;
安装jenkins
安装docker
安装私有镜像仓库
安装JDK并配置;
安装maven并配置;
213机子:
安装SVN
安装JDK并配置;
安装maven并配置;
安装docker
其中项目的话可以参照截图,controller,model什么的这些自定义就行。
重点注意红框框的这几个
application-dev.properties 和 application-test.properties 主要就是数据库地址不一样,其他都一样。这里这两个文件不配置内容也可以。
pom文件主要就配置红框框位置的这个,我这里的名称demo就可以让每次打包都是 demo.jar 这个名称
主要的来了。这五个配置文件
(1)docker_build.sh
#!/bin/bash
RUNENV=$1
MODULE=$2
echo "环境: ${RUNENV}"
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 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}
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拉取项目
解决方案:
# 这个方法只要docker服务重启, 就需要重新设置一次
cd /var/run/
chmod 777 docker.sock
解决方案:
因为没有安装svn插件,去插件管理中安装svn
解决方案:
jenkins中添加一个凭据 svn中的用户
解决方案:
没有找到maven中conf文件夹中的settting.conf配置的仓库地址,我的是/usr/local/maven-repository。
所以在Jenknis所在的机子上操作,创建仓库文件夹,并放开权限
cd /usr/local/
mkdir maven-repository
chmod -R 777 /usr/local/maven-repository/
修改jenkins的用户为root,默认是jenkins
vim /etc/sysconfig/jenkins
重启jenkins
systemctl restart jenkins
另外,要将maven仓库的权限放开。
我的仓库地址是 /usr/local/maven-repository/
chmod -R 777 /usr/local/maven-repository/
手机扫一扫
移动阅读更方便
你可能感兴趣的文章