jenkins配置maven编译tomcat项目并使用Nexus配置私库源

Posted 雪洁

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jenkins配置maven编译tomcat项目并使用Nexus配置私库源相关的知识,希望对你有一定的参考价值。

(1)安装maven

wget https://archive.apache.org/dist/maven/maven-3/3.6.2/binaries/apache-maven-3.6.2-bin.tar.gz
tar xzvf apache-maven-3.6.2-bin.tar.gz
cd apache-maven-3.6.2/

添加系统变量:

vim /etc/profile
增加如下代码:
export M2_HOME=/opt/apache-maven-3.6.2
export PATH=$M2_HOME/bin:$PATH
#执行如下代码:
source /etc/profile

 查看版本号:

mvn -version

 

 (2)Nexus配置本地私库 

    下载:https://www.sonatype.com/download-oss-sonatype

cd /usr/local
tar xzvf nexus-3.51.0-01-unix.tar.gz
/usr/local/nexus-3.51.0-01/bin/nexus start

  启动服务失败时,可通过如下命令前台启动:

/usr/local/nexus-3.51.0-01/bin/nexus run #前台运行可观察错误日志

  默认端口为80081,如果该端口已占用,可修改配置文件进行修改:

vim etc/nexus-default.properties

  浏览器访问:http://localhost:8081  默认用户名:admin,默认密码可查看以下文件:

cat /usr/local/sonatype-work/nexus3/admin.password

  首次登录会提示让修改密码,根据提示输入新密码即可。

       登陆后点击进入仓库管理界面,点击导航Browse,这里是所有已经配置的仓库:

Name:

maven-central:maven中央库,默认从https://repo1.maven.org/maven2/拉取JAR包,这个远端地址可改,也可新建另外一个

maven-releases:私库发行版JAR

maven-snapshots:私库调试版本JAR

maven-public:仓库分组,把上面三个仓库组合在一起对外提供服务

Type:

proxy:代理远端仓库

hosted:本地Jar包

group:仓库组

点击上方齿轮图标,即可打开配置管理页面,其中Repository栏为仓库管理,下面只针对这里的Blob Stores、Repositories说明

Blob Stores:jar包存放路径,默认存放在NEXUS_HOME/sonatype-work\\nexus3\\blobs\\default下,可创建多个

Repositories:

  创建代理仓库Proxy

    ①选择Create repository创建仓库

    ②选择仓库类型maven2(proxy)

      

 

    ③设置仓库名称

       

    ④设置仓库版本,代理仓库通常设置为releases

      

    ⑤配置下载存放路径,默认是Blob Storesdefault

    ⑥配置代理仓库地址,我是用阿里的

      

    以上完成后保存创建即可完成代理仓库的创建

   创建本地仓库(第三方、代理仓库中没有的jar都放这里)hosted,重复上面的流程,不同处如下

    ②选择仓库类型maven2(hosted)

    ④设置仓库版本,releases或snapshots,两者区别如下:

       有一个自己封装的jar包,该jar包处于开发版,近期会不停的更新,版本为1.0,使用snapshots仓库,今后jar包更新后,只需将新的包传入到该仓库,

       项目中会自动下载更新到这个包,无需修改版本号;用releases这个仓库,每次变更jar包必须升级版本号,对应项目pom文件中要修改,否则新的jar包不会被下载

    ⑥此步改为,目的是可以上传部署jar

      

  创建仓库组group,重复上面的流程,不同处如下

    ②选择仓库类型maven2(group)

      ④设置将哪些仓库归类到一个组里

      

  到现在为止,Nexus仓库部分操作完成。

(3)修改maven配置文件中的仓库源地址

vi /opt/apache-maven-3.6.2/conf/settings.xml

  修改maven本地仓库位置,搜索“localRepository”,去掉注释,修改文件夹位置,或者增加如下代码:

<localRepository>/var/lib/jenkins/repo</localRepository>

搜索mirrors,在下面增加:

    <mirror>
      <id>local-aliyun</id>
      <mirrorOf>*,!jeecg,!jeecg-snapshots,!com.e-iceblue</mirrorOf>
      <name>local-aliyun</name>
      <url>http://192.168.1.29:18081/repository/maven-public/</url>
    </mirror>

