Maven和Findbugs集成

1.配置pom.xml

<build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>findbugs-maven-plugin</artifactId>
                <version>3.0.4</version>
                <configuration>
                    <!--配置文件-->
                    <configLocation>${basedir}/findbugs-config.xml</configLocation>
                    <!--排除的BUG规则-->
                    <excludeFilterFile>custom-findbugs-exclude.xml</excludeFilterFile>
                    <!--包含的BUG规则-->
                    <includeFilterFile>custom-findbugs-include.xml</includeFilterFile>
                    <!--检查等级-->
                    <threshold>High</threshold>
                    <effort>Default</effort>
                    <!-- 输出配置 -->
                    <findbugsXmlWithMessages>true</findbugsXmlWithMessages>
                    <findbugsXmlOutput>true</findbugsXmlOutput>
                    <xmlOutput>true</xmlOutput>
                    <findbugsXmlOutputDirectory>target/site</findbugsXmlOutputDirectory>
                </configuration>
            </plugin>
        </plugins>
    </build>

custom-findbugs-exclude.xml内容:

<FindBugsFilter>
    <Match>
        <Bug pattern="DLS_DEAD_LOCAL_STORE"/>
    </Match>

    <Match>
        <Bug pattern="DM_BOXED_PRIMITIVE_FOR_PARSING"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP"/>
    </Match>

    <Match>
        <Bug pattern="EI_EXPOSE_REP2"/>
    </Match>

    <Match>
        <Bug pattern="ME_ENUM_FIELD_SETTER"/>
    </Match>
</FindBugsFilter>

2. 运行findbugs任务(先运行“mvn package”编译工程 )

mvn findbugs:help      
查看findbugs插件的帮助  
mvn findbugs:check      
检查代码是否通过findbugs检查,如果没有通过检查,检查会失败,但检查不会生成结果报表  
mvn findbugs:findbugs   
检查代码是否通过findbugs检查,如果没有通过检查,检查不会失败,会生成结果报表保存在target/findbugsXml.xml文件中  
mvn findbugs:gui        
检查代码并启动gui界面来查看结果  

具体fndbugs插件的配置项可以参考http://mojo.codehaus.org/findbugs-maven-plugin/findbugs-mojo.html

WordPress 搭建

  1. 环境准备 – 数据库(mariadb)

参考:https://www.cnblogs.com/river2005/p/6813618.html
CentOS7下使用yum安装MariaDB
CentOS 6 或早期的版本中提供的是 MySQL 的服务器/客户端安装包,但 CentOS 7 已使用了 MariaDB 替代了默认的 MySQL。MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可 MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

Linux下安装MariaDB官方文档参见:https://mariadb.com/kb/zh-cn/installing-mariadb-with-yum/

全部删除MySQL/MariaDBMySQL 已经不再包含在 CentOS 7 的源中,而改用了 MariaDB;

 1.使用rpm -qa | grep mariadb搜索 MariaDB 现有的包: 
如果存在,使用rpm -e --nodeps mariadb-*全部删除:
[root@localhost ~]# rpm -qa | grep mariadb
[root@localhost ~]# rpm -e mysql-*

2.使用rpm -qa | grep mariadb搜索 MariaDB 现有的包:
如果存在,使用yum remove mysql mysql-server mysql-libs compat-mysql51全部删除;
[root@localhost ~]# yum remove mysql mysql-server mysql-libs compat-mysql51

3.开始新的安装, 创建MariaDB.repo文件
vi /etc/yum.repos.d/MariaDB.repo
插入以下内容:
# MariaDB 10.2.4 CentOS repository list - created 2017-05-05 16:13 UTC
# http://downloads.mariadb.org/mariadb/repositories/
[mariadb]
name = MariaDB
baseurl = http://yum.mariadb.org/10.2.4/centos7-amd64
gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB
gpgcheck=1

4.运行安装命令安装MariaDB
[root@localhost ~]# yum -y install MariaDB-server MariaDB-client

