资讯专栏INFORMATION COLUMN

DevOps 基于Walle的小型持续集成实战(五)基于Walle发布Java应用

qc1iu / 1720人阅读

摘要:本章用于讲解如何在下构建和运行。编译发版都是基于的容器,下完成的。

本章用于讲解如何在walle下构建和运行JavaWeb。主要包含SpringBoot,ScalaAkkaWeb应用,以Java -jar和Docker运行两种方式(Tomcat方式不讲,大家自行研究)
新建项目
项目中心 > 项目管理 > 新建项目

以下是一份配置好的项目表

分组 项目 参考 备注
基本配置 项目名称 dev-我的JavaDemo项目 随便填写,名称不要太长(不好看),最好把环境卸载最前,例如dev(开发环境)
基本配置 环境 开发环境 提前在环境管理配置好即可
基本配置 Git Repo git@gitlab.xxx.com:xxx/java-demo.git Git仓库地址
目标集群 目标集群 192.168.0.122 提前配置服务器管理
目标集群 目标集群部署路径 /data/walle-build/java-demo 实际运行的环境
目标集群 目标集群部署仓库 /data/walle-run 会存放多个版本编译后的项目
目标集群 目标集群部署仓库版本保留数 5 可以回滚的版本数
配置脚本

Java生态下基本脚本大致一致,无细微差别

基本脚本
任务配置 - 部署包含文件

包含方式

docker-compose.yml
target/${SERVER_NAME}.jar

该方式用于描述从源码包到发布包中,排除/包含的内容。一般java使用target即可

任务配置 - 自定义全局变量
# 运行目录
JAVA_HOME=/data/walle-java
RUN_ROOT=/data/walle-run
SERVER_NAME=java-demo
MVN_HOME=/usr/local/maven3
PORT=2223
【SpringBoot to Docker】
任务配置 - 高级任务-Deploy前置任务
pwd
/usr/local/maven3//bin/mvn -v
任务配置 - 高级任务-Deploy后置任务
${MVN_HOME}/bin/mvn clean compile package -Dmaven.test.skip=true -DartifactId=${SERVER_NAME}
# cp target/${SERVER_NAME}.jar .
sed -i "s/${container_port}/"${PORT}"/g" docker-compose.yml 
sed -i "s/${container_name}/"${SERVER_NAME}"/g" docker-compose.yml 
任务配置 - 高级任务-Release前置任务
docker-compose -p ${SERVER_NAME}  -f ${WEBROOT}/docker-compose.yml down || echo "服务不存在"
docker stop ${SERVER_NAME} || echo "服务不存在"
docker rm ${SERVER_NAME} || echo "服务不存在"
rm -rf ${WEBROOT}
任务配置 - 高级任务-Release后置任务
docker-compose -p ${SERVER_NAME}  up -d
echo "服务启动完成"
项目 - Maven pom.xml配置



         
    
        ${artifactId}
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    com.walle.main.DevelopToolApplication
                
                
                    
                        
                            repackage
                        
                    
                
            
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        package
                        
                            copy-dependencies
                        
                    
                
                
                    system
                
            
        
    

此处配置了finalName=${artifactId},用于可自定义生成的包名称

此处使用了org.springframework.boot进行打包,mainClass设置执行的main方法

项目 - docker-compose.yml配置
version: "2"
services:
  web:
    # 镜像:版本
    image: openjdk:8-jdk
    container_name: ${container_name}
    ports:
      - "${container_port}:${container_port}"
    volumes:
         - ./target/${container_name}.jar:/usr/local/${container_name}.jar
         - /etc/localtime:/etc/localtime
    command: /bin/bash -c "echo "Asia/Shanghai" > /etc/timezone && java -Dserver.port=${container_port} -jar /usr/local/${container_name}.jar"

映射宿主机./target下的文件${container_name}.jar,到/usr/local/${container_name}.jar

映射宿主机的时区到容器

启动命令设置时区到上海,随后调用启动参数java -jar,此处可以设置更多的启动参数

此处的参数传递方式较差(linux变量替换),可以寻求更好的参数传递方式