搜索servers,在下面增加:

    <server>
      <id>local-aliyun</id>
      <username>jenkins</username>
      <password>password</password>
    </server>

注意:mirror 标签内的 id 和 servier 标签内的 id 对应的值保持一致

(4)jenkins编译java项目

 编译时下载jar包显示从上面配置的源中下载即可。

 

Jenkins配置Maven及tomcat安装

在Jenkins集成服务器上,我们需要安装Maven来编译和打包项目。
安装Maven
先上传Maven软件到Jenkins服务器

 tar -xzf apache-maven-3.6.2-bin.tar.gz

配置环境变量
vi /etc/profile

export MAVEN_HOME=/opt/module/apache-maven-3.6.2
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

 source /etc/profile 配置生效

[root@hadoop001 module]# mvn -v
Apache Maven 3.6.2 (40f52333136460af0dc0d7232c0dc0bcf0d9e117; 2019-08-27T23:06:16+08:00)
Maven home: /opt/module/apache-maven-3.6.2
Java version: 1.8.0_144, vendor: Oracle Corporation, runtime: /opt/module/jdk1.8.0_144/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-957.21.3.el7.x86_64", arch: "amd64", family: "unix"
[root@hadoop001 module]#

全局工具配置关联JDK和Maven
Jenkins->Global Tool Configuration->JDK->新增JDK,配置如下:

 

 

 

 

添加 Jenkins全局变量
Manage Jenkins->Configure System->Global Properties ,添加三个全局变量
JAVA_HOME、MAVEN_HOME、PATH+EXTRA

 

 修改 Maven的settings.xml

mkdir /root/repo 创建本地仓库目录

<?xml version="1.0" encoding="UTF-8"?>

<!--
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements.  See the NOTICE file
distributed with this work for additional information
regarding copyright ownership.  The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License.  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied.  See the License for the
specific language governing permissions and limitations
under the License.
-->

<!--
 | This is the configuration file for Maven. It can be specified at two levels:
 |
 |  1. User Level. This settings.xml file provides configuration for a single user,
 |                 and is normally provided in ${user.home}/.m2/settings.xml.
 |
 |                 NOTE: This location can be overridden with the CLI option:
 |
 |                 -s /path/to/user/settings.xml
 |
 |  2. Global Level. This settings.xml file provides configuration for all Maven
 |                 users on a machine (assuming they\'re all using the same Maven
 |                 installation). It\'s normally provided in
 |                 ${maven.conf}/settings.xml.
 |
 |                 NOTE: This location can be overridden with the CLI option:
 |
 |                 -gs /path/to/global/settings.xml
 |
 | The sections in this sample file are intended to give you a running start at
 | getting the most out of your Maven installation. Where appropriate, the default
 | values (values used when the setting is not specified) are provided.
 |
 |-->
<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">
  <!-- localRepository
   | The path to the local repository maven will use to store artifacts.
   |
   | Default: ${user.home}/.m2/repository
  <localRepository>/path/to/local/repo</localRepository>
  -->
