本章用於講解如何在walle下構建和運行JavaWeb。主要包含SpringBoot,ScalaAkkaWeb應用,以Java -jar和Docker運行兩種方式(Tomcat方式不講,你們自行研究)
項目中心 > 項目管理 > 新建項目
如下是一份配置好的項目表java
分組 | 項目 | 參考 | 備註 |
---|---|---|---|
基本配置 | 項目名稱 | 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生態下基本腳本大體一致,無細微差異node
任務配置 - 部署包含文件
包含方式python
docker-compose.yml target/${SERVER_NAME}.jar
該方式用於描述從源碼包到發佈包中,排除/包含的內容。通常java使用target便可linux
任務配置 - 自定義全局變量
# 運行目錄 JAVA_HOME=/data/walle-java RUN_ROOT=/data/walle-run SERVER_NAME=java-demo MVN_HOME=/usr/local/maven3 PORT=2223
任務配置 - 高級任務-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配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <build> <finalName>${artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.walle.main.DevelopToolApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> <configuration> <includeScope>system</includeScope> </configuration> </plugin> </plugins> </build> </project>
項目 - 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"
任務配置 - 高級任務-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配置
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <build> <finalName>${artifactId}</finalName> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> <configuration> <mainClass>com.walle.main.DevelopToolApplication</mainClass> </configuration> <executions> <execution> <goals> <goal>repackage</goal> </goals> </execution> </executions> </plugin> <plugin> <artifactId>maven-shade-plugin</artifactId> <version>2.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <shadedArtifactAttached>true</shadedArtifactAttached> <shadedClassifierName>allinone</shadedClassifierName> <artifactSet> <includes> <include>*:*</include> </includes> </artifactSet> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer"> <resource>reference.conf</resource> </transformer> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <manifestEntries> <Main-Class>com.main.Boot</Main-Class> </manifestEntries> </transformer> </transformers> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>META-INF/*.SF</exclude> <exclude>META-INF/*.DSA</exclude> <exclude>META-INF/*.RSA</exclude> </excludes> </filter> </filters> </configuration> </execution> </executions> </plugin> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> </execution> </executions> <configuration> <includeScope>system</includeScope> </configuration> </plugin> </plugins> </build> </project>
如爲SpringBoot混合編譯,則單獨加上scala編譯便可git
<plugin> <groupId>org.scala-tools</groupId> <artifactId>maven-scala-plugin</artifactId> <version>2.15.2</version> <executions> <execution> <goals> <goal>compile</goal> <goal>testCompile</goal> </goals> </execution> </executions> </plugin>
項目 - 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"
任務配置 - 高級任務-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 "服務啓動完成"
上線通知
須要的話開啓web
上線單是否開啓審覈
須要的話開啓,會在審覈後才能實際發佈構建單spring
上訴內容完成後,是沒法進行構建發版的。編譯發版都是基於walle的docker容器,python下完成的。該環境下無java和maven變量
咱們有兩個方式解決 宿主機映射 or 從新打包鏡像docker
此處只講解宿主機映射的方式(更推薦從新打包鏡像)apache
咱們在宿主機安裝完成maven,java,node等環境,而後修改walle的docker-compose便可npm
# 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目錄),保證能免密碼拉去代碼便可
鏈接服務器
配置服務器的 ssh在宿主機,保證能免密碼登陸各服務器便可
部署管理 - 新建上線單
選擇環境和分支便可,回到列表頁,點擊上線查看詳情,再次點擊詳情頁上線便可開始發佈