Skip to content

Latest commit

 

History

History
128 lines (99 loc) · 5.59 KB

123.md

File metadata and controls

128 lines (99 loc) · 5.59 KB

docker + jenkins + git + maven自动化构建与部署

准备工作

安装好最新docker docker 分别pull 以下镜像 jenkins:2.0-beta-1 tomcat mysql(mysql只用来做测试项目的数据库,有其它数据库服务器的可以不下载) 下载maven 解压mkdir -p /dockerworkspace/maven && tar zxf apache-maven-3.3.9-bin.tar.gz -C /dockerworkspace/maven 下载jdk tar zxf jdk*.tar.gz -C /dockerworkspace/java/ && mv /dockerworkspace/java/jdk* /dockerworkspace/java/jdk 本教程所有工具和数据目录存放于/dockerworkspace目录下 安装jenkins

docker run -d --name jenkins
-p 8080:8080 -p 50000:50000 -v /dockerworkspace/jenkins:/var/jenkins_home -v /dockerworkspace/maven/apache-maven-3.3.9:/usr/local/maven -v /dockerworkspace/java/jdk:/usr/local/jdk jenkins:2.0-beta-1 访问jenkins:8080(jenkins改成服务器地址) ,然后输入以下查看到的密码Unlock Jenkins

cat /dockerworkspace/jenkins/secrets/initialAdminPassword

Customize Jenkins步骤时选择左边的Install suggested plugins

等待插件安装完成, 然后填写管理员信息

配置Jenkins

登陆jenkins, 进入系统管理-插件管理-可选插件 搜索ssh plugin 然后安装, 安装界面选择安装好后重启jenkins

进入系统管理-系统管理-可选插件 - SSH remote hosts 填写部署tomcat项目的host信息

设置邮件发送服务器

进入系统管理-系统管理-Jenkins Location 中 系统管理员邮件地址 邮件通知 中QQ企业邮箱设置如下(发件人的邮箱地址要和上面系统管理员邮件地址一致不然会报错) JDK配置

进入系统管理-Global Tool Configuration - jdk 点新增JDK,别名:jdk JAVA_HOME填写/usr/local/jdk(我截图里用的是ibm家的jdk) Maven配置

进入系统管理-Global Tool Configuration - Maven 点新增Maven,别名:maven MAVEN_HOME填写/usr/local/maven 新建测试项目

本教程中git管理端用的是gogs

创建jenkins中的maven 项目

在jenkins首页点击新建选择构建一个maven项目 填写项目名称test_tomcat

(如果没有这项请安装插件Maven Integration plugin) 源码管理中选择git, 填写项目的git信息(Credentials点新增可以添加git的认证信息,支持帐户名密码,ssh key 等方式. 源码浏览器在构建项目时的修改记录可以直接连接到git平台)

构建触发器

身份验证令牌 可以随意填写一个任意长度的字符串, 也可以填写uuid之类的, 并记录下来, 以后会用到 Post Steps (部署部份配合主机上的一人脚本使用,脚本内容往下看)

选择Run only if build succeeds只在构建成功时运行 Add post-build step 选择Execute shell script on remote host using ssh 然后选择服务器和执行脚本信息 在gogs上创建git hook (这一步在gitlab或github应该也有相应的方法) 进入上面构建的git项目首页-仓库设置-管理git钩子-post-update 填写以下脚本 (请把环境变量改为自己相应的服务器信息) #!/bin/sh

请修改以下环境变量

SERVER=http://127.0.0.1:8080 #jenkins服务器地址
TOKEN=jenkins1270018080hosttesttomcat #jenkins项目的 身份验证令牌
JENKINS_USER=admin #jenkins用户
JENKINS_PWD=admin # jenkins用户密码
JENKINS_PROJECT=test_tomcat # jenkins项目名

echo "Startting Build War File On Jenkins's Server"
echo "Setting Token On The Jenkins's Server......"
CRUMB=$(curl -s --user $JENKINS_USER:$JENKINS_PWD \
$SERVER/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)) echo "Trigger Jenkins's Server Start Building......"
curl -s --user $JENKINS_USER:$JENKINS_PWD -H "$CRUMB" $SERVER/job/$JENKINS_PROJECT/build?token=$TOKEN
echo "Jenkins's Server Build Success!"
tomcat 服务器配置

docker run -d
--name test_tomcat -p 8888:8080 -v /dockerworkspace/tomcat/webapps:/usr/local/tomcat/webapps -v /dockerworkspace/java/jdk:/usr/local/jdk -e "JAVA_HOME=/usr/local/jdk" tomcat 测试用mysql服务器

docker run -p 3306:3306 --name mysql -e MYSQL_ROOT_PASSWORD=admin -d mysql 创建一个脚本文件vim /dockerworkspace/tomcat/deploy.sh 内容如下

#!/bin/sh SERVER=http://127.0.0.1:8080 #jenkins服务器地址
TOKEN=jenkins1270018080hosttesttomcat #jenkins项目的 身份验证令牌
JENKINS_USER=admin #jenkins用户
JENKINS_PWD=admin # jenkins用户密码
JENKINS_PROJECT=test_tomcat # jenkins项目名
MAVEN_GROUPID=net.lxy520.test_tomcat #maven项目pom.xml的groupId
MAVEN_NAME=ROOT #maven项目pom.xml的groupId
MAVEN_VERSION=1.2.6 #maven项目pom.xml的groupId
CONTAINER=test_tomcat #tomcat docker 的容器id或名称

echo "设置Jenkins服务器为$SERVER"
echo "向服务器请求token"
CRUMB=$(curl -s --user $JENKINS_USER:$JENKINS_PWD \
$SERVER/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,%22:%22,//crumb)) echo "下载war文件......"
curl -s --user $JENKINS_USER:$JENKINS_PWD -H "$CRUMB" "$SERVER/job/$JENKINS_PROJECT/lastStableBuild/${MAVEN_GROUPID}$${MAVEN_NAME}/artifact/$MAVEN_GROUPID/$MAVEN_NAME/$MAVEN_VERSION/${MAVEN_NAME}-${MAVEN_VERSION}.war" -o ${MAVEN_NAME}-${MAVEN_VERSION}.war
echo "下载完成!"
CURRENT=pwd
echo "临时存放路径:$CURRENT/${MAVEN_NAME}-${MAVEN_VERSION}.war"
echo "暂停Tomcat服务..."
docker stop $CONTAINER
echo "覆盖项目..."
rm -rf /dockerworkspace/tomcat/webapps/ROOT.war /dockerworkspace/tomcat/webapps/ROOT
mv ${MAVEN_NAME}-${MAVEN_VERSION}.war /dockerworkspace/tomcat/webapps/ROOT.war
echo "重启Tomcat服务..."
docker start $CONTAINER
echo "Tomcat启动成功."
测试

在本地项目中git push, 查看jenkins会不会自动构建,然后检查docker中的容器是否正确部署