热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

java自动化编译_构建Jenkins自动化编译管理环境

今天研究了一下Jenkins,有了一个粗浅的认识,顺手把构建的过程说一下,后续慢慢补充:(1)SecureCRT连接到Lin

今天研究了一下Jenkins,有了一个粗浅的认识,顺手把构建的过程说一下,后续慢慢补充:

(1)Secure CRT 连接到Linux服务器

要注意的一点是,要搞好一个文件传输的路子,否则不好传东西。这里用Linux 命令sz(从服务器下载)和rz(上传到服务器)可以实现,但是需要手动安装一下:

sudo yum install lrzsz -y

当然了,如果不是RHEL也可以用别的命令安装,或者直接下载lrzsz压缩包来编译安装。

使用这个终端连接服务器的时候,默认可能是Delete键删除,而不是Backspace,可以配置一下:

d3f9f075e1c06388088630ac3e220ca2.png

在“Emulation” 中选择“Linux”,然后这里的“Other mappings” 里的两个钩都选上。

(2.1)安装JDK和Tomcat

虚拟服务器是RHEL,已经安装了一个默认的OpenJDK,我对这个OpenJDK印象不好,决定安装一个Oracle JDK1.8,并且指定到这个版本上。

#mv jdk1.8.0_131 /usr/local        // 把解压后的压缩包移动到软件安装目录

#mv apache-tomcat-8.5.14 /usr/local

#ln -s /usr/local/apache-tomcat-8.5.14 /usr/local/tomcat    // 建立一个方便的快捷方式

vim /etc/profile 命令来配置环境变量,让所有用户都生效:

JAVA_HOME=/usr/local/jdk1.8.0_131

CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

PATH=$PATH:$JAVA_HOME/bin

CATALINA_HOME=/usr/local/tomcat

CATALINA_OPTS="-server -Xms528m -Xmx528m -XX:PermSize=256m -XX:MaxPermSize=358m"CATALINA_PID=$CATALINA_HOME/catalina.pid

export JAVA_HOME CLASSPATH PATH CATALINA_HOME CATALINA_OPTS CATALINA_PID

source /etc/profile 命令使设置生效,调用如下命令检查Java配置:

[root@IDD-Jenkins-Redmine-jenkins-online001-bjdx ~]# java -version

java version"1.8.0_131"Java(TM) SE Runtime Environment (build1.8.0_131-b11)

Java HotSpot(TM)64-Bit Server VM (build 25.131-b11, mixed mode)

(2.2)安装其他编译工具

b655d8a54827e5b0b8bd74c383cda752.png

(2.3)安装Android SDK

这里需要强调一个点,通过Android Studio安装的Android SDK都是新版的,最新版的Android SDK中把Ant工具干掉了,这样的话有的工程编译依赖于SDK中的tools/ant就会找不到了。我们只好自己在Linux环境或者MacOSS上手动安装Android SDK。

这里写一个MacOSX上靠谱的安装方法:

<2>解压后进入tools目录&#xff0c;输入命令&#xff1a;./android sdk   请出SDK Manager的图形界面。

<3>选择需要的SDK版本和Tools等。

(3)启动与停止Tomcat