5. 安装成功之后启动MariaDB服务。
systemctl start mariadb #启动服务 systemctl enable mariadb #设置开机启动 systemctl restart mariadb #重新启动 systemctl stop mariadb.service #停止MariaDB

6. 进行MariaDB的相关简单配置,使用mysql_secure_installation命令进行配置。

7.配置MariaDB的字符集
  查看/etc/my.cnf文件内容,其中包含一句!includedir /etc/my.cnf.d 说明在该配置文件中引入/etc/my.cnf.d 目录下的配置文件。
  
1)使用vi server.cnf命令编辑server.cnf文件,在[mysqld]标签下添加
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
如果/etc/my.cnf.d 目录下无server.cnf文件,则直接在/etc/my.cnf文件的[mysqld]标签下添加以上内容。
2)文件/etc/my.cnf.d/client.cnf
vi /etc/my.cnf.d/client.cnf
在[client]中添加
default-character-set=utf8
3)文件/etc/my.cnf.d/mysql-clients.cnf
vi /etc/my.cnf.d/mysql-clients.cnf
在[mysql]中添加
default-character-set=utf8
 全部配置完成,重启mariadb
systemctl restart mariadb
之后进入MariaDB查看字符集
mysql> show variables like "%character%";show variables like "%collation%";
授予权限并且可以授权
mysql>grant all privileges on *.* to username@'hostname' identified by 'password' with grant option;

2. 环境准备 – php

1、由于linux的yum源不存在php7.x,所以我们要更改yum源:
rpm -Uvh https://dl.fedoraproject.org/pub/epel/epel-release-latest-7.noarch.rpm
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
 2、yum查询安装php71w
yum search php71w
3、yum 安装php71w和各种拓展,选自己需要的即可。
yum install php71w php71w-cli php71w-common php71w-devel php71w-embedded php71w-fpm php71w-gd php71w-mbstring php71w-mysqlnd php71w-opcache php71w-pdo php71w-xml

php -v //就可以看到PHP版本信息了。
4. 修改配置文件
编辑PHP的配置文件,/etc/php.ini,注意去掉分号注释
vim /etc/php.ini
  将 ;cgi.fix_pathinfo=1 改为 cgi.fix_pathinfo=0
编辑PHP-FPM配置文件
vim /etc/php-fpm.d/www.conf
  将
  user = nobody
  group = nobody   
 改为
  user = nginx
  group = nginx
 前提是已经创建了nginx用户和nginx组。如果没有创建方法:
groupadd -r nginx
useradd -r -g nginx nginx
5、启动PHP—FPM
systemctl start php-fpm
6、设置开机启动
systemctl enable php-fpm
7,确保Nginx配置文件修该之后,重启Nginx
systemctl restart nginx
8、在/usr/share/nginx/html/目录下创建info.php
    内容如下:
   <?php phpinfo();?>
然后在浏览器访问这个文件, 看看是否成功

3. 环境准备 – nginx

安装nginx
yum install nginx
修改nginx 配置
vim /etc/nginx/nginx.conf
去掉默认的server配置
在/etc/ngnix/conf.d/下,新增一个配置文件wordpress.conf
内容为:

server {
listen 80 default;
server_name blog.javastone.net blog.caul.com.cn;
index index.php index.html index.htm index.jsp;
root /usr/local/wordpress;
error_page 404 /404.html; location = /40x.html { }
  error_page 500 502 503 504 /50x.html; location = /50x.html { }
  location ~ \.php$ {
  try_files $uri =404;
  fastcgi_pass 127.0.0.1:9000;
  fastcgi_index index.php;
  fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
  include fastcgi_params; 
  }
  location / {
  index index.php;
  }
  access_log /data/logs/nginx/blog.log;
}

4. 部署

参考官方文档, 主要是修改配置文件wp-config.php

/** WordPress数据库的名称 */
define('DB_NAME', '数据库');
/** MySQL数据库用户名 */
define('DB_USER', '用户');
/** MySQL数据库密码 */
define('DB_PASSWORD', '密码');
/** MySQL主机 */
define('DB_HOST', '主机IP');

