构建Jenkins自动化编译管理环境
今天研究了一下Jenkins,有了一个粗浅的认识,顺手把构建的过程说一下,后续慢慢补充:
(1)Secure CRT 连接到Linux服务器
要注意的一点是,要搞好一个文件传输的路子,否则不好传东西。这里用Linux 命令sz(从服务器下载)和rz(上传到服务器)可以实现,但是需要手动安装一下:
sudo yum install lrzsz -y
当然了,如果不是RHEL也可以用别的命令安装,或者直接下载lrzsz压缩包来编译安装。
使用这个终端连接服务器的时候,默认可能是Delete键删除,而不是Backspace,可以配置一下:
在“Emulation” 中选择“Linux”,然后这里的“Other mappings” 里的两个钩都选上。
(2.1)安装JDK和Tomcat
虚拟服务器是RHEL,已经安装了一个默认的OpenJDK,我对这个OpenJDK印象不好,决定安装一个Oracle JDK1.8,并且指定到这个版本上。
JDK下载链接:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Tomcat下载链接:http://tomcat.apache.org/download-80.cgi
#mv jdk1..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..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 (build 1.8.0_131-b11)
Java HotSpot(TM) -Bit Server VM (build 25.131-b11, mixed mode)
(2.2)安装其他编译工具
Gradle:官网下载Gradle安装包
Ant:Ant官网下载压缩包
(2.3)安装Android SDK
这里需要强调一个点,通过Android Studio安装的Android SDK都是新版的,最新版的Android SDK中把Ant工具干掉了,这样的话有的工程编译依赖于SDK中的tools/ant就会找不到了。我们只好自己在Linux环境或者MacOSS上手动安装Android SDK。
这里写一个MacOSX上靠谱的安装方法:
<1>下载地址:http://down.tech.sina.com.cn/page/45703.html 或者 http://mac.softpedia.com/get/Developer-Tools/Google-Android-SDK.shtml
<2>解压后进入tools目录,输入命令:./android sdk 请出SDK Manager的图形界面。
<3>选择需要的SDK版本和Tools等。
(3)启动与停止Tomcat
[root@IDD-Jenkins-Redmine-jenkins-online001-bjdx tomcat]# cd $CATALINA_HOME/bin
[root@IDD-Jenkins-Redmine-jenkins-online001-bjdx bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/tomcat
Using CATALINA_HOME: /usr/local/tomcat
Using CATALINA_TMPDIR: /usr/local/tomcat/temp
Using JRE_HOME: /usr/local/jdk1..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 PID file found during start.
[root@IDD-Jenkins-Redmine-jenkins-online001-bjdx bin]# ps -ef|grep java
root 1 99 05:49 ? 00:57:41 /data/usr/local/jdk1.8.0_131/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djdk.tls.ephemeralDHKeySize=2048 -Djava.protocol.handler.pkgs=org.apache.catalina.webresources -classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
root 5122 4466 0 06:08 pts/0 00:00:00 grep java
[root@IDD-Jenkins-Redmine-jenkins-online001-bjdx bin]# kill -9 1215 // 强行终止Tomcat
(4)安装Jenkins
链接地址:https://jenkins.io/download/
下载.war包就行了,拷贝到Tomcat中的webapps目录中:
#cp jenkins.war $CATALINA_HOME/webapps
(5)访问Jenkins
默认访问链接:localhost:8080/jenkins
(6)配置Jenkins
虽然我目前还不熟练,但是我简单测试了下,我觉得最重要的使用方法就是在:“新建” --> “构建一个自由风格的软件项目”,这其中最重要的就是:
<a> 构建触发器:告诉什么情况下,或者什么周期来进行编译工作
<b> 构建:可以执行Linux/Windows shell脚本文件
<c> 构建后操作:可以发邮件等等
(7)配置Jenkins用户权限
我看网上很多都是配置矩阵权限策略,我找了半天没找到,也没搜索到原因。我在插件中心找到了一个名为“Matrix Authorization Strategy Plugin”的插件,安装上之后果然就有了。
如果因为权限配置搞错了导致管理员无法登陆的话,参考这个页面:Jenkins遇到问题一:jenkins配置权限不对导致无法登陆或者空白页面解决办法
注意,“匿名用户”不要赋予任何Read权限,否则会出现未登录的情况下读取到了用户列表,进而引起弱口令攻击。
权限的含义表:
(8)设置Jenkins邮件发送
Jenkins自带的“邮件通知”功能在 “系统管理” --> “系统设置” 里面,是还是比较简单的,也好用。但是功能不够丰富,一般想要自定义邮件内容的话,就需要利用 “Email Extension Plugin” 插件。
参考这个Blog:Jenkins学习四:Jenkins 邮件配置
这里要点击高级选项,配置上用户名和密码,用户名不要带邮箱后缀。
(9)文件压缩
7z压缩格式拥有众多优点,具有极高的压缩比率,如果你还不了解,请看文章:7z格式、LZMA压缩算法和7-Zip详细介绍。
在Redhat系列服务器上可以用命令安装:yum install p7zip
压缩命令的例子:7za a -r $COMPRESS_FILE_NAME $TEMP_FOLDER_1/* $TEMP_FOLDER_2/*
(10)关于服务器时区
在用date命令获取Linux服务器时间时发现,服务器时间总是格林威治时间而不是当地时间。我查了好多方法都没搞定,最后发现直接修改时区偏移是有效的:
[root!~]# vi ~/.bash_profile 在文件内增加一句:export TZ='CST-8' [root!~]# date -R
Sat, Jun :: + // 这里+08时区就是对的!
(11)关于中文乱码
用Jenkins发邮件的时候,发现读取了本地文件内容中的中文都是乱码,找了半天原因也没找到,但是我搜索到的思路就是说Jenkins显示的是JVM的编码,跟文件内容的编码不匹配。看Jenkins中“系统管理”->“系统信息”中,显示的文件编码也是ANSI之类的,也不知道怎么改,看了下文本文件的编码,确实也不是UTF-8的。
修改Jenkins界面中显示的编码方法:试了添加LOCALE、LANG、JAVA_TOOL_OPTIONS等等(Jenkins)环境变量都不管用。后来才发现原来是TOMCAT启动时需要添加一个参数:-Dfile.encoding=UTF-,可以写到环境变量设置文件里面:
接下来要把文件编码也改成一样的UTF-8(无BOM),这样就没问题了。
发版邮件模板中可以读取服务器上的文件内容:
(12)关于Windows平台下命令行编译
在Windows平台下的自动化编译其实比较简单,用微软的VisualStudio自动化编译工具MsBuild就可以了,安装了.Net framework之后就有了,默认安装路径为:C:\Windows\Microsoft.NET\Framework\v4.0.30319
其实我看了下,如果安装了多个版本的.NET ,每一个目录下都有MsBuild的,用最新版的就好了吧。如果打开VisualStudio Tools的“命令提示”,也是最新版的排在前面。
输入:MsBuild /?
可以看到详细的参数说明,还有一个编译的例子: MSBuild MyApp.sln /t:Rebuild /p:Configuration=Release
(13)链接Windows子节点
条件:
1、在Windows子节点上安装JDK,配置好JAVA_HOME;
2、下载jenkins.war,用下面的命令启动服务:
java -jar jenkins.war
3、访问localhost:8080,进行插件安装,系统设置,找到“Install as windows service”把Jenkins安装成Windows服务。
4、在Windows子节点上访问主机Jenkins,然后参考官方页面建立节点链接:https://wiki.jenkins-ci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines+on+Windows
5、可能“Launch method”中并没有推荐的“Launch slave agents via Java Web Start”,原因是“Configure Global Security”中的“TCP port for JNLP agents”被禁用了,选择“随机选取”并勾选“Java Web Start Agent Protocol/3”
6、在Windows子节点上按照文档中的方法操作即可,在弹出的Success对话框中选择“File”->“Install as Windows service”,这样才能方便使用,否则关闭对话框服务就停止了。
7、【坑】在Windows子节点上执行Bat脚本,里面使用git pull报错:提示没有SSH权限被服务器拒绝(直接在CMD是可以的)。这个问题是其他两个平台都没遇到的,花了好久找到原因是因为我安装的Jenkins都是以服务方式运行,不是以Administrator身份登录的,所以读取不到.ssh密钥文件。果然,在Windows服务里面找到Jenkins相关的两个,都设置为./Administrator身份登录就可以执行git pull之类的操作了。
(14)链接MacOSX子节点
MacOSX系统中自带了SSH,所以连接起来比较简单,参考这个就行了:
(15)MacOSX上Root用户没有修改关键目录的权限
一般来讲,类Unix系统中root用户是有最高权限的,不过MacOSX系统做了升级优化,限制了默认的root用户权限,还需要手动取消这个限制才行。
(16)FTP工具
这里用Linux上流行的vsftpd服务来支持,原来一直没搞清楚那个chroot_***配置的作用,这里有一篇文章解释的比较详细:vsftp配置文件详解,给我关键解惑的点是:
构建Jenkins自动化编译管理环境的更多相关文章
- 用Jenkins自动化搭建测试环境-前奏
用Jenkins自动化搭建测试环境-前奏 1.安装 参考及启动:https://www.cnblogs.com/Eric15/articles/9828062.html 2.插件 新手一般按推荐安装即 ...
- 在CentOS上构建.net自动化编译环境
我们知道在Windows上我们很容易构建于MSBuild的自动化编译环境,那么在CentOS也是可以的,主要是需要Mono. 在这儿我们选择Jenkins+Gitlab+Mono在C ...
- 用Jenkins自动化搭建测试环境
1-1 课程介绍 2-1 Jenkins安装 2-2 Jenkins插件 2-3 Jenkins基础设置 3-1 Linux系统准备 3-2 安装Java环境 3-3 安装并配置Git 3-4 安装并 ...
- Jenkins自动化搭建测试环境(二)
Fork项目 找到项目 单击Fork 这时,会发送一个邮件到你的git邮箱中,点击链接即可完成fork 这样,这个工程就已经fork到自己的git上了 然后就可以下载这个工程到本机了 这里我们需要使用 ...
- Jenkins自动化搭建测试环境(一)
Jenkins基础 首先上官网jenkins.io上下载最新的Jenkins war包 将下载完成的war包解压 java -jar jenkins.war 接下来使用浏览器访问localhost:8 ...
- grunt构建前端自动化的开发环境
废话不多说.直奔主题. 1.安装node. 别问为什么.如果你不知道,说了你还是不知道. 别问怎么安装,自己去百度. 2.安装grunt_CLI. 安装完node,并且安装成功了,后.下载grunt_ ...
- 利用crosstool-ng自动化编译交叉编译环境(转)
原文地址:http://www.bootc.net/archives/2012/05/26/how-to-build-a-cross-compiler-for-your-raspberry-pi/ A ...
- Docker——Jenkins + Git + Registry构建自动化持续集成环境(CI/CD)
前言 在互联网时代,对于每一家公司,软件开发和发布的重要性不言而喻,目前已经形成一套标准的流程,最重要的组成部分就是持续集成(CI)及持续部署.交付(CD). 本文基于Jenkins+Docker+G ...
- jenkins+git+maven搭建自动化部署项目环境
简介 折腾了两个晚上,趁着今晚比较有空,把jenkins+git+maven搭建自动化部署项目环境搭建的过程记录一下,这里我把github作为git的远程仓库(https://github.co ...
随机推荐
- JavaScript中的内置对象-8--4.date对象中-获取,设置日期时间的方法; 获取,设置年月日时分秒及星期的方法;
学习目标 1.掌握创建日期对象的方法 2.掌握date对象中获取日期时间的方法 3.掌握date对象中设置日期时间的方法 如何创建一个日期对象 语法:new Date(); 功能:创建一个日期时间对象 ...
- ORACLE RAC 11.2.0.4 CentOS release 6.9 静默安装1.0版本
RAC11.2.0.4静默安装 1.0版本,20180613 #本文档IP地址使用X隐藏,个人可按照自己的当前环境IP进行适当修改 1. 清除原环境中的单实例软件 #清除原环境: 删除/etc/ora ...
- ROC曲线和AUC值
链接:https://www.zhihu.com/question/39840928/answer/146205830来源:知乎 一.混淆矩阵 混淆矩阵如图1分别用”0“和”1“代表负样本和正样本.F ...
- urllib.request中Handler处理器
1.定义 自定义的urlopen()方法,urlopen()方法是一个特殊的opener(模块已定义好),不支持代理等功能,通过Handler处理器对象来自定义opener对象 2.常用方法 1.bu ...
- [LeetCode&Python] Problem 283. Move Zeroes
Given an array nums, write a function to move all 0's to the end of it while maintaining the relativ ...
- unity ugui Toggle Group详解(Chinar出品、简单易懂)
UGUI Toggle Group用法教程 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar ...
- Unity 3D调用Windows打开、保存窗口、文件浏览器
Unity调用Window窗口 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分 ...
- java实现各种排序算法
java实现各种排序算法 import java.util.Arrays; public class SomeSort { public static void main(String[] args) ...
- (13)自定意义标签和过滤器 (templatetags)
过滤器分内置和自定意义 PS:过滤器可以用在for循环和if判断后,但是标签不能使用在for循环和if判断后 内置过滤器: add(在模板中实现加减法) default(就是当传入的变量是False的 ...
- if else的使用以及如何从键盘获取数值
if-else的使用 顺序结构 顺序从上到下执行,中间没有判断和跳转 分支结构 根据条件,选择性地执行某段代码 有if-else和switch两种分支语句 循环结构 根据循环,重复性地执行某段代码 有 ...