【ScalaAkka to Docker】
任务配置 - 高级任务-Deploy前置任务
pwd
/usr/local/maven3//bin/mvn -v
任务配置 - 高级任务-Deploy后置任务
${MVN_HOME}/bin/mvn clean scala:compile compile package -Dmaven.test.skip=true -DartifactId=${SERVER_NAME}
# cp target/${SERVER_NAME}.jar .
sed -i "s/${container_host}/"${HOST}"/g" docker-compose.yml 
sed -i "s/${container_port}/"${PORT}"/g" docker-compose.yml 
sed -i "s/${container_name}/"${SERVER_NAME}"/g" docker-compose.yml 
任务配置 - 高级任务-Release前置任务
docker-compose -p ${SERVER_NAME}  -f ${WEBROOT}/docker-compose.yml down || echo "服务不存在"
docker stop ${SERVER_NAME} || echo "服务不存在"
docker rm ${SERVER_NAME} || echo "服务不存在"
rm -rf ${WEBROOT}
任务配置 - 高级任务-Release后置任务
docker-compose -p ${SERVER_NAME}  up -d
echo "服务启动完成"
项目 - Maven pom.xml配置



         
    
        ${artifactId}
        
            
                org.springframework.boot
                spring-boot-maven-plugin
                
                    com.walle.main.DevelopToolApplication
                
                
                    
                        
                            repackage
                        
                    
                
            
            
                maven-shade-plugin
                2.3
                
                    
                        package
                        
                            shade
                        
                        
                            true
                            allinone
                            
                                
                                    *:*
                                
                            
                            
                                
                                    reference.conf
                                
                                
                                    
                                        com.main.Boot
                                    
                                
                            
                            
                                
                                    *:*
                                    
                                        META-INF/*.SF
                                        META-INF/*.DSA
                                        META-INF/*.RSA
                                    
                                
                            
                        
                    
                
            
            
                org.apache.maven.plugins
                maven-dependency-plugin
                
                    
                        package
                        
                            copy-dependencies
                        
                    
                
                
                    system
                
            
        
    

如为SpringBoot混合编译,则多带带加上scala编译即可


                org.scala-tools
                maven-scala-plugin
                2.15.2
                
                    
                        
                            compile
                            testCompile
                        
                    
                
            

此处配置了finalName=${artifactId},用于可自定义生成的包名称

此处使用了org.springframework.boot进行打包,mainClass设置执行的main方法

项目 - docker-compose.yml配置
version: "2"
services:
  web:
    # 镜像:版本
    image: openjdk:8-jdk
    container_name: ${container_name}
    ports:
      - "${container_port}:${container_port}"
    volumes:
         - ./target/${container_name}.jar:/usr/local/${container_name}.jar
         - /etc/localtime:/etc/localtime
    command: /bin/bash -c "echo "Asia/Shanghai" > /etc/timezone && java -Dserver.port=${container_port} -jar /usr/local/${container_name}.jar"

映射宿主机./target下的文件${container_name}.jar,到/usr/local/${container_name}.jar

映射宿主机的时区到容器

启动命令设置时区到上海,随后调用启动参数java -jar,此处可以设置更多的启动参数

此处的参数传递方式较差(linux变量替换),可以寻求更好的参数传递方式

【SpringBoot to Jar】
任务配置 - 高级任务-Deploy前置任务
pwd
/usr/local/maven3//bin/mvn -v
任务配置 - 高级任务-Deploy后置任务
${MVN_HOME}/bin/mvn clean scala:compile compile package -Dmaven.test.skip=true -DartifactId=${SERVER_NAME}
# cp target/${SERVER_NAME}.jar .
任务配置 - 高级任务-Release前置任务
curl -X POST 127.0.0.1:${PORT}/shutdown || echo "服务不存在"
rm -rf ${WEBROOT}
任务配置 - 高级任务-Release后置任务
java -Dserver.port=${PORT} -jar
echo "服务启动完成"
其他
上线通知

需要的话开启

上线单是否开启审核

需要的话开启,会在审核后才能实际发布构建单

环境准备 研发环境
上诉内容完成后,是无法进行构建发版的。编译发版都是基于walle的docker容器,python下完成的。该环境下无java和maven变量

我们有两个方式解决 宿主机映射 or 重新打包镜像

此处只讲解宿主机映射的方式(更推荐重新打包镜像)

我们在宿主机安装完成maven,java,node等环境,然后修改walle的docker-compose即可

# docker version:  18.06.0+
# docker-compose version: 1.23.2+
# OpenSSL version: OpenSSL 1.1.0h
version: "3.7"
services:
  python:
    image: alenx/walle-python:2.1
    container_name: walle-python
    hostname: walle-python
    env_file:
      # walle.env需和docker-compose在同级目录
      - ./walle.env
    command: bash -c "ln -sf /data/walle-tool/node-v10.5.0-linux-x64/bin/node /usr/bin/node && ln -sf /data/walle-tool/node-v10.5.0-linux-x64/bin/npm /usr/bin/npm &&  cd /opt/walle_home/ && /bin/bash admin.sh migration &&  python waller.py "
    expose:
      - "5000"
    volumes:
      - /opt/walle_home/plugins/:/opt/walle_home/plugins/
      - /opt/walle_home/codebase/:/opt/walle_home/codebase/
      - /opt/walle_home/logs/:/opt/walle_home/logs/
      - /data/walle-build/:/walle/walle-build/
      - /data/walle-java/:/walle/walle-java/
      - /usr/local/maven3/:/usr/local/maven3/
      - /data/walle-run/:/data/walle-run/
      - /usr/bin/netstat:/usr/bin/netstat/
      - /root/.ssh:/root/.ssh/
      - /data/walle-tool/node-v10.5.0-linux-x64/:/data/walle-tool/node-v10.5.0-linux-x64/

进入从宿主机进入python,查看mvn,java,linux是否可用

服务连接
连接git

配置git ssh在宿主机(docker-compose-python,映射了ssh目录),保证能免密码拉去代码即可

否则在部署时候,获取不到git版本,无法拉去代码

连接服务器

配置服务器的 ssh在宿主机,保证能免密码登录各服务器即可

否则在部署时候,无法连接需要部署的服务器

部署发布
部署管理 - 新建上线单

选择环境和分支即可,回到列表页,点击上线查看详情,再次点击详情页上线即可开始发布

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77791.html

相关文章

  • DevOps 基于Walle小型持续集成实战(七)总结

    摘要:当前版本针对于安装版概要整体流程贯通,基本可以达到实用级别。仍旧有很多需要提高的地方发布构建时部署上线服务器卡顿严重,基本不可以多项目发布。 该文章旨在描述从零开始搭建环境,中间遇到的问题以及最终的经验总结。当前版本针对于2.0 docker安装版 概要 整体流程贯通,基本可以达到实用级别。满足2-5台服务器,少量的应用部署是完全可以的,但达到一定规模之后则Walle和Jenkins...

    iliyaku 评论0 收藏0
  • DevOps 基于Walle小型持续集成实战(一)概述

    摘要:该文章用于概述一个小型持续集成环境的搭建的方案什么是持续集成持续集成作为当今软件开发实践,可以简单理解为团队开发相对频繁的集成他们的工作,一般让每个成员每天至少集成一次,而这回造成每天会有多次的版本发布。 该文章用于概述一个小型持续集成环境的搭建的方案 什么是持续集成? 持续集成作为当今软件开发实践,可以简单理解为团队开发相对频繁的集成他们的工作,一般让每个成员每天至少集成一次,而这回...

    Yangyang 评论0 收藏0
  • DevOps 基于Walle小型持续集成实战(二)设计

    摘要:以便对整个持续集成印象加深。配置完各环境发布脚本后,则可以使用构建发起进行触发环境准备。并会在远程环境上存放多次发布的版本,用于回退和切换服务停用。进行等操作,停止原本运行的服务切换启用。 该文章用于建立一个小型的基于Walle的持续集成工具。解决java,react,angular项目的编译发布。以便对整个持续集成印象加深。官方网站:https://walle-web.io/ 适用...

    zr_hebo 评论0 收藏0
  • DevOps 基于Walle小型持续集成实战(六)基于Walle发布前端React,Angular

    摘要:本章用于讲解如何在下构建和运行前端应用。项目配置服务名称镜像版本映射容器端口到本地端口数据卷映射本地文件到容器映射文件到容器的目录并覆盖文件映射文件夹到容器的文件夹覆盖容器启动后默认执行的命令。环境准备参考文档 本章用于讲解如何在walle下构建和运行前端应用。主要包含React,Angular应用,以Nginx+Docker运行(Vue方式不讲,大家自行研究) 新建项目 项目中心 >...

    tuomao 评论0 收藏0
  • DevOps 基于Walle小型持续集成实战(三)Docker与Gitlab

    摘要:自动化测试和持续集成发布。在服务型环境中部署和调整数据库或其他的后台应用。容器与镜像的关系类似于面向对象编程中的对象与类。容器容器是独立运行的一个或一组应用。提供了庞大的镜像集合供使用。 还在按照mysql安装教程一步一步配置服务配置账户吗?还在为每开一个新环境重新配置这些服务感到苦恼吗?使用Docker,服务快速构建部署。解决你的研发时间,早点下班~现代技术,还不会docker你就落...

    since1986 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<