Jekins自动部署测试环境搭建实录

Jekins自动部署测试环境搭建实录

利用春节长假,研究了搭建Jekins+GitLab+IDEA自动部署环境。基本工作流程如下:
在这里插入图片描述

目前还只是完成了测试环境的持续集成。因为生产环境的上线要通过测试和验收等环节,不能完全自动部署。
整个搭建过程一波三折,遇到好多问题,逐一解决,最后也遗留了一些待进一步研究和思考的问题。简单记录一下整个过程,以备日后使用时查阅。

一、申请GitLab账户

首先需要申请GitLab账户,URL如下:
https://gitlab.com/users/sign_up
1.1
首先输入个人基本信息,需要注意的是,开始用的是sina邮箱,结果提示

The email address provided is not from an allowed domain

换用hotmail邮箱就可以了。密码用的是多年以前在摩托罗拉时使用的密码。
单击Register按钮,打开Create your group页面,这里创建了一个Morningstar的组,单击Create Group按钮,完成建组。打开创建第一个项目页面。这里创建了一个Hello World(图中有误)项目,项目的URL如下,后面会用到:
https://gitlab.com/johney2008/HelloWorld
在这里插入图片描述
在这里插入图片描述

二、安装IDEA

这里选择IDEA作为开发工具,Spring Boot作为开发框架。首先记录安装IDEA得到过程,访问如下URL可以选择下载各种版本的IDEA,
https://www.jetbrains.com/idea/download/other.html
在这里插入图片描述

这里选择下载IntelliJ IDEA Ultimate 2020.3.2 for Windows,得到ideaIU-2020.3.2.exe。
安装的过程略去。安装完成后,运行IDEA。会弹出激活IDEA的对话框。选择Evaluate for
free,然后单击下面的Evaluate按钮,打开插件中心。
在这里插入图片描述

三、创建示例项目

运行IDEA,如果打开默认项目,则从菜单File/Close Project将其关闭。
2.11

单击New Project按钮,打开新建项目对话框。

2.12

在左侧导航栏中选择 Spring Initilizer,然后单击Next按钮。打开输入项目属性窗口。
2.17

JDK选择8,其他保持默认值。
2.18

单击Next按钮,打开选择依赖的窗口。
2.19

选择Spring Web,然后单击Next按钮。打开输入项目名称的窗口。
2.20

项目名称使用HelloWorld,项目位置使用默认即可。单击Finish按钮结束创建示例项目。
待项目所需的资源都拉取成功后,在左侧窗格中选择Package。然后右击com.example.demo,在弹出菜单中依次选择New ->Package,打开选择目标目录对话框,选择src\main\java\com\example\demo。

2.21

2.22

单击OK按钮,打开New Package对话框。输入com.example.demo.controllers,然后回车。在左侧窗格中com.example.demo下面会出现一个controllers目录。
2.23

2.24

右击controllers,在弹出菜单中选择New -> Java Class,打开New Java Class对话框。
2.25

2.26

创建HelloController类,代码如下:

package com.example.demo.controllers;

import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RequestMapping("/hello")
public class HelloController {
    @RequestMapping("/")
    public  String index(){
        return "Hello world";
    }
}

以此demo程序作为搭建Jekins自动部署环境的Demo。
运行项目,然后打开浏览器,访问如下URL:

http://localhost:8080/hello/

结果如下:
2.27

四、IDEA提交代码至GitLab

接下来在IDEA中配置如何对接GitLab,首先配置Maven。在IDEA中选择File->Settings,打开Settings窗口,搜索Maven,如果需要配置 User settings file。
4.1

C:\Users\Administrator.m2\settings.xml里面已经配置好了阿里云仓库,代码如下:

<?xml version="1.0" encoding="UTF-8"?>
<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>C:\Users\Administrator\.m2\repository</localRepository>
    <mirrors>
        <!-- 阿里云仓库 -->
	<mirror>  
      <id>alimaven</id>  
      <name>aliyun maven</name>  
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>  
      <mirrorOf>central</mirrorOf>          
