1、問題java
咱們平時開發項目,使用Maven或者Idea部署,儘量是要作到自動化。通常狀況下,作成自動化的方式有多種,下面簡述我比較經常使用的3種。git
2、解決方案一:web
(1)配置發部:使用IDEA自帶的Artifacts功能,先打開【File】菜單下的【Project Structure】菜單,點到【Artifacts】,按本身的項目類型添加一個類別,好比SpringBoot項目,能夠添加爲【JavaEE Application Exploded】項,起個名稱,而後在要發部的右側的【Available Element】列表列出的微服務或者主模塊上,右擊選擇【Put Into Output Root】,而後點擊【Apply】並點擊【OK】保存。spring
(2)執行發部:配置完後,執行IDEA主菜單頂部的【Build】-【Build Artifacts...】-【Rebuild All】,編譯完成後,將自動發部到項目根目錄下的out/artifacts/xxx目錄下。docker
(3)發部運行:發部運行的方式,有不少種,好比最簡單的方法之一是,使用IDEA自帶的【Tools】-【Deployment】-【Deployment】中配置遠程FTP服務器,或者配置SSH鏈接,用於一鍵發部文件到生產環境上指定目錄下。而後配置一個Dockerfile和一個start.sh角本,並經過"docker build -t myapp:v1 ."命令事先部署部署一個DockerSwarm或者Docker程序。把程序文件映射到遠程服務器的物理磁盤上。而後經過前面的IDEA的配置配置到FTP該目錄。這樣就能夠一鍵自動發部項目了。缺點是通常IDEA的配置不會提交到GIT裏,因此若是有同事須要發部,還得使用你的電腦,或者他本身電腦上也作相同的配置,來發部項目。apache
FROM openjdk:8-jre
MAINTAINER songxingzhu
WORKDIR /app
ADD ./ /app/
ENV JAVA_OPTS "-Xms400m -Xmx3g"
ENV spring.profiles.active test
ENV file.encoding UTF-8
EXPOSE 8081
RUN chmod 777 /app/start.sh
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
ENTRYPOINT ["/app/start.sh"]
2、解決方案二:api
(1)配置發部:在要發部的模塊的pom.xml中,添加下列代碼:服務器
<build> <finalName>service-webapi</finalName> <sourceDirectory>src/main/java</sourceDirectory> <plugins> <!-- 設置源文件編碼方式 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 打包jar文件時,配置manifest文件,加入lib包的jar依賴 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <manifest> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> <mainClass>com.test.webapi.WebApiApplication</mainClass> </manifest> </archive> <outputDirectory>${project.build.directory}/classes</outputDirectory> <excludes> <exclude>*.properties</exclude> <exclude>*.xml</exclude> <exclude>*.sh</exclude> </excludes> </configuration> </plugin> <!-- 拷貝依賴的jar包到lib目錄 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory>${project.build.directory}/classes/lib</outputDirectory> </configuration> </execution> </executions> </plugin> <!-- 解決資源文件的編碼問題 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>3.1.0</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> </plugins> </build>
(2)執行發部:在項目目錄下,執行 mvn package 便可,編譯完後,代碼會出如今相應的模塊的/target/classes目錄下(發部到此目錄的緣由是,這樣就不會影響IDEA的正常使用) 。若是要跳過測試,能夠在父模塊或者相應的模塊的pom.xml中,添加下列內容,便可實現:app
<!--編譯插件--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.8.0</version> <configuration> <source>1.8</source> <target>1.8</target> <encoding>UTF-8</encoding> <skip>true</skip> </configuration> </plugin> <!--跳過測試--> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-surefire-plugin</artifactId> <configuration> <skipTests>true</skipTests> </configuration> </plugin>
(3)發部運行:同上。maven
3、解決方案三:
方案三,使用Gitlab的CICD(須要Gitlab安裝gitlab-runner)或者使用Jenkins,結合Docker來作。由於平時作的最多客戶通常都不太願意提供服務器部署Kubernetes,因此我通常會用Docker Swarm來作,簡單方便又輕量級。使用CICD的DevOps模式比較推薦,團隊每一個人只要Merge一下代碼到指定分支,便可完成自動化編譯、測試、發部部署,由於也不復雜,我這裏時間緊張就不描述了。
4、解決方案四:
方案四,配置IDEA+Docker實現。在IDEA中默認安裝了Docker插件,所以能夠直接在Dockerfile執行運行,並配置一下Dockerfile的鏡像編譯命令和遠程Docker中開啓遠程訪問便可。