[root&#64;IDD-Jenkins-Redmine-jenkins-online001-bjdx tomcat]# cd $CATALINA_HOME/bin

[root&#64;IDD-Jenkins-Redmine-jenkins-online001-bjdx bin]# ./startup.shUsing CATALINA_BASE:/usr/local/tomcat

Using CATALINA_HOME:/usr/local/tomcat

Using CATALINA_TMPDIR:/usr/local/tomcat/temp

Using JRE_HOME:/usr/local/jdk1.8.0_131

Using CLASSPATH:/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar

Using CATALINA_PID:/usr/local/tomcat/catalina.pid

Existing PIDfile found during start.

[root&#64;IDD-Jenkins-Redmine-jenkins-online001-bjdx bin]# ps -ef|grep java

root 1215 1 99 05:49 ? 00:57:41 /data/usr/local/jdk1.8.0_131/bin/java -Djava.util.logging.config.file&#61;/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager&#61;org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize&#61;2048 -Djava.protocol.handler.pkgs&#61;org.apache.catalina.webresources -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base&#61;/usr/local/tomcat -Dcatalina.home&#61;/usr/local/tomcat -Djava.io.tmpdir&#61;/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start

root 5122 4466 0 06:08 pts/0 00:00:00 grep java

[root&#64;IDD-Jenkins-Redmine-jenkins-online001-bjdx bin]# kill -9 1215     // 强行终止Tomcat

(4)安装Jenkins

下载.war包就行了&#xff0c;拷贝到Tomcat中的webapps目录中&#xff1a;

#cp jenkins.war $CATALINA_HOME/webapps

(5)访问Jenkins

(6)配置Jenkins

虽然我目前还不熟练&#xff0c;但是我简单测试了下&#xff0c;我觉得最重要的使用方法就是在&#xff1a;“新建” --> “构建一个自由风格的软件项目”&#xff0c;这其中最重要的就是&#xff1a;

构建触发器&#xff1a;告诉什么情况下&#xff0c;或者什么周期来进行编译工作

构建&#xff1a;可以执行Linux/Windows shell脚本文件

构建后操作&#xff1a;可以发邮件等等

(7)配置Jenkins用户权限

我看网上很多都是配置矩阵权限策略&#xff0c;我找了半天没找到&#xff0c;也没搜索到原因。我在插件中心找到了一个名为“Matrix Authorization Strategy Plugin”的插件&#xff0c;安装上之后果然就有了。

注意&#xff0c;“匿名用户”不要赋予任何Read权限&#xff0c;否则会出现未登录的情况下读取到了用户列表&#xff0c;进而引起弱口令攻击。

3db3baa9c1700c8a744378bea00c698a.png

权限的含义表&#xff1a;

a21d675c668171565cc3106133f941bb.png

(8)设置Jenkins邮件发送

Jenkins自带的“邮件通知”功能在 “系统管理” --> “系统设置” 里面&#xff0c;是还是比较简单的&#xff0c;也好用。但是功能不够丰富&#xff0c;一般想要自定义邮件内容的话&#xff0c;就需要利用 “Email Extension Plugin” 插件。

24178557c285706309607f4ea7602044.png

这里要点击高级选项&#xff0c;配置上用户名和密码&#xff0c;用户名不要带邮箱后缀。

(9)文件压缩

7z压缩格式拥有众多优点&#xff0c;具有极高的压缩比率&#xff0c;如果你还不了解&#xff0c;请看文章&#xff1a;7z格式、LZMA压缩算法和7-Zip详细介绍。

在Redhat系列服务器上可以用命令安装&#xff1a;yum install p7zip

压缩命令的例子&#xff1a;7za a -r $COMPRESS_FILE_NAME $TEMP_FOLDER_1/* $TEMP_FOLDER_2/*

(10)关于服务器时区

在用date命令获取Linux服务器时间时发现&#xff0c;服务器时间总是格林威治时间而不是当地时间。我查了好多方法都没搞定&#xff0c;最后发现直接修改时区偏移是有效的&#xff1a;

[root!~]# vi ~/.bash_profile

在文件内增加一句&#xff1a;export TZ&#61;&#39;CST-8&#39;[root!~]# date -R

Sat,10 Jun 2017 23:33:01 &#43;0800 //这里&#43;08时区就是对的&#xff01;

(11)关于中文乱码

用Jenkins发邮件的时候&#xff0c;发现读取了本地文件内容中的中文都是乱码&#xff0c;找了半天原因也没找到&#xff0c;但是我搜索到的思路就是说Jenkins显示的是JVM的编码&#xff0c;跟文件内容的编码不匹配。看Jenkins中“系统管理”->“系统信息”中&#xff0c;显示的文件编码也是ANSI之类的&#xff0c;也不知道怎么改&#xff0c;看了下文本文件的编码&#xff0c;确实也不是UTF-8的。

修改Jenkins界面中显示的编码方法&#xff1a;试了添加LOCALE、LANG、JAVA_TOOL_OPTIONS等等(Jenkins)环境变量都不管用。后来才发现原来是TOMCAT启动时需要添加一个参数&#xff1a;-Dfile.encoding&#61;UTF-8&#xff0c;可以写到环境变量设置文件里面&#xff1a;

998974f23899385bb5e4bba5aae8d584.png

接下来要把文件编码也改成一样的UTF-8(无BOM)&#xff0c;这样就没问题了。

64b9f15e0c3083f1bc5259f8ca2a8f84.png

发版邮件模板中可以读取服务器上的文件内容&#xff1a;

e9aef70e0da5e02022e9e5cbbcc97051.png

(12)关于Windows平台下命令行编译

在Windows平台下的自动化编译其实比较简单&#xff0c;用微软的VisualStudio自动化编译工具MsBuild就可以了&#xff0c;安装了.Net framework之后就有了&#xff0c;默认安装路径为&#xff1a;C:\Windows\Microsoft.NET\Framework\v4.0.30319

其实我看了下&#xff0c;如果安装了多个版本的.NET &#xff0c;每一个目录下都有MsBuild的&#xff0c;用最新版的就好了吧。如果打开VisualStudio Tools的“命令提示”&#xff0c;也是最新版的排在前面。

输入&#xff1a;MsBuild /?

可以看到详细的参数说明&#xff0c;还有一个编译的例子&#xff1a; MSBuild MyApp.sln /t:Rebuild /p:Configuration&#61;Release

(13)链接Windows子节点

条件&#xff1a;

1、在Windows子节点上安装JDK&#xff0c;配置好JAVA_HOME&#xff1b;

2、下载jenkins.war&#xff0c;用下面的命令启动服务&#xff1a;

java -jar jenkins.war

3、访问localhost:8080&#xff0c;进行插件安装&#xff0c;系统设置&#xff0c;找到“Install as windows service”把Jenkins安装成Windows服务。

5、可能“Launch method”中并没有推荐的“Launch slave agents via Java Web Start”&#xff0c;原因是“Configure Global Security”中的“TCP port for JNLP agents”被禁用了&#xff0c;选择“随机选取”并勾选“Java Web Start Agent Protocol/3”

6、在Windows子节点上按照文档中的方法操作即可&#xff0c;在弹出的Success对话框中选择“File”->“Install as Windows service”&#xff0c;这样才能方便使用&#xff0c;否则关闭对话框服务就停止了。

7、【坑】在Windows子节点上执行Bat脚本&#xff0c;里面使用git pull报错&#xff1a;提示没有SSH权限被服务器拒绝(直接在CMD是可以的)。这个问题是其他两个平台都没遇到的&#xff0c;花了好久找到原因是因为我安装的Jenkins都是以服务方式运行&#xff0c;不是以Administrator身份登录的&#xff0c;所以读取不到.ssh密钥文件。果然&#xff0c;在Windows服务里面找到Jenkins相关的两个&#xff0c;都设置为./Administrator身份登录就可以执行git pull之类的操作了。

ba78986ebfee276035e70c863bf8f01f.png

(14)链接MacOSX子节点

MacOSX系统中自带了SSH&#xff0c;所以连接起来比较简单&#xff0c;参考这个就行了&#xff1a;

b24461db0850328c115e61a7c6dcc0d4.png

(15)MacOSX上Root用户没有修改关键目录的权限

一般来讲&#xff0c;类Unix系统中root用户是有最高权限的&#xff0c;不过MacOSX系统做了升级优化&#xff0c;限制了默认的root用户权限&#xff0c;还需要手动取消这个限制才行。

(16)FTP工具

这里用Linux上流行的vsftpd服务来支持&#xff0c;原来一直没搞清楚那个chroot_***配置的作用&#xff0c;这里有一篇文章解释的比较详细&#xff1a;vsftp配置文件详解&#xff0c;给我关键解惑的点是&#xff1a;

在默认配置下&#xff0c;本地用户登入FTP后可以使用cd命令切换到其他目录&#xff0c;这样会对系统带来安全隐患。可以通过以下三条配置文件来控制用户切换目录。

chroot_list_enable&#61;YES/NO(NO)

设置是否启用chroot_list_file配置项指定的用户列表文件。默认值为NO。

chroot_list_file&#61;/etc/vsftpd.chroot_list

用于指定用户列表文件&#xff0c;该文件用于控制哪些用户可以切换到用户家目录的上级目录。

chroot_local_user&#61;YES/NO(NO)

用于指定用户列表文件中的用户是否允许切换到上级目录。默认值为NO。

通过搭配能实现以下几种效果&#xff1a;

①当chroot_list_enable&#61;YES&#xff0c;chroot_local_user&#61;YES时&#xff0c;在/etc/vsftpd.chroot_list文件中列出的用户&#xff0c;可以切换到其他目录&#xff1b;未在文件中列出的用户&#xff0c;不能切换到其他目录。

②当chroot_list_enable&#61;YES&#xff0c;chroot_local_user&#61;NO时&#xff0c;在/etc/vsftpd.chroot_list文件中列出的用户&#xff0c;不能切换到其他目录&#xff1b;未在文件中列出的用户&#xff0c;可以切换到其他目录。

③当chroot_list_enable&#61;NO&#xff0c;chroot_local_user&#61;YES时&#xff0c;所有的用户均不能切换到其他目录。

④当chroot_list_enable&#61;NO&#xff0c;chroot_local_user&#61;NO时&#xff0c;所有的用户均可以切换到其他目录。



推荐阅读
author-avatar
薇薇llfnc
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有