去https://api.wordpress.org/secret-key/1.1/salt/ 拿到一个key,
替换define中的AUTH_KEY等信息
define('AUTH_KEY', '');
define('SECURE_AUTH_KEY', '');
define('LOGGED_IN_KEY', '');
define('NONCE_KEY', '\');
define('AUTH_SALT', '');
define('SECURE_AUTH_SALT', '');
define('LOGGED_IN_SALT', '');
define('NONCE_SALT', '');*/
define('AUTH_KEY', '');
define('SECURE_AUTH_KEY', '');
define('LOGGED_IN_KEY', '');
define('NONCE_KEY', '\');
define('AUTH_SALT', '');
define('SECURE_AUTH_SALT', '');
define('LOGGED_IN_SALT', '');
define('NONCE_SALT', '');

Jenkins+Maven+Git+Tomcat快速搭建持续集成环境

[转]Jenkins+Maven+Git+Tomcat快速搭建持续集成环境

下载安装及注意事项

这里选择war包,下载后直接放到tomcat或者jetty里,启动服务即可。

  • 在浏览器中输入http://localhost:[你的端口号]/jenkins,就打开jenkins首页了

第一次打开会提示输入初始密码(用户名为admin),页面上有提示,跟着提示找到文件打开复制密码,输入即可

Jenkins initial setup is required. An admin user has been created and a password generated.
Please use the following password to proceed to installation:

cdb925243ad74b3ca566fd2d248090d8

This may also be found at: C:\Users\A\.jenkins\secrets\initialAdminPassword

进去之后记得改密码,如果忘记改了,下次进入时还需要输入密码,还是去一开始提示的地址找到密码文件,打开复制到password文本框即可

  • 修改密码步骤 点击用户 —— admin —— 设置 —— 密码 —— 修改后save

网上资料:
说jenkins把网上的协议由http改为了https,但代码里没有改,所以需要手动去修改一下,步骤如下:
修改http为https
系统管理 —— 管理插件 —— 高级标签 —— 下面有个“升级站点” 把里面的URL中的 http改为https即可 —— 点击提交

安装插件

系统管理 —— 管理插件 —— 可选插件, 在右上角有个“过滤”的搜索框,输入maven,找到Maven Integration plugin 因网络的原因,加载速度不一(小技巧,过滤会很卡,有可能把页面卡死,可以用ctrl+F搜索定位)

勾选后,点击下面的直接安装按钮,接下来等待即可。

http://ww3.sinaimg.cn/mw690/b11e11f9jw1f81h4u9tj3j20dk0a2gmr.jpg

安装完成后可以在已安装的标签里查看。

此外还需要安装的插件:

  • Maven插件 Maven Integration plugin
  • 发布插件 Deploy to container Plugin
  • git插件 Git plugin
  • svn插件 Subversion Plug-in

非必须安装插件:

  • 发送邮件插件 Email Extension Plugin

网上资料: jenkins+maven+svn实现简单的一键发布 – pein_zero的专栏 – 博客频道 – CSDN.NET

网友发现上面安装可能会失败,

看错误提示信息可以发现

大致的意思就是,文件的签名验证不正确,不管它,注意看这个红色的路径。找到这个文件,打开它

把这个路径复制下来,放到浏览器,就可以把这个插件下载下来。在本地建一个jenkins的关于maven插件的目录,把跟maven相关的插件都放到这个目录下

其它几个插件也一一找到对应的文件,找到url,下载, 然后手动上传插件。上传插件的在:系统管理——管理插件——高级,你可以看到上传插件的地方

注意,上传的顺序,要跟报错的顺序一样,因为这些插件都是有依赖的先后顺序的。 不过即使顺序错了也没关系,系统会提示你的:

插件离线下载地址

插件安装完成后,就可以构建项目了。

配置环境

系统管理 —— Global Tool Configuration —— 配置JDK、Git、Maven

  • Maven Configuration
    两个都下拉选择Settings file in filesystem,然后在下面的File Path里填写:
    D:\apache-maven-3.2.3\conf\settings.xml ,如图
  • JDK
    填写别名:JDK
    自动安装前的勾选去掉,在出现的JAVA_HOME里输入:D:\Program Files\Java\jdk1.7.0_45
  • Git
    Path to Git executable输入:D:\Program Files\Git\bin\git.exe
    如果不用git,可以点击Delete Git,即可
  • Maven
    填写别名:maven
    去掉“自动安装”勾选框, 在MAVEN_HOME输入:D:\apache-maven-3.2.3

最后点击save按钮保存。

构建集成配置

新建 —— Enter an item name 输入一个名字, 选择构建一个maven项目, 点击OK,如图:

接下来到了配置页面,

  • 勾选丢弃旧的构建,并填写保持构建的天数和最大个数

  • 源码管理,这里选择了 Git

Repository URL里填写git仓库地址: /e/git_repo/demo/.git
这里我采用了本地仓库,可根据实际情况填写url地址,如:https://github.com/alibaba/druid.git
使用网络仓库需要添加Git证书Credentials,其原理与git免密码登录是一样的,都是基于SSH形式的,这里不再细说,请自行搜索资料。
接下来是选择一个分支Branch,默认就是*/master,可以根据你的项目实际配置修改。

用Svn作为源码库,其操作基本一样,输入svn地址,用户名,密码即可

  • 构建触发器

网上资料:

build whenever a snapshot dependency is built 当job依赖的快照版本被build时,执行本job。
Build after other projects are built:在其他项目构建完成后再进行构建。

这里又分三种情况:
1. Trigger only if build is stable:其他项目构建成功
2. Trigger even if the build is unstable:其他项目不稳定
3. Trigger even if the build fails:其他项目构建失败

Build periodically 隔一段时间build一次,不管版本库代码是否发生变化,通常不会采用此种方式。例如: 0 2 * * * (每天2:00 必须build一次源码)
Poll SCM:隔一段时间比较一次源代码如果发生变更,那么就build。否则,不进行build,通常采用这种方式;
定时检查源码变更(根据SCM软件的版本号),如果有更新就checkout最新code下来,然后执行构建动作。配置如下: */5 * * * * (每5分钟检查一次源码变化,如果有更新才build)

在 Schedule中填入* * * * *,代表一分钟监听一次
第一个参数代表的是分钟 minute,取值 0~59;
第二个参数代表的是小时 hour,取值 0~23;
第三个参数代表的是天 day,取值 1~31;
第四个参数代表的是月 month,取值 1~12;
最后一个参数代表的是星期 week,取值 0~7,0 和 7 都是表示星期天。
所以 0 * * * * 表示的就是每个小时的第 0 分钟执行一次构建。

  • Build

Root POM默认填写了pom.xml,这里不用修改,
Goals and options 里填写 clean package, 如图:

  • 构建后操作 (tomcat需要添加管理账户)

网上资料:
在tomcat中配置用户权限,即添加管理员帐号

在tomcat的安装目录中,修改conf/tomcat-user.xml配置文件,在节点里添加下面的代码,用户名和密码可自定义


点击增加构建后操作步骤下拉选择:Deploy war/ear to a Container ,多出一个发布选项

  1. WAR/EAR files 是war包的相对路径, 这里填写: target/*.war
  2. Context path是tomcat的发布路径,例如:填写了myDemo , 则访问地址为:http://localhost:8080/myDemo
  3. Containers 发布到的容器,主要可发布到tomcat、jboss、GlassFish
    下拉选择 tomcat7.x

Manager user name 填写上面自定义的用户名
Manager password 填写上面自定义的密码
Tomcat URL 中tomcat的访问地址 http://localhost:8689
(有网友说端口号后面不要加/

  1. deploy on failure:发生错误的时候是否发布到tomcat
    如图:

最后点击 保存 即可。

立即构建

在首页点击项目中最后一列的图标,立即构建项目,或者在项目里的左侧菜单点击立即构建(Build Now),即可实现了持续集成。

查看日志输出或构建错误信息

点击工程的构建版本号 #1 ,在左侧菜单选择Console Output,就可以查看控制台输出
最下面要出现Finished: SUCCESS才说明成功,(我有一次没有把test里的单元测试代码删除掉,导致一直失败)

其它注意事项

  1. 修改jenkins的工作空间

    默认情况下,jenkins的工作空间会放到C:\Users[用户名].jenkins目录下,
    如过想要更改工作空间,我们需要在系统环境变量里面配置JENKINS_HOME变量,将该变量指向目标工作空间。
    例如:JENKINS_HOME=Z:\jenkins_home
    这里需要注意的是,tomcat启动情况下,jenkins不会去读JENKINS_HOME变量,必须要重启tomcat。
    而重启tomcat也是有坑的,如果tomcat是通过命令行执行tomcat/bin/startup.bat目录启动的,那么单单停掉tomcat没用,
    必须要将前面提到的命令行一并关闭掉,这时重启tomcat,jenkins才会使用JENKINS_HOME中配置的目录作为工作空间。
    此外,一旦更换工作空间,此前过于jenkins的所有配置都将作废。

  2. 发布容器中,Add Container选项中虽然知道tomcat7.x,但实际上,你选择用tomcat8.x依然支持,没有问题
  3. 如何获取构建脚本里的日志输出信息

资料:
解决方法是使用jenkins的Log Parser插件,同使用Git Plugin一样,在插件管理中找 Log Parser插件,并添加。添加完毕后,配置jenkins中的Console Output Parsing

rule的具体规则语法可以使用正则表达式,具体可以参考Log Parser插件的文档http://my.oschina.net/donhui/blog/382592

Parsing Rules File的配置同上文的配置工作目录具有一样的坑,如果要更新规则,首先要清除job中选中的规则,然后删除此处配置的Parseing Rule,重启tomcat。

添加完毕后,在job的配置页的 Post-Build Actions部分选中Console Output parsing

然后进行如下配置:

这样我们可以对buld.bat中的error进行捕获,并且在某次构建过程的Parsed Console Output中进行查看

  1. jenkins多次deploy到tomcat导致内存溢出的问题

当短时间内多次对一个项目进行构建操作时,tomcat会出现内存溢出的错误,java.lang.OutOfMemoryError: PermGen space

解决方法:

在tomcat安装目录下,打开bin文件夹,window环境修改catalina.bat文件,在文件最前面(注释的结尾)添加下面的代码:

set JAVA_OPTS=-Xms512m -Xmx512m

Linux环境修改catalina.sh,在文件开头(cygwin=false的上面)添加下面的代码:(注意没有set,还有添加了双引号")

JAVA_OPTS="-Xms512m -Xmx512m"  

其中,-Xms设置初始化内存大小,-Xmx设置可以使用的最大内存。

注意: 该方式只能用startup.bat启动tomcat才可以设置生效,如果是用windows的系统服务启动tomcat服务,上面的设置就不生效了。

建议: 目前没有更好的办法解决这个问题,所以减少构建频率为最佳的办法

资料:

错误提示:java.lang.OutOfMemoryError: PermGen space 永久保存内存不足

set JAVA_OPTS=-Xms64m -Xmx256m -XX:PermSize=128M -XX:MaxNewSize=256m -XX:MaxPermSize=256m

错误提示:java.lang.OutOfMemoryError: Java heap space 堆空间内存不足

JVM堆的设置是指java程序运行过程中JVM可以调配使用的内存空间的设置。
JVM在启动的时候会自动设置Heap size的值,其初始空间(即-Xms)是物理内存的1/64,最大空间(-Xmx)是物理内存的1/4。
建议:将-Xms和-Xmx选项设置为相同,而-Xmn为1/4的-Xmx值
当然可根据实际情况进行具体调整。