</mirror>
        <!-- 中央仓库1 -->
        <mirror>
            <id>repo1</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo1.maven.org/maven2/</url>
        </mirror>
    
        <!-- 中央仓库2 -->
        <mirror>
            <id>repo2</id>
            <mirrorOf>central</mirrorOf>
            <name>Human Readable Name for this Mirror.</name>
            <url>http://repo2.maven.org/maven2/</url>
        </mirror>
	<!-- 阿里云的maven路径, -->
	<mirror>
		<id>nexus-aliyun</id>
		<mirrorOf>*</mirrorOf>
		<name>Nexus aliyun</name>
		<url>http://maven.aliyun.com/nexus/content/groups/public</url>
	</mirror>	
    </mirrors> 
	
	<servers>
    <server>
        <id>docker-aliyun-my</id>
        <username>13691237015</username>
        <password>lxl991101</password>
        <configuration>
            <email>johney2008@sina.com</email>
        </configuration>
    </server>
</servers>
</settings>

然后在菜单中依次选择VCS->Create Git Repository,打开Create Git Repository窗口。选择前面创建的项目路径,默认为当前打开的项目。
4.2

单击OK按钮。此时项目中未提交的类和目录会变成红色,同时菜单中多出一个Git菜单项。
4.3

选择Git->Commit,打开Commit to master窗格
4.4

选中待提交的文件,在文本框中填写以下测试内容:
第一次提交
单击Commit按钮,弹出指定Git User Name的对话框。
4.5

填写Name和Email后单击Set and Commit按钮。
选择Git->Push,打开登录gitlab.com对话框。

4.6

输入用户名和密码,然后单击Log In按钮,打开Push Commit窗口。
4.7

可以看到之前提交的文件,单击Push按钮,推送提交的文件。
访问GitLab仓库,可以看到推送的文件

4.8

五、 在CentOS下安装Maven

在/usr/local/目录下下载Maven安装包:
cd /usr/local
wget http://mirrors.cnnic.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar xf apache-maven-3.3.9-bin.tar.gz
编辑/etc/profile,将maven的路径添加到全局变量PATH中。然后编译/etc/profile

source /etc/profile

执行下面命令查看Maven的版本。

mvn -v

结果如下:

Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /usr/local/apache-maven-3.3.9
Java version: 1.8.0_275, vendor: Red Hat, Inc.
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.275.b01-0.el7_9.x86_64/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1160.11.1.el7.x86_64", arch: "amd64", family: "unix"

六、 在CentOS下安装Jenkins的一次失败的经历

这是一次失败的经历,主要为了以后避免遇到同样的问题。
首先确认已经安装JDK,。如果没有,可以执行如下命令安装:

yum install -y java

从官网下载jenkins的rmp包,然后安装:

wget http://pkg.jenkins-ci.org/redhat-stable/ jenkins-2.176.2-1.1.noarch.rpm

不过命令下载太慢,于是改用迅雷下载上面的链接,下载好后,在CentOS创建/usr/local/jekins目录,将jenkins-2.176.2-1.1.noarch.rpm上传至该目录。
在CentOS中执行:

mkdir /var/cache/jenkins
mkdir /var/log/jenkins
mkdir /var/lib/jenkins
cd /usr/local/jekins
rpm -ivh jenkins-2.176.2-1.1.noarch.rpm

配置jenkis的端口

 vi /etc/sysconfig/jenkins

这里保持8080.
启动jenkins

service jenkins start/stop/restart

 安装成功后Jenkins将作为一个守护进程随系统启动
 系统会创建一个“jenkins”用户来允许这个服务,如果改变服务所有者,同时需要修改/var/log/jenkins, /var/lib/jenkins, 和/var/cache/jenkins的所有者
 启动的时候将从/etc/sysconfig/jenkins获取配置参数
 默认情况下,Jenkins运行在8080端口,在浏览器中直接访问该端进行服务配置
 Jenkins的RPM仓库配置被加到/etc/yum.repos.d/jenkins.repo
执行netstat -ntlp命令确认8080已经开放。
在这里插入图片描述

