标签归档:maven

使用jenkins job的触发远程构建需要登录或403错误的解决办法

在job的配置中,可以配置“触发远程构建”。配置之后,可以通过访问jenkins对外开放的一条特定url来触发job进行系统构建。对于想在git或svn提交后就进行构建的,是一个十分实用的功能。

触发远程构建配置

但是,如果在jenkins中配置了权限限制,则在一个没有登录jenkins或使用例如curl网络命令去访问这个url时,会提示登录或返回403错误。

要解决这个问题,就需要对匿名用户的权限进行配置了。

经测试,对匿名用户权限进行如下配置后,即可在没有登录的情况下触发远程构建了。

匿名用户权限配置
对于匿名用户,job下的read和build都需要勾选。

2017年05月26日更新

匿名用户权限配置
匿名用户权限中,不需要勾选build也能进行触发远程构建,如果勾选了build,匿名用户查看view时,可以点击构建按钮对项目进行构建,这样就不安全了。

记一次使用高版本jdk接口被坑的经历

最近在一个项目中,使用了一个jdk1.8才有支持的方法:List.sort,开发的时候没有发现注释那写着“since 1.8”,然后打包,发布了。而线上的环境用的是1.7!!!所以在线上访问含有用到这个高版本接口的逻辑的api时,就报500错误了。
我的开发工具是eclipse,本机的jdk版本是1.8,项目是用maven打包的,并且打包时jdk版本设置为1.6。
后来经过研究,发现以下3种情况:

  • 在preference->java->install jres中,将Java se 7选中的话,代码直接报错了。应该是直接改变了整个工作空间的运行环境版本,所以有正确的检验。
    WechatIMG27
  • 如果不改installed jres,而是将server中的运行环境,则会在运行时报error(是error,不是异常)。 通过这样,就可以在本地测试时发现问题了。
    WechatIMG47
    WechatIMG48

  • 改项目的编译版本不起作用,还不知道为什么。

所以后面做项目,看来不仅要将编译等级改成和线上的一致,同时还要将installed jres中改成相同的版本或在server使用的运行环境中设置

maven nexus+nginx配置

由于项目中需要用到第三方的推送sdk,而这些sdk都是只提供jar包下载,而我们的项目中是使用maven进行jar包管理。所以只能在自己的服务器上搭建一个maven私服,将这些第三方sdk放到这个maven私服里面进行管理了。

在网上搜了一圈,发现最简单的搭建方法就是使用nexus(不是谷歌亲儿子nexus哦)这个软件进行搭建了。

Nexus官网:http://www.sonatype.org/nexus/

在linux上安装nexus也比较简单,在百度上一搜一大把。以下的步骤引用自:http://blog.163.com/sz2273_pr/blog/static/4126429620135811573231/

nexus安装步骤开始
 1, Nexus 下载

Nexus 官方下载, 最新版下载: nexus-2.4.0-09-bundle.tar.gz

Nexus war下载: nexus-2.4.0-09.war

nexus有两种安装实现方式,一种是war包的方式,将它直接放在例如tomcat下就可以启用的,还有一种源码的方式,做为一个运维还是喜欢源码方式的说哈。开始吧。。。

2, Nexus 安装

解压tar.gz文件:

#cd /home/tools

#tar zxvf nexus-2.4.0-09-bundle.tar.gz

移动目录

#mv nexus-2.4.0-09 /usr/local/nexus

3, Nexus 启动

nexus启动是在bin目录下,首先看一下启动/关闭/重启等命令, 输入命令:

#cd /usr/local/nexus/bin

#./nexus

出现如下选项:

[root@test01 bin]# ./nexus

Usage: ./nexus { console | start | stop | restart | status | dump }

启动nexus:

./nexus  start

关闭nexus:

./nexus  stop

4, Nexus 验证

启动nexus后,在本机浏览器输入地址: http://localhost:8081/nexus

出现上述页面,说明配置nexus成功!

点击右上角“Log in”, 输入用户名和密码(默认用户名:admin      密码: admin123)登录

5.设置

1.点击左侧 Repositories将所有Type 是 proxy 的 configuration配置选项中的 Download Remote Index 配置改为 True

如果需要代理将配置最下面的Override Http Proxy Setting 勾上并填写代理服务器地址和端口,最后保存设置

2.然后在列表中分别右键点击 ReIndex

3、添加自己的jar到nexus

选中 3rd party , Artifact Upload 标签

GAV Definition 选择GAV Parameters

填写 Group Artifact version packaging

然后选择jar包 上传提交即可。

nexus安装步骤结束

另外:在解压出来的nexus目录中,{nexus}/conf/ 下有个名为nexus.properties配置文件,在这里可以配置nexus的端口,仓库的文件的路径等等

其中有一项nexus-webapp-context-path=/nexus的配置,这是指定url中ip:port/XXX中的XXX的,所以如果配置成/nexus的话,你要访问nexus,则要输入ip:port/nexus。

如果要配合nginx使用,则这一项要改成nexus-webapp-context-path=/,即配制成使用ip:port就能访问到nexus。

然后就是配置,nginx了。

我的配置如下:

