目录
介绍
DevOps是“开发”和“运维”的缩写。
DevOps是一组最佳实践强调(IT研发、运维、测试)在应用和服务生命周期中的协作和沟通,强调整个组织的合作以及交付和基础设施变更的自动化,从而实现持续集成、持续部署和持续交付
DevOps平台四大模块
- 项目管理 (创建项目--->>项目需求)
- 运维平台 (监控--日志收集---等)
- 持续交付 (提交完代码--->自动打包--->构建)
- 代码托管 (gitlab---->代码提交) ————————————————————>>DevOps平台
针对DevOps开源项目
- 项目管理---(JIRA非开源但是用的人比较多)、(Redmine使用ruby写的)
- 代码托管---(SVN--usvn有web管理界面)、(GitLab)
- 持续交付---(主流Jenkins)、(GitLab gitlab-ci也可以做交付)
- 运维平台---(国内的开源运维平台可能就是腾讯蓝鲸)
Jenkins 介绍
Jenkins只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有。Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Hudson后来被收购,成为商业版。后来创始人又写了一个jenkins,jenkins在功能上远远超过hudson
Maven 介绍
maven的用途
maven是一个项目构建和管理的工具,提供了帮助
maven的好处在于可以将项目过程规范化、自动化、高效化以及强大的可扩展性 利用maven自身及其插件还可以获得代码检查报告、单元测试覆盖率、实现持续集成等等。管理 构建、文档、报告、依赖、scms、发布、分发
的方法。可以方便的编译代码、进行依赖管理、管理二进制库等等。
maven的核心概念介绍
Pom pom是指project object Model。pom是一个xml,在maven2里为pom.xml。是maven工作的基础,在执行task或者goal时,maven会去项目根目录下读取pom.xml获得需要的配置信息pom文件中包含了项目的信息和maven build项目所需的配置Artifact 这个有点不好解释,大致说就是一个项目将要产生的文件,可以是jar文件,源文件,二进制文件,war文件,甚至是pom文件。每个artifact都由groupId:artifactId:version组成的标识符唯一识别。需要被使用(依赖)的artifact都要放在仓库(见Repository)中Repositories Repositories是用来存储Artifact的。如果说我们的项目产生的Artifact是一个个小工具,那么Repositories就是一个仓库,里面有我们自己创建的工具,也可以储存别人造的工具,我们在项目中需要使用某种工具时,在pom中声明dependency,编译代码时就会根据dependency去下载工具(Artifact),供自己使用。Build Lifecycle 是指一个项目build的过程。maven的Build Lifecycle分为三种,分别为default(处理项目的部署)、clean(处理项目的清理)、site(处理项目的文档生成)。他们都包含不同的lifecycle。 Build Lifecycle是由phases构成的....
参考:
SVN介绍
SVN是近年来崛起的非常优秀的版本管理工具,与CVS管理工具一样,SVN是一个固态的跨平台的开源的版本控制系统。SVN版本管理工具管理者随时间改变的各种数据。这些数据放置在一个中央资料档案库repository中,这个档案库很像一个普通的文件服务器或者FTP服务器,但是,与其他服务器不同的是,SVN会备份并记录每个文件每一次的修改更新变动。这样我们就可以把任意一个时间点的档案恢复到想要的某一个旧的版本,当然也可以直接浏览指定的更新历史记录。
Nexus介绍
maven的仓库只有两大类:
- 本地仓库
- 远程仓库
在远程仓库中又分成了3种:
- 中央仓库
- 私服
- 其它公共库。
私服是一种特殊的远程仓库,它是架设在局域网内的仓库服务,私服代理广域网上的远程仓库,供局域网内的Maven用户使用。当Maven需要下载构件的时候,它从私服请求,如果私服上不存在该构件,则从外部的远程仓库下载,缓存在私服上之后,再为Maven的下载请求提供服务。我们还可以把一些无法从外部仓库下载到的构件上传到私服上。
Maven私服的 个特性:
- 节省自己的外网带宽:减少重复请求造成的外网带宽消耗
- 加速Maven构件:如果项目配置了很多外部远程仓库的时候,构建速度就会大大降低
- 部署第三方构件:有些构件无法从外部仓库获得的时候,我们可以把这些构件部署到内部仓库(私服)中,供内部maven项目使用
- 提高稳定性,增强控制:Internet不稳定的时候,maven构建也会变的不稳定,一些私服软件还提供了其他的功能
- 降低中央仓库的负荷:maven中央仓库被请求的数量是巨大的,配置私服也可以大大降低中央仓库的压力
因此我们在实际的项目中通常使用私服来间接访问中央仓库,项目通常不直接访问中央仓库
流程图
环境搭建
环境准备
系统版本 | 内核版本 | IP地址 |
---|---|---|
Centos 7.5 | 4.18.9-1.el7.elrepo.x86_64 | 172.20.0.50 |
备注 该系统采用MINI
最小化安装,安装之后对系统进行了最基础的优化操作,
JDK版本 | Tomcat版本 | Jenkins 版本 | maven 版本 | nexus 版本 |
---|---|---|---|---|
8u191 | 8.5.35 | 1.8.0_144 | 3.6.0 | 3.14.0 |
下载地址:
组件 | 官网下载地址 | 百度云盘下载地址 |
---|---|---|
CentOS 7.5 | 无 | |
JDK | 提取码:d06b | |
Tomcat | 提取码:m86p | |
Jenkins RPM包 | 提取码:bk0t | |
Jenkins WAR包 | 提取码:59f5 | |
Maven | 提取码:y49l | |
Nexus | 提取码:iyw5 |
以上的官网地址在当前都是有效的,如果失效,可以在百度云盘中下载,也是从官网下载的,如不放心,可自行在别出现在。
配置JDK环境
[root@jenkins opt]# pwd/opt[root@jenkins opt]# ls -ld jdk-8u191-linux-i586.tar.gz -rw-r--r-- 1 root root 194712017 Dec 4 15:06 jdk-8u191-linux-i586.tar.gz[root@jenkins opt]# tar xf jdk-8u191-linux-i586.tar.gz [root@jenkins opt]# ls jdk1.8.0_191/bin COPYRIGHT include javafx-src.zip jre lib LICENSE man README.html release src.zip THIRDPARTYLICENSEREADME-JAVAFX.txt THIRDPARTYLICENSEREADME.txt
配置环境变量:
[root@jenkins opt]# tail -3 /etc/profileexport JAVA_HOME=/opt/jdk1.8.0_191export JRE_HOME=$JAVA_HOME/jreexport PATH=$PATH:$JAVA_HOME/bin[root@jenkins opt]# source /etc/profile[root@jenkins opt]# java -versionjava version "1.8.0_191"Java(TM) SE Runtime Environment (build 1.8.0_191-b12)Java HotSpot(TM) Server VM (build 25.191-b12, mixed mode)
安装私服 Nexus
首先下载好nexus安装包,然后安装
[root@jenkins opt]# ls -ld nexus-3.14.0-04-unix.tar.gz -rw-r--r-- 1 root root 125423547 Dec 3 14:34 nexus-3.14.0-04-unix.tar.gz[root@jenkins opt]# tar xf nexus-3.14.0-04-unix.tar.gz[root@jenkins opt]# ls -ld nexus-3.14.0-04 sonatype-work/drwxr-xr-x 9 root root 4096 Dec 4 16:58 nexus-3.14.0-04drwxr-xr-x 3 root root 4096 Dec 4 16:58 sonatype-work/[root@jenkins opt]# mv nexus-3.14.0-04 nexus3
这样就安装完成了
启动私服 Nexus
[root@jenkins opt]# cd nexus3/[root@jenkins nexus3]# lsbin deploy etc lib NOTICE.txt OSS-LICENSE.txt PRO-LICENSE.txt public system[root@jenkins nexus3]# ./bin/nexus startWARNING: ************************************************************WARNING: Detected execution as "root" user. This is NOT recommended!WARNING: ************************************************************Starting nexus[root@jenkins nexus3]# netstat -lntup | grep 8081tcp 0 0 0.0.0.0:8081 0.0.0.0:* LISTEN 3097/java
Nexus 默认web端口是8081
,这样通过ip+端口就可以访问了,默认用户:admin,密码:admin123
这样就完成了Nexus部署
安装 Maven
下载好对应的Maven安装包
[root@jenkins opt]# ls apache-maven-3.6.0-bin.tar.gz -ld-rw-r--r-- 1 root root 9063587 Oct 25 03:20 apache-maven-3.6.0-bin.tar.gz[root@jenkins opt]# tar xf apache-maven-3.6.0-bin.tar.gz [root@jenkins opt]# mv apache-maven-3.6.0 maven3[root@jenkins opt]# ls maven3/bin boot conf lib LICENSE NOTICE README.txt
配置环境变量
[root@jenkins opt]# tail -3 /etc/profile# maven exportexport M2_HOME=/opt/maven3export PATH=${M2_HOME}/bin:$PATH[root@jenkins opt]# source /etc/profile[root@jenkins opt]# mvn -vApache Maven 3.6.0 (97c98ec64a1fdfee7767ce5ffb20918da4f719f3; 2018-10-24T14:41:47-04:00)Maven home: /opt/maven3Java version: 1.8.0_191, vendor: Oracle Corporation, runtime: /opt/jdk1.8.0_191/jreDefault locale: en_US, platform encoding: UTF-8OS name: "linux", version: "4.18.9-1.el7.elrepo.x86_64", arch: "i386", family: "unix"
配置 Maven 连接 私服 Nexus
这里需要修改/opt/maven3/conf/settings.xml
配置文件,把settings.xml文件中的mirrors修改为Nexus私服地址
[root@jenkins opt]# cd maven3/conf/[root@jenkins conf]# lslogging settings.xml toolchains.xml[root@jenkins conf]# head -160 settings.xml | tail -15nexus internal nexus repository http://172.20.0.50:8081/nexus/content/groups/public *
主要是修改url标签中的地址路径即可,这样在jenkins自动构建时项目中的jar包等,会自动从改地址中下载
完成。
安装 Jenkins
Jenkins 有两种安装方式
- 一种为rpm包安装,也可以使用yum安装,效果相同
- 一种是WAR包方式安装,需要使用tomcat
rpm 包安装方式
下载好列表中的rpm包安装方是的jenkins包后
[root@jenkins opt]# ls -ld jenkins-2.138.3-1.1.noarch.rpm -rw-r--r-- 1 root root 75541986 Nov 9 09:26 jenkins-2.138.3-1.1.noarch.rpm[root@jenkins opt]# rpm -ivh jenkins-2.138.3-1.1.noarch.rpm warning: jenkins-2.138.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEYPreparing... ################################# [100%]Updating / installing... 1:jenkins-2.138.3-1.1 ################################# [100%][root@jenkins opt]# rpm -ql jenkins/etc/init.d/jenkins/etc/logrotate.d/jenkins/etc/sysconfig/jenkins/usr/lib/jenkins/usr/lib/jenkins/jenkins.war/usr/sbin/rcjenkins/var/cache/jenkins/var/lib/jenkins/var/log/jenkins
主配置文件是 /etc/sysconfig/jenkins
,可以修改其中的一些参数,如JENKINS_PORT端口,JENKINS_LISTEN_ADDRESS监听地址等
安装好后不能直接启动,启动会有如下效果:
[root@jenkins opt]# systemctl start jenkinsJob for jenkins.service failed because the control process exited with error code. See "systemctl status jenkins.service" and "journalctl -xe" for details.[root@jenkins opt]# systemctl status jenkins● jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled) Active: failed (Result: exit-code) since Tue 2018-12-04 16:03:24 CST; 4s ago Docs: man:systemd-sysv-generator(8) Process: 1551 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=1/FAILURE)Dec 04 16:03:24 jenkins systemd[1]: Starting LSB: Jenkins Automation Server...Dec 04 16:03:24 jenkins runuser[1556]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)Dec 04 16:03:24 jenkins jenkins[1551]: Starting Jenkins bash: /usr/bin/java: No such file or directoryDec 04 16:03:24 jenkins runuser[1556]: pam_unix(runuser:session): session closed for user jenkinsDec 04 16:03:24 jenkins jenkins[1551]: [FAILED]Dec 04 16:03:24 jenkins systemd[1]: jenkins.service: control process exited, code=exited status=1Dec 04 16:03:24 jenkins systemd[1]: Failed to start LSB: Jenkins Automation Server.Dec 04 16:03:24 jenkins systemd[1]: Unit jenkins.service entered failed state.Dec 04 16:03:24 jenkins systemd[1]: jenkins.service failed.
上面报错的提示意思是没有找到JDK环境,需要在启动脚本中增加JDK环境变量即可,操作如下:
[root@jenkins opt]# head -74 /etc/rc.d/init.d/jenkins | tail -9candidates="/etc/alternatives/java/usr/lib/jvm/java-1.8.0/bin/java/usr/lib/jvm/jre-1.8.0/bin/java/usr/lib/jvm/java-1.7.0/bin/java/usr/lib/jvm/jre-1.7.0/bin/java/usr/bin/java/opt/jdk1.8.0_191/bin/java"[root@jenkins opt]# systemctl daemon-reload
在candidates
变量中最后一行,要在双引号内的最后一行,加入JDK环境变量,我的是/opt/jdk1.8.0_191/bin/java
,最后重新加载一下即可;
这样再次启动:
[root@jenkins opt]# systemctl start jenkins[root@jenkins opt]# systemctl status jenkins● jenkins.service - LSB: Jenkins Automation Server Loaded: loaded (/etc/rc.d/init.d/jenkins; bad; vendor preset: disabled) Active: active (running) since Tue 2018-12-04 16:16:01 CST; 3s ago Docs: man:systemd-sysv-generator(8) Process: 1616 ExecStart=/etc/rc.d/init.d/jenkins start (code=exited, status=0/SUCCESS) CGroup: /system.slice/jenkins.service └─1640 /opt/jdk1.8.0_191/bin/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/l...Dec 04 16:16:01 jenkins systemd[1]: Starting LSB: Jenkins Automation Server...Dec 04 16:16:01 jenkins runuser[1621]: pam_unix(runuser:session): session opened for user jenkins by (uid=0)Dec 04 16:16:01 jenkins runuser[1621]: pam_unix(runuser:session): session closed for user jenkinsDec 04 16:16:01 jenkins jenkins[1616]: Starting Jenkins [ OK ]Dec 04 16:16:01 jenkins systemd[1]: Started LSB: Jenkins Automation Server.[root@jenkins opt]# netstat -lntup | grep 8080tcp6 0 0 :::8080 :::* LISTEN 1640/java
新版本的jenkins为了保证安全,在安装之后有一个锁,需要设置密码之后才可以解锁
此信息会在日志中体现,rpm包安装的jenkins日志默认在/var/log/jenkins/jenkins.log
:
[root@jenkins opt]# grep This /var/log/jenkins/jenkins.log This may also be found at: /var/lib/jenkins/secrets/initialAdminPassword[root@jenkins opt]# cat /var/lib/jenkins/secrets/initialAdminPassword8dc2857b96124813953b6b79251a2fe4
这个密码等下在页面验证中使用
默认监听的8080
端口,此时就可以使用浏览器进行访问了
访问后可以看到提示,输入刚刚查看的密码即可登录;
WAR 包安装方式
WAR包安装方式简单一些,部署好tomcat后,把WAR包放到webapps目录下,即可
[root@jenkins opt]# ls apache-tomcat-8.5.35.tar.gz -ld-rw-r--r-- 1 root root 9642757 Dec 4 15:02 apache-tomcat-8.5.35.tar.gz[root@jenkins opt]# tar xf apache-tomcat-8.5.35.tar.gz [root@jenkins opt]# mv apache-tomcat-8.5.35 tomcat8[root@jenkins opt]# ls -ld jenkins.war -rw-r--r-- 1 root root 75733340 Dec 3 15:56 jenkins.war[root@jenkins opt]# cd tomcat8/[root@jenkins tomcat8]# lsbin BUILDING.txt conf CONTRIBUTING.md lib LICENSE logs NOTICE README.md RELEASE-NOTES RUNNING.txt temp webapps work[root@jenkins tomcat8]# cd webapps/[root@jenkins webapps]# lsdocs examples host-manager manager ROOT[root@jenkins webapps]# rm -rf *[root@jenkins webapps]# mv /opt/jenkins.war .[root@jenkins webapps]# lltotal 73960-rw-r--r-- 1 root root 75733340 Dec 3 15:56 jenkins.war
这样就可以了,然后启动tomcat
[root@jenkins webapps]# ../bin/catalina.sh startUsing CATALINA_BASE: /opt/tomcat8Using CATALINA_HOME: /opt/tomcat8Using CATALINA_TMPDIR: /opt/tomcat8/tempUsing JRE_HOME: /opt/jdk1.8.0_191/jreUsing CLASSPATH: /opt/tomcat8/bin/bootstrap.jar:/opt/tomcat8/bin/tomcat-juli.jarTomcat started.[root@jenkins webapps]# tailf ../logs/catalina.out 04-Dec-2018 03:28:01.009 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Command line argument: -Djava.io.tmpdir=/opt/tomcat8/temp04-Dec-2018 03:28:01.009 INFO [main] org.apache.catalina.core.AprLifecycleListener.lifecycleEvent The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: [/usr/java/packages/lib/i386:/lib:/usr/lib]04-Dec-2018 03:28:01.100 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["http-nio-8080"]04-Dec-2018 03:28:01.108 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read04-Dec-2018 03:28:01.116 INFO [main] org.apache.coyote.AbstractProtocol.init Initializing ProtocolHandler ["ajp-nio-8009"]04-Dec-2018 03:28:01.116 INFO [main] org.apache.tomcat.util.net.NioSelectorPool.getSharedSelector Using a shared selector for servlet write/read04-Dec-2018 03:28:01.122 INFO [main] org.apache.catalina.startup.Catalina.load Initialization processed in 407 ms04-Dec-2018 03:28:01.137 INFO [main] org.apache.catalina.core.StandardService.startInternal Starting service [Catalina]04-Dec-2018 03:28:01.137 INFO [main] org.apache.catalina.core.StandardEngine.startInternal Starting Servlet Engine: Apache Tomcat/8.5.3504-Dec-2018 03:28:01.150 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deploying web application archive [/opt/tomcat8/webapps/jenkins.war]04-Dec-2018 03:28:04.464 INFO [localhost-startStop-1] org.apache.jasper.servlet.TldScanner.scanJars At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.Jenkins home directory: /root/.jenkins found at: $user.home/.jenkins04-Dec-2018 03:28:04.927 INFO [localhost-startStop-1] org.apache.catalina.startup.HostConfig.deployWAR Deployment of web application archive [/opt/tomcat8/webapps/jenkins.war] has finished in [3,774] ms04-Dec-2018 03:28:04.931 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["http-nio-8080"]04-Dec-2018 03:28:04.951 INFO [main] org.apache.coyote.AbstractProtocol.start Starting ProtocolHandler ["ajp-nio-8009"]04-Dec-2018 03:28:04.956 INFO [main] org.apache.catalina.startup.Catalina.start Server startup in 3833 ms04-Dec-2018 03:28:06.078 INFO [pool-6-thread-3] jenkins.InitReactorRunner$1.onAttained Started initialization04-Dec-2018 03:28:06.101 INFO [pool-6-thread-8] jenkins.InitReactorRunner$1.onAttained Listed all plugins04-Dec-2018 03:28:07.122 INFO [pool-6-thread-7] jenkins.InitReactorRunner$1.onAttained Prepared all plugins04-Dec-2018 03:28:07.201 INFO [pool-6-thread-3] jenkins.InitReactorRunner$1.onAttained Started all plugins04-Dec-2018 03:28:07.204 INFO [pool-6-thread-5] jenkins.InitReactorRunner$1.onAttained Augmented all extensions04-Dec-2018 03:28:07.968 INFO [pool-6-thread-1] jenkins.InitReactorRunner$1.onAttained Loaded all jobs04-Dec-2018 03:28:07.985 INFO [Download metadata thread] hudson.model.AsyncPeriodicWork$1.run Started Download metadata04-Dec-2018 03:28:08.617 INFO [Finalizing set up] org.springframework.context.support.AbstractApplicationContext.prepareRefresh Refreshing org.springframework.web.context.support.StaticWebApplicationContext@7fc855: display name [Root WebApplicationContext]; startup date [Tue Dec 04 03:28:08 EST 2018]; root of context hierarchy04-Dec-2018 03:28:08.618 INFO [Finalizing set up] org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@7fc855]: org.springframework.beans.factory.support.DefaultListableBeanFactory@16796f204-Dec-2018 03:28:08.630 INFO [Finalizing set up] org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@16796f2: defining beans [authenticationManager]; root of factory hierarchy04-Dec-2018 03:28:08.804 INFO [Finalizing set up] org.springframework.context.support.AbstractApplicationContext.prepareRefresh Refreshing org.springframework.web.context.support.StaticWebApplicationContext@1c0b9e5: display name [Root WebApplicationContext]; startup date [Tue Dec 04 03:28:08 EST 2018]; root of context hierarchy04-Dec-2018 03:28:08.804 INFO [Finalizing set up] org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory Bean factory for application context [org.springframework.web.context.support.StaticWebApplicationContext@1c0b9e5]: org.springframework.beans.factory.support.DefaultListableBeanFactory@18bcbb04-Dec-2018 03:28:08.804 INFO [Finalizing set up] org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons Pre-instantiating singletons in org.springframework.beans.factory.support.DefaultListableBeanFactory@18bcbb: defining beans [filter,legacy]; root of factory hierarchy04-Dec-2018 03:28:08.968 INFO [Finalizing set up] jenkins.install.SetupWizard.init ***************************************************************************************************************************************************************************************Jenkins initial setup is required. An admin user has been created and a password generated.Please use the following password to proceed to installation:7fa6a37fa7cc421f929c6f5ea19c16aaThis may also be found at: /root/.jenkins/secrets/initialAdminPassword***************************************************************************************************************************************************************************************
可以看到启动成功最后,同样输出了Password信息
这样就和使用RPM最后打开的页面操作相同了。
Jenkins 配置
在上面操作登陆后进入下面界面,选择安装推荐的插件
然后进入到设置管理员账号密码
的页面
下载 Maven 插件
因为需要构建的是Java的Maven项目,所有需要安装一个Maven插件,插件名为: Maven Integration
点击系统管理
--> 再点击插件管理
然后点击可选插件,过滤 Maven Integration
名称
选中要筛选出来要安装的插件,点击直接安装
当插件安装完成后,会提示 完成
配置 Jenkins 中的 JDK 和 Maven
进入到:系统管理
--> 全局工具配置
最后点击保存即可
Jenkins 构建项目
创建 Maven 项目
需要先创建一个新建任务
,选择maven,然后点击确认
设置构建的参数
首先设置保存构建天数和最大构建数
根据实际情况设置配置SVN
可以使用SVN、GitLab、GitHub都可以
然后填写SVN的用户密码,一定要有r
权限,否则在拉取代码就会报错。
配置构建参数和shell脚本
构建参数需要与开发协同合作
Shell脚本一般用于配合上线,因为Jenkins构建后,只是会生成WAR包,需要使用shell来进行推送上线
最后应用保存即可
这是就能看到刚刚创建的项目了