process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2pvaG5leWxlZTIwMDg=,size_16,color_FFFFFF,t_70#pic_center)

在浏览器中访问 如下URL:

http://192.168.1.101:8080/

打开解锁Jekins页面,
6.2

首次进入会要求输入初始密码。初始密码在:/var/lib/jenkins/secrets/initialAdminPassword
查看后粘贴到密码框里。然后单击“继续”按钮,打开自定义Jenkins页面。
在这里插入图片描述

选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。

6.4

但是很多组件没有安装成功。还是手动安装吧。
安装失败后,单击继续按钮(忘记截图了)。打开创建第一个管理员用户窗口,
6.5

创建的第一个管理员就用admin了,密码123456。单击使用admin账户继续。打开实例配置窗口。
6.6

保持默认配置,单击保存并完成按钮。打开Jenkins已经就绪窗口。

6.7

第2天再次访问Jenkins网页,发现用admin/123456居然不能登录了。于是尝试使用admin+初始密码,登录成功。奇怪
进入Jenkins主页。
6.8

在左侧导航栏中选择Manage Jenkins,打开管理Jenkins页面。
6.9

其中列出了很多依赖错误。
总结一下,就是升级Jenkins。综合比较后,决定升级到最新版本。百度后,确定升级到2.273-1.1版本,下载链接如下:
http://pkg.jenkins-ci.org/redhat-stable/jenkins-2.7.3-1.1.noarch.rpm
下载后将jenkins-2.7.3-1.1.noarch.rpm上传至CentOs的/usr/local/jekins目录。
然后登录CentOS,卸载旧版本,进行安装。

yum remove jenkins
cd /usr/local/jekins
rpm -ivh jenkins-2.7.3-1.1.noarch.rpm
systemctl restart jenkins.service

再刷新Jenkins主页,结果报错
6.10

百度到的解决方案是删除所有Jenkins插件。

cd /var/lib/jenkins/plugins
rm -Rf *

/var/lib/jenkins 是JENKINS_HOME的值。 可以在/etc/sysconfig/jenkins中查看。
再次刷新页面,报错

Unable to read /var/lib/jenkins/config.xml

直接删除/var/lib/jenkins/config.xml即可。可以进入Jenkins主页了。报错都消失了。
6.11

单击“管理插件”超链接,打开“插件管理”页面。
6.12

选择“可选插件”,在“过滤”文本框中输入“Maven Integration plugin”,居然没有找到,于是又停滞了下来。
在这里插入图片描述

百度到的解决方案是自己下载插件,在高级安装中上传安装。
访问如下URL可以选择下载maven插件
http://updates.jenkins-ci.org/download/plugins/maven-plugin/

在这里插入图片描述

经测试,3.7版本可以用。单击2.14超链接,下载Maven插件,得到maven-plugin.hpi。
最开始下载了3.9版本的Maven插件,后面出不来maven项目,折腾了半天。
返回插件管理页面,选择“高级”选项卡
在这里插入图片描述
在这里插入图片描述

选择刚刚下载的Maven插件,然后单击“上传按钮”,开始安装Maven插件。

安装完成后,选择页面下面的“安装完成后重启Jenkins(空闲时)”复选框,重启Jenkins。

6.17

重启Jenkins后,再次进入“插件管理”页面,选择“已安装”选项卡,可以看到Maven Integration plugin。
6.18
接下来安装GitHub插件,一样需要手动下载。
http://updates.jenkins-ci.org/download/plugins/github/
先选择1.14.0下载吧。不高不低。先试试再说。

七、基于失败经历对Jenkins进行全局配置。

登录Jenkins管理页面,选择“系统管理”->Gobal Tool Configuration,打开Gobal Tool Configuration页面,对JDK和mvn进行配置。取消选择“自动安装”,分别填写JAVA_HOME和MAVEN_HOME
6.19
在CentOS中定位JAVA_HOME的方法如下:
找到java

whereis java

结果如下:

java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz

查看第一个位置:

ll  /usr/bin/java

结果如下:

lrwxrwxrwx. 1 root root 22 2月  11 09:10 /usr/bin/java -> /etc/alternatives/java