server {
listen 80;
server_name nexus.kainaodong.com;
location / {
expires -1;
index /;
proxy_pass http://127.0.0.1:9001;
}
include /alidata/server/nginx/conf/rewrite/default.conf;
access_log /alidata/log/nginx/access/default.log;
}

proxy_pass就是配置将对nexus.kainaodong.com子域名的访问转到http://127.0.0.1:9001,也即是我的服务器的nexus上。

一开始,我的nexus的nexus-webapp-context-path这一下没有配置成“/”,而是将nginx的proxy_pass配置成http://127.0.0.1:9001/nexus,这样虽然能访问到nexus,但是里面的仓库内容时访问不到的,也不能进行登录。

然后试着在nexus的server配置中,将base url强制为子域名,这时仓库的内容可以访问了,但是还是登录不了。

 

 

 

QQ截图20150606204706

 

最后在网上又搜了一圈,发现nexus的nexus-webapp-context-path这个属性是可以配置访问路径,所以直接将它改为”/”,nginx中的proxy_pass配置成http://127.0.0.1:9001。

这样,nexus终于能使用子域名来访问了。

 

 

git+maven+tomcatの一个骚年的发布历程

    好吧,你做了个服务,用git当代码库,maven进行编译打包,tomcat做为容器,嗯,这是常见的屌丝套餐。然后,你要发布了,最简单的方式当然是写个发布脚本啦,脑海中浮现出这样的思路:

    1. 清理掉旧代码。

    2. 从git上下载新代码到服务器。

    3. 用maven进行编译,打包。(maven妥妥的为你准备了一堆插件)

    4. 重启tomcat。

    哇塞,好像一切都挺简单的,开搞吧。

    首先,你用rm清理掉旧代码。尼玛,普通用户没有权限!这怎么行,果断修改待清理的文件夹的权限。但你内心隐隐感觉不太对,是的,骚年,权限问题会面将一直伴随着你。(到此,你是否在考虑用sudo权限来执行脚本了,呵呵,先继续往下看吧)

    该是下载代码了:git clone -b ${version} ssh://”$user”@host:port/project.git。哇咔咔,这一步so easy,什么意外都没发生。

    接下来,是重头戏了,编译和打包。首先,进到你的父maven工程里,运行mvn install -Dmaven.test.skip=true。卧槽,又是没有权限。这时候,你又想到了sudo,于是,你小心翼翼地在终端加上sudo试了一下。哗啦啦,拉下一片日志,编译成功,哇哈哈,偶是甜菜!然后你兴高采烈地将脚本里的命令改为sudo mvn install -Dmaven.test.skip=true,运行脚本,呵呵,你傻眼了。

    sudo: mvn: command not found

    唉,忽然感觉心好累。百度啊~google啊~,你试了一圈,没错,不管用,不要问我这是为嘛,我滴故乡在远方。好吧,你改回用普通用户执行脚本,不用sudo了,接着把maven的本地仓库权限也改了。终于,install成功了。

    人生还得继续,你进入待发布成war包的工程下,执行mvn tomcat:redeploy(首次发布使用mvn tomcat:deploy。另外,网上会告诉你mvn tomcat7:deploy,这个不知是否只适用于tomcat7,偶们用的是tomcat8)

    呼~你常常吐出一口气,总算大体完成了,重启tomcat(这个命令太简单,偶不想说),进入tomcat服务URL下的/manager/,看到,瓦伊!服务怎么没起来。

    各种猜测纷至沓来了,tomcat的服务的密码权限没配置好?tomcat8无法使用maven插件来发布?打包没打好?

    骚年于是到处查查看看,什么问题都木有发现。

    不对啊,我应该看tomcat启动日志才对哦(默认在tomcat安装目录的/logs/catalina.out ),呵呵,偶是sb,数据库没连上,没在hosts中配置数据库URL对应的ip。

   改之,重启,OK。

   这件事,告诉我们,日志是多!么!重!要!啊!

    欧拉,碎觉!

    【附录】

    发布成war包的pom.xml

<build>
<finalName>projectName</finalName>
<sourceDirectory>src/main/java</sourceDirectory>
<testSourceDirectory>src/test/java</testSourceDirectory>
<testResources>
<testResource>
<directory>src/test/resources</directory>
</testResource>
</testResources>
<pluginManagement>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<encoding>UTF-8</encoding>
<source>1.6</source>
<target>1.6</target>
<meminitial>128m</meminitial>
<maxmem>512m</maxmem>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-resources-plugin</artifactId>
<configuration>
<encoding>UTF-8</encoding>
</configuration>
</plugin>
<plugin>
<artifactId>maven-war-plugin</artifactId>
<version>2.2</version>
<configuration>
<warSourceExcludes>
/test/
</warSourceExcludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.tomcat.maven</groupId>
<artifactId>tomcat7-maven-plugin</artifactId>
<version>2.2</version>
<configuration>
<url>http://host/:port/manager</url>
<!– server、username、password对应maven的setting下的配置 –>
<server>test</server>
<username>test</username>
<password>test</password>
<path>/</path>
<!– war文件路径缺省情况下指向target –>
<!–<warFile>${basedir}/target/${project.build.finalName}.war</warFile> –>
</configuration>
</plugin>
</plugins>

</pluginManagement>
</build>