<localRepository>/root/repo/</localRepository>
  <!-- interactiveMode
   | This will determine whether maven prompts you when it needs input. If set to false,
   | maven will use a sensible default value, perhaps based on some other setting, for
   | the parameter in question.
   |
   | Default: true
  <interactiveMode>true</interactiveMode>
  -->

  <!-- offline
   | Determines whether maven should attempt to connect to the network when executing a build.
   | This will have an effect on artifact downloads, artifact deployment, and others.
   |
   | Default: false
  <offline>false</offline>
  -->

  <!-- pluginGroups
   | This is a list of additional group identifiers that will be searched when resolving plugins by their prefix, i.e.
   | when invoking a command line like "mvn prefix:goal". Maven will automatically add the group identifiers
   | "org.apache.maven.plugins" and "org.codehaus.mojo" if these are not already contained in the list.
   |-->
  <pluginGroups>
    <!-- pluginGroup
     | Specifies a further group identifier to use for plugin lookup.
    <pluginGroup>com.your.plugins</pluginGroup>
    -->
  </pluginGroups>

  <!-- proxies
   | This is a list of proxies which can be used on this machine to connect to the network.
   | Unless otherwise specified (by system property or command-line switch), the first proxy
   | specification in this list marked as active will be used.
   |-->
  <proxies>
    <!-- proxy
     | Specification for one proxy, to be used in connecting to the network.
     |
    <proxy>
      <id>optional</id>
      <active>true</active>
      <protocol>http</protocol>
      <username>proxyuser</username>
      <password>proxypass</password>
      <host>proxy.host.net</host>
      <port>80</port>
      <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
    </proxy>
    -->
  </proxies>

  <!-- servers
   | This is a list of authentication profiles, keyed by the server-id used within the system.
   | Authentication profiles can be used whenever maven must make a connection to a remote server.
   |-->
  <servers>
    <!-- server
     | Specifies the authentication information to use when connecting to a particular server, identified by
     | a unique name within the system (referred to by the \'id\' attribute below).
     |
     | NOTE: You should either specify username/password OR privateKey/passphrase, since these pairings are
     |       used together.
     |
    <server>
      <id>deploymentRepo</id>
      <username>repouser</username>
      <password>repopwd</password>
    </server>
    -->

    <!-- Another sample, using keys to authenticate.
    <server>
      <id>siteServer</id>
      <privateKey>/path/to/private/key</privateKey>
      <passphrase>optional; leave empty if not used.</passphrase>
    </server>
    -->
  </servers>

  <!-- mirrors
   | This is a list of mirrors to be used in downloading artifacts from remote repositories.
   |
   | It works like this: a POM may declare a repository to use in resolving certain artifacts.
   | However, this repository may have problems with heavy traffic at times, so people have mirrored
   | it to several places.
   |
   | That repository definition will have a unique id, so we can create a mirror reference for that
   | repository, to be used as an alternate download site. The mirror site will be the preferred
   | server for that repository.
   |-->
  <mirrors>
    <!-- mirror
     | Specifies a repository mirror site to use instead of a given repository. The repository that
     | this mirror serves has an ID that matches the mirrorOf element of this mirror. IDs are used
     | for inheritance and direct lookup purposes, and must be unique across the set of mirrors.
     |
    <mirror>
      <id>mirrorId</id>
      <mirrorOf>repositoryId</mirrorOf>
      <name>Human Readable Name for this Mirror.</name>
      <url>http://my.repository.com/repo/path</url>
    </mirror>
     -->
    <mirror>
                <id>alimaven</id>
                <name>aliyun maven</name>
                <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                <mirrorOf>central</mirrorOf>
        </mirror>
  </mirrors>

  <!-- profiles
   | This is a list of profiles which can be activated in a variety of ways, and which can modify
   | the build process. Profiles provided in the settings.xml are intended to provide local machine-
   | specific paths and repository locations which allow the build to work in the local environment.
   |
   | For example, if you have an integration testing plugin - like cactus - that needs to know where
   | your Tomcat instance is installed, you can provide a variable here such that the variable is
   | dereferenced during the build process to configure the cactus plugin.
   |
   | As noted above, profiles can be activated in a variety of ways. One way - the activeProfiles
   | section of this document (settings.xml) - will be discussed later. Another way essentially
   | relies on the detection of a system property, either matching a particular value for the property,
   | or merely testing its existence. Profiles can also be activated by JDK version prefix, where a
   | value of \'1.4\' might activate a profile when the build is executed on a JDK version of \'1.4.2_07\'.
   | Finally, the list of active profiles can be specified directly from the command line.
   |
   | NOTE: For profiles defined in the settings.xml, you are restricted to specifying only artifact
   |       repositories, plugin repositories, and free-form properties to be used as configuration
   |       variables for plugins in the POM.
   |
   |-->
  <profiles>
    <!-- profile
     | Specifies a set of introductions to the build process, to be activated using one or more of the
     | mechanisms described above. For inheritance purposes, and to activate profiles via <activatedProfiles/>
     | or the command line, profiles have to have an ID that is unique.
     |
     | An encouraged best practice for profile identification is to use a consistent naming convention
     | for profiles, such as \'env-dev\', \'env-test\', \'env-production\', \'user-jdcasey\', \'user-brett\', etc.
     | This will make it more intuitive to understand what the set of introduced profiles is attempting
     | to accomplish, particularly when you only have a list of profile id\'s for debug.
     |
     | This profile example uses the JDK version to trigger activation, and provides a JDK-specific repo.
    <profile>
      <id>jdk-1.4</id>

      <activation>
        <jdk>1.4</jdk>
      </activation>

      <repositories>
        <repository>
          <id>jdk14</id>
          <name>Repository for JDK 1.4 builds</name>
          <url>http://www.myhost.com/maven/jdk14</url>
          <layout>default</layout>
          <snapshotPolicy>always</snapshotPolicy>
        </repository>
      </repositories>
    </profile>
    -->

    <!--
     | Here is another profile, activated by the system property \'target-env\' with a value of \'dev\',
     | which provides a specific path to the Tomcat instance. To use this, your plugin configuration
     | might hypothetically look like:
     |
     | ...
     | <plugin>
     |   <groupId>org.myco.myplugins</groupId>
     |   <artifactId>myplugin</artifactId>
     |
     |   <configuration>
     |     <tomcatLocation>${tomcatPath}</tomcatLocation>
     |   </configuration>
     | </plugin>
     | ...
     |
     | NOTE: If you just wanted to inject this configuration whenever someone set \'target-env\' to
     |       anything, you could just leave off the <value/> inside the activation-property.
     |
    <profile>
      <id>env-dev</id>

      <activation>
        <property>
          <name>target-env</name>
          <value>dev</value>
        </property>
      </activation>

      <properties>
        <tomcatPath>/path/to/tomcat/instance</tomcatPath>
      </properties>
    </profile>
    -->
  </profiles>

  <!-- activeProfiles
   | List of profiles that are active for all builds.
   |
  <activeProfiles>
    <activeProfile>alwaysActiveProfile</activeProfile>
    <activeProfile>anotherAlwaysActiveProfile</activeProfile>
  </activeProfiles>
  -->
</settings>

测试Maven是否配置成功
使用之前的gitlab密码测试项目,修改配置

 

 

 

 

 再次构建,如果可以把项目打成 war包,代表maven环境配置成功啦!

 

安装Tomcat8.5
把Tomcat压缩包上传到服务器

由于比较简单,就简单的描述一下

tar -xzf apache-tomcat-8.5.47.tar.gz 

配置Tomcat用户角色权限
默认情况下Tomcat是没有配置用户角色权限的

 

 

 

但是,后续 Jenkins部署项目到Tomcat服务器,需要用到Tomcat的用户,所以修改tomcat以下配置,
添加用户及权限

vi /opt/tomcat/conf/tomcat-users.xml
<tomcat-users>
<role rolename="tomcat"/>
<role rolename="role1"/>
<role rolename="manager-script"/>
<role rolename="manager-gui"/>
<role rolename="manager-status"/>
<role rolename="admin-gui"/>
<role rolename="admin-script"/>
<user username="tomcat" password="tomcat" roles="manager-gui,manager-
script,tomcat,admin-gui,admin-script"/>
</tomcat-users>

用户和密码都是:tomcat
注意:为了能够刚才配置的用户登录到Tomcat,还需要修改以下配置

vi /opt/tomcat/webapps/manager/META-INF/context.xml
<!--
 <Valve className="org.apache.catalina.valves.RemoteAddrValve"
    allow="127\\.\\d+\\.\\d+\\.\\d+|::1|0:0:0:0:0:0:0:1" />
 -->

把上面这行注释掉即可!
重启Tomcat,访问测试

以上是关于jenkins配置maven编译tomcat项目并使用Nexus配置私库源的主要内容,如果未能解决你的问题,请参考以下文章

Jenkins配置Maven及tomcat安装

jenkins git maven tomat 项目拉取编译自动部署(操作详细)

jenkins git maven tomat 项目拉取编译自动部署(操作详细)

Jenkins + Tomcat + svn + maven 自动化构件简单过程

Jenkins编译一个Web项目并远程发布到Tomcat

Jenkins编译一个Web项目并远程发布到Tomcat