发现/usr/bin/java是一个链接
继续查看/etc/alternatives/java

ll /etc/alternatives/java

结果如下:

[root@centos1 ~]# ll  /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 2月  11 09:10 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64/jre/bin/java

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64就是JAVA_HOME
在CentOS中定位MAVEN_HOME的方法如下:
找到mvn

whereis mvn

结果如下:

mvn: /usr/local/apache-maven-3.3.9/bin/mvn.cmd /usr/local/apache-maven-3.3.9/bin/mvn

/usr/local/apache-maven-3.3.9就是MAVEN_HOME

八、基于失败经历配置自动化部署

·首先需要创建一个新项目。返回Jenkins主页,在左侧导航条中单击“新建”菜单,打开新建Jenkins任务的页面:
在这里插入图片描述

输入item name暂定为Hello World,选择“构建一个maven项目”,然后单击OK按钮。打开任务详情页面,结果F12报错,各种查阅找不到原因。猜测是Maven Integration Plugin的版本不匹配。果断降级,之后果然不报错了。现在Maven Integration Plugin的版本是2.14,不再升级了。
在这里插入图片描述

选中“源码管理”,结果发现没有git
折腾了一天安装GitHub插件,结果不管怎么安装都有问题,创建项目报错。

偶然发现2.263.4是没有问题的,于是决定从头再来…好几天白费了。就得出一个结论:用Jenkins2.263.4是可以的。

九、重新开始,在CentOS下安装Jenkins

经过一次失败的经历,卸载Jenkins,从头再来。

rpm -e jenkins

删除遗留文件:

find / -iname jenkins | xargs -n 1000 rm -rf

首先确认已经安装JDK,。如果没有,可以执行如下命令安装:

yum install -y java

(1)首先尝试按照官网的步骤操作。各种无法连接。于是还是采用rpm方式安装。
从官网下载jenkins的rmp包,然后安装:

mkdir /usr/local/jenkins
cd /usr/local/jenkins
wget http://ftp-chi.osuosl.org/pub/jenkins/redhat-stable/jenkins-2.263.4-1.1.noarch.rpm
mkdir /var/cache/jenkins
mkdir /var/log/jenkins
mkdir /var/lib/jenkins
cd /usr/local/jekins
rpm -ivh jenkins-2.263.4-1.1.noarch.rpm

配置jenkis的端口

 vi /etc/sysconfig/jenkins

这里保持8080.
启动jenkins

service jenkins start/stop/restart

 安装成功后Jenkins将作为一个守护进程随系统启动
 系统会创建一个“jenkins”用户来允许这个服务,如果改变服务所有者,同时需要修改/var/log/jenkins, /var/lib/jenkins, 和/var/cache/jenkins的所有者
 启动的时候将从/etc/sysconfig/jenkins获取配置参数
 默认情况下,Jenkins运行在8080端口,在浏览器中直接访问该端进行服务配置
 Jenkins的RPM仓库配置被加到/etc/yum.repos.d/jenkins.repo
执行netstat -ntlp命令确认8080已经开放。
在这里插入图片描述

在浏览器中访问 如下URL:

http://192.168.1.101:8080/

打开解锁Jekins页面,

9.2

首次进入会要求输入初始密码。初始密码在:/var/lib/jenkins/secrets/initialAdminPassword
查看后粘贴到密码框里。然后单击“继续”按钮,打开自定义Jenkins页面。
9.3

选择“Install suggested plugins”安装默认的插件,下面Jenkins就会自己去下载相关的插件进行安装。

9.4

安装成功后,直接打开创建第一个管理员用户窗口,
9.5

创建的第一个管理员就用johney了,密码123456。单击保存并“完成”。打开实例配置窗口。
9.6

保持默认配置,单击“保存并完成”按钮。打开Jenkins已经就绪窗口。

9.7

进入Jenkins主页。
9.8

在左侧导航栏中选择Manage Jenkins,打开管理Jenkins页面。
9.9

单击“Manage Plugins”超链接,打开“插件管理”页面。
9.10

