dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器
# dokcer自动化构建部署java web 基于jenkins+maven+nuxus容器
环境centos 7.4 docker 18.03.0-ce
nuxus,创建maven本地源(可选,编译java时下载jar依赖包)
maven,编译打包java web为war包
jenkins,自动化构建、发布等jenkins容器里不能执行docker命令,用ssh远程方式
jenkins容器 -> ssh -> maven编译java web -> 构建docker镜像,war包+tomcat
war包+tomcat重新构建镜像,即可运行java web
##############################
# Nexus仓库(基于Docker)
#下载镜像 docker pull sonatype/nexus3 #data目录设置 mkdir -p /docker/cicd/nexus-data chown -R 200 /docker/cicd/nexus-data #运行nuxus容器 docker rm -f nexus docker run -dit -p 8081:8081 --name nexus \ -v /etc/localtime:/etc/localtime:ro \ -v /docker/cicd/nexus-data:/nexus-data \ --restart=always sonatype/nexus3 #查看 docker ps -l docker logs nexus #浏览器打开,右上角->Sign in ,初始账户admin admin123 #配置阿里maven源加快下载 #新建maven2(proxy)源 #或直接更改maven-central,原地址 https://repo1.maven.org/maven2/ #阿里源地址 http://maven.aliyun.com/nexus/content/groups/public/
##############################
# maven容器编译java
#下载镜像 docker pull maven:alpine #配置maven使用私有仓库(使用上面搭建的nuxus) #ip地址为neuxs的10.2.1.18为内网地址 mkdir -p /docker/cicd/maven-data cd cd /docker/cicd cat > /docker/cicd/maven-settings.xml<<EOF <?xml version="1.0" encoding="UTF-8"?> <settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd"> <mirrors> <mirror> <id>elven-maven</id> <name>elven-maven</name> <url>http://10.2.1.18:8081/repository/maven-public/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors> <localRepository>/repository</localRepository> </settings> EOF
maven容器编译java测试
#下载源码(我写的hello world测试) mkdir -p /docker/cicd/git cd /docker/cicd/git git clone https://gitee.com/almi/helloworld.git #运行maven容器构建war包测试 docker run --rm \ -v /etc/localtime:/etc/localtime:ro \ -v /docker/cicd/maven-settings.xml:/usr/share/maven/conf/settings.xml \ -v /docker/cicd/maven-data:/repository \ -v /docker/cicd/git:/git \ maven:alpine \ mvn clean package -f /git/helloworld/pom.xml #查看 ls -l /docker/cicd/git/helloworld/target/ #如上maven容器构建war,是挂载本地源码目录到maven容器编译war包 #另一种方式,构建docker镜像时调用maven编译,然后创建容器拷贝出war包
##############################
# jenkins容器
#下载镜像 docker pull jenkins:alpine #data目录设置 mkdir -p /docker/cicd/jenkins-data cd /docker/cicd cat > /docker/cicd/jenkins-data/log.properties <<EOF handlers=java.util.logging.ConsoleHandler jenkins.level=FINEST java.util.logging.ConsoleHandler.level=FINEST EOF #目录权限为1000 chown -R 1000:1000 /docker/cicd/jenkins-data #启动jenkins容器 docker rm -f jenkins docker run --name jenkins -dit \ -e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \ -v /etc/localtime:/etc/localtime:ro \ -v /docker/cicd/jenkins-data:/var/jenkins_home \ --restart=always -p 8082:8080 jenkins:alpine #查看 docker ps -l docker logs jenkins #查看初始密码 cat /docker/cicd/jenkins-data/secrets/initialAdminPassword #浏览器登录,安装插件
# jenkins构建运行java web的docker容器
步骤:jenkins -> git拉源码 -> 构建war包 -> docker镜像 -> 运行
jenkins容器无法直接运行宿主机docker命令,可使用ssh远程方式
- 1、安装Publish Over SSH插件
系统管理 -> 插件管理 -> 可选插件,搜索Publish Over SSH 安装 - 2、配置ssh主机
系统管理 -> 系统设置 -> Publish Over SSH标签配置,添加SSH Servers主机
可使用秘钥或密码认证,Test Configuration是否配置成功
Path to key可以这样/root/.ssh/id_dsa
Hostname使用ip地址, Username 登录用户如 root
#创建构建
创建一个自由风格的软件项目 ->
源码管理 -> git -> https://gitee.com/almi/helloworld.git
增加构建后操作步骤——Send build artifacts over SSH
Exec command:在目标主机执行的shell命令
执行的shell如下
env Gitdir=${JOB_NAME} bash /docker/cicd/jenkins-data/workspace/${JOB_NAME}/build.sh
build.sh的shell内容如下:
#!/bin/bash Gitdir=${Gitdir:-helloworld} # echo 'docker run maven --------' docker run --rm \ -v /docker/cicd/maven-settings.xml:/usr/share/maven/conf/settings.xml \ -v /docker/cicd/maven-data:/repository \ -v /docker/cicd/jenkins-data/workspace/:/git/ \ maven:alpine \ mvn clean package -f /git/$Gitdir/pom.xml # echo 'docker build --------' cd /docker/cicd/jenkins-data/workspace/$Gitdir docker build -t helloworld . docker images helloworld # echo "docker run helloworld --------" docker rm -f helloworld sleep 1 [[ `netstat -lntp |grep 8090 |wc -l` -ge 1 ]] && { echo "Port 8090 is used";exit; } docker run -dit --name helloworld -p 8090:8080 helloworld [[ -n `docker ps |awk '/8090/{print $1}'` ]] && { echo "run helloworld successful"; } || { echo "run helloworld error"; } docker ps -l
#立即构建->打开构建,Console Output控制台,查看日志
#构建完成后,浏览器打开ip:8090看到Hello World ! 页面即构建成功
jenkins还有更多实用功能如web钩子、定时任务、邮件通知等……
本文来自博客园,作者:blog-elvin-vip,转载请注明原文链接:https://www.cnblogs.com/elvi/p/8884340.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)