选择“已安装”搜索GitHub,找到已经安装了GitHub创建。
9.11

但是没有找到Maven Integration plugin。需要手动安装。
选择“可选插件”,在“过滤”文本框中输入“Maven Integration plugin”,回车后选中Maven Integration,单击“直接安装”按钮。
9.12

安装完成后,选择页面下面的“安装完成后重启Jenkins(空闲时)”复选框,重启Jenkins。

在这里插入图片描述

重启Jenkins后,再次进入“插件管理”页面,选择“已安装”选项卡,可以看到
Maven Integration plugin。
9.14

十、对Jenkins进行全局配置

登录Jenkins管理页面,选择“系统管理”->Gobal Tool Configuration,打开Gobal Tool Configuration页面,对JDK和mvn进行配置。取消选择“自动安装”,分别填写JAVA_HOME和MAVEN_HOME
10.1

在CentOS中定位JAVA_HOME的方法如下:
找到java

whereis java

结果如下:

java: /usr/bin/java /usr/lib/java /etc/java /usr/share/java /usr/share/man/man1/java.1.gz

查看第一个位置:

ll  /usr/bin/java

结果如下:

lrwxrwxrwx. 1 root root 22 2月  11 09:10 /usr/bin/java -> /etc/alternatives/java

发现/usr/bin/java是一个链接
继续查看/etc/alternatives/java

ll /etc/alternatives/java

结果如下:

[root@centos1 ~]# ll  /etc/alternatives/java
lrwxrwxrwx. 1 root root 73 2月  11 09:10 /etc/alternatives/java -> /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64/jre/bin/java

/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.282.b08-1.el7_9.x86_64就是JAVA_HOME
10.2

git配置保持默认即可。
10.3

在CentOS中定位MAVEN_HOME的方法如下:
找到mvn

whereis mvn

结果如下:

mvn: /usr/local/apache-maven-3.3.9/bin/mvn.cmd /usr/local/apache-maven-3.3.9/bin/mvn

/usr/local/apache-maven-3.3.9就是MAVEN_HOME
10.4

十一、配置自动化部署

进入正题,配置Jenkins的自动化部署。也就是自动从源码库拉取代码,编译并发布。

11.1 创建新项目

·首先需要创建一个新项目。返回Jenkins主页,在左侧导航条中单击“新建”菜单,打开新建Jenkins任务的页面:
11.1

输入item name暂定为Hello World,选择“构建一个maven项目”,然后单击“确定”按钮。打开任务详情页面。
11.2

11.2 配置Git

选中“源码管理”,选择Git,将《四、IDEA提交代码至GitLab》中提交项目的GitLab URL添加到Repository URL文本框中,具体如下:

https://gitlab.com/johney2008/HelloWorld.git

获取Repository URL的方法如下:
(1)访问GitLab的项目页面,

https://gitlab.com/johney2008/HelloWorld

(2)单击Clone按钮,然后单击Clone with HTTPS后面的 按钮,可以将Repository URL复制出来。
11.3

在“源码管理”页面中,,单击Credentials后面的添加按钮,选择Jenkins。打开“添加凭据”对话框。添加GitLab的用户名和密码然后单击“添加”按钮。然后在Credentials下拉框中选择刚刚的配置。

11.4

11.5

11.3 构建项目

保存项目,然后单击页面左上角的项目名Hello World 超链接,打开项目Hello World的详情页。单击左侧导航栏中的Build Now,可以开始构建项目。
11.6

每次构建都会生成一个编号,#1/#2或者#3……
单击编号可以查看构建的详情。
11.7

11.8

单击左侧导航条中的“控制台输出”菜单项,可以实时查看构建的过程。
由于默认是从中央仓库获取依赖包的,很慢,只有几K/s。
11.9

于是查阅资料配置Jenkins的Maven从阿里云(或私服)下载。方法如下:
(1)准备好Maven配置文件settings.xml,代码如下:

<?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> /var/lib/jenkins/.m2/repository</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>
		
	</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>
    <profile>
            <id>XaNexus</id>
            <repositories>
                <repository>
                    <id>XaNexus</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                        <updatePolicy>daily</updatePolicy>
                        <checksumPolicy>warn</checksumPolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <checksumPolicy>fail</checksumPolicy>
                    </snapshots>
                </repository>
            </repositories>
            <pluginRepositories>
                <pluginRepository>
                    <id>XaNexus</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public</url>
                    <releases>
                        <enabled>true</enabled>
                        <checksumPolicy>warn</checksumPolicy>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                        <checksumPolicy>fail</checksumPolicy>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
		<profile>   
        <id>jdk1.8</id>    
        <activation>   
            <activeByDefault>true</activeByDefault>    
            <jdk>1.8</jdk>   
        </activation>    
        <properties>   
            <maven.compiler.source>1.8</maven.compiler.source>    
            <maven.compiler.target>1.8</maven.compiler.target>    
            <maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>   
        </properties>   
    </profile>  
  </profiles>

 
  <activeProfiles>
    <activeProfile>XaNexus</activeProfile>
  </activeProfiles>

</settings>

注意,节点定义本地保存依赖包的目录,这里使用默认的Maven仓库目录 /var/lib/jenkins/.m2/repository。中定义了名为alimaven的阿里云镜像,如果使用私服可以在此处配置。
将次settrings.xml上传至CentOS的/var/lib/jenkins/.m2目录,重启Jenkins服务。
回到Jenkins管理后台,重新构建项目,这次很快就成功了。
11.10

11.4 构建触发器

前面构建项目时手动操作的。但是如果每次都手动构建,就失去了用Jenkins的意义。
可以配置构建触发器,指定定时发起构建。
在配置项目的页面中选择“构建触发器”选项卡,切换到构建触发器区域。
11.11

共有6个配置构建触发器的选项。记录一下这些选项的含义。
(1)Build whenever a SNAPSHOT dependency is built
只要项目所依赖的快照项目被构建了,就启动构建。通常用于底层项目构建时自动构建上层应用。选中此选项后,Jenkins会自动解析每个项目的pom.xml,分析项目之间的依赖关系。

(2)Schedule build when some upstream has no successful builds
如果选中此选项,即使上游项目没有成功构建,JKenkins也会启动构建项目;
如果没有选中此选项,则上游项目没有成功构建时,JKenkins不会启动构建项目;
这可以保证项目有序地构建。
(3)触发远程构建 (例如,使用脚本)
如果需要远程触发构建,可以勾选此选项。然后在后面填写一个Token,随便什么字符串都可以,例如123456。
11.12

这样就可以通过下面的URL触发项目的构建:
JENKINS_URL/job/项目名/build?token=TOKEN_NAME
这样就可以让程序员提交后自己触发项目的构建了。很有用
(4)Build after other projects are built
其他指定的项目构建后构建。选中需要输入依赖的项目名。
11.13

(5)Build periodically
定期构建。选中后需要输入日程表。可以使用一个字符串定义日程表,语法如下:


第一个表示分钟,取值0~59
第二个
表示小时,取值0~24
第三个表示一个月的第几天,取值1~31
第四个
表示第几月,取值1~12
第五个*表示一周中的第几天,取值0~7,其中0和7代表的都是周日
例如,找了一些例子:
H 6-18/2 * 上午6点到下午六点期间的每隔2个小时 构建一次
H H/2 *每隔2小时构建一次
12 15 * 每天下午15点12分触发构建
20 16 15 每个月的15号下午16点20分构建一次
10-15 每个月的10号到15号某个时间都会被构建一次
H/3 12 H(1-6) * 1到6月里随机的某个月的12号每隔3小时构建一次

每隔5分钟构建一次
H/5 * * * *
每两小时构建一次
H H/2 * * *
每天中午12点定时构建一次
0 12 * * *
每天下午6点下班前定时构建一次
0 18 * * *
工作日(周一到周五)早上9点定时构建一次
0 9 * * 1-5

测试了一个每5分钟构建一次的。成功了。
11.14

11.5

(6)GitHub hook trigger for GITScm polling
当GitHub有变化是自动构建。
(7)Poll SCM
定时检查源码变更。如果有更新就checkout最新code下来,然后执行构建动作

11.5 推送jar包到远程服务器

前面已经实现了自动构建,生成的jar包就在Jenins服务器的/var/lib/jenkins/workspace/Hello World/target目录下,Hello World是Jenkins项目名。
11.16

最后一步就是将jar包推送到远程服务器。要实现此功能,需要安装远程发布插件:“Publish Over SSH”,方法如下:
进入Jenkins插件管理页面,在可选插件中搜索Publish Over SSH,然后安装。

11.17

重启Jenkins后,可以在已安装列表中找到Publish Over SSH插件。
11.18

在左侧导航栏中单击Manage Jenkins,然后在右侧单击System Configuration。
11.19

打开系统配置页面。在页面底部找到Publish over SSH栏目。单击SSH Servers后面的新增按钮,添加一个SSH服务器。单击“高级”按钮输入密码
11.20

11.21

填写完毕后,单击TestConfiguration按钮测试连接。
11.22

打开Jenkins项目Hello World,单击“构建环境”,里滚动页面到Build栏目,早Goal and options文本框中填写:
clean package -U -DskipTests=true -P xlTest
单击“构建后操作”选项卡,在Add post-build step下拉框中选择Send files or execute commands over SSH。
11.23

11.24

为了验证推送的功能,在项目Hello World的主页中单击 Build Now菜单,会在左侧下面出现一个新的构建记录,点进去看控制台,可以看到传送文件的记录。
11.25

登录推送的服务器,发现在/root下创建了配置推送的目录,本以为指定推送到/root目录,结果在/root下又建了一个root目录。
11.26

可以通过命令将次文件复制到指定的位置,然后在重启对应的服务。这里只做了一次简单的测试,在Exec Command文本框中填写如下命令:
cp /root/root/demo-0.0.1-SNAPSHOT.jar /usr/local/jenkins
构建完成后,可以在远程服务器的/usr/local/jenkins目录下找到发布的jar包
11.27

这次先到这里吧。

十二、下一步的工作

本次研究历经数天,遇到很多问题,最终都一一解决,一度推翻重来,几经反复终于搭建了用于测试环境的Jenkins自动部署环境。但是还有一些工作没有逐一去做。记录一下:
(1)没有在测试环境下为应用创建服务,也就是没有验证完整的流程,虽然这个过程应该没有问题;
(2)没有研究从测试环境到生产环境的发布流程。此流程应该需要人为触发,不能自动构建。日后可以参照这篇文章继续研究。
https://www.cnblogs.com/kevingrace/p/6022447.html

https://www.jianshu.com/p/a1451a4d672d?utm_campaign=maleskine&utm_content=note&utm_medium=seo_notes&utm_source=recommendation

https://my.oschina.net/u/1791512/blog/1552790

估计Jenkins自动部署流程,即使节后上线,也是从测试环境开始,一步一步的推进。
(3)自动部署流程与项目的版本控制有着密切的关联,需要进一步了解Git版本控制规范。
https://www.cnblogs.com/wssdx/p/12061384.html
https://jingyan.baidu.com/article/e52e36155d9ee040c60c51e0.html
https://blog.csdn.net/yuruixin_china/article/details/79061999

说到Git,记录一个小插曲。早上起来看构建历史记录,发现失败了,看日志报如下错误:

git fatal: index file smaller than expected

只有在Jenkins的项目目录下删除.git目录,然后重置git.。登录Jenkins服务器,执行如下命令。

cd /var/lib/jenkins/workspace/Hello\ World
rm -Rf .git
git reset

再执行构建,就成功了
(4)如果在生产环境部署,还需要考虑一个问题,就是一旦发布的版本有问题,就需要回滚。参考
https://www.cnblogs.com/EasonJim/p/5945266.html
(5)实际工作环境上线时需要考虑Maven私服。
https://www.cnblogs.com/ligh-test/p/7839463.html

路漫漫其修远兮,吾将上下而求索…

  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值