敏捷持续集成(Jenkins)
在前面已经完成git和gitlab的相关操作
1.持续集成的概念:
1. 什么是持续集成:
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。
2. 好处:
节省人力成本
加快软件开发进度
实时交付
3. 整体流程
成员通过git提交代码--》持续集成引擎来去代码并使用构建工具自动构建--》发布项目
4. 重要组成部分:
git : 版本管理
gitlab : 远程仓库
jenkins 持续集成引擎
maven 构建工具
sonarqube 代码质量管理
junit 自动执行单元测试
JDK
Tomcat
几个war--》微服务架构
2.jdk与maven的安装
1. 版本说明:
* jdk1.8(目前大部分公司内部使用的还是JDK8,大部分依赖java的工具或框架,对JDK8的支持度是最好的)
* maven3.5.3
2. 将下载好的jdk跟maven上传到服务器上(jdk的安装可以参考linux命令)
3. jdk的安装
解压jdk到/usr/local/
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /usr/local/
配置环境变量
vim /etc/profile
在最下面,按i进入insert模式,添加一下内容
JAVA_HOME=/usr/local/jdk1.8.0_91
export JAVA_HOME
CLASSPATH=.:$JAVA_HOME/lib
export CLASSPATH
PATH=$PATH:$JAVA_HOME/bin:$CLASSPATH
export PATH
按esc进入命令行模式,再按:wq保存退出
激活配置
source /etc/profile
5. maven的安装
解压: tar -zxvf apache-maven-3.5.3-bin.tar.gz -C /usr/local/
配置: vim /etc/profile
MAVEN_HOME=/usr/local/apache-maven-3.5.3
export MAVEN_HOME
PATH=$PATH:$MAVEN_HOME/bin
export PATH
按esc进入命令行模式,再按:wq保存退出
激活配置
source /etc/profile
3.nexus私服搭建
1. 上传到服务器
2. 解压:tar -zxvf nexus-3.12.1-01-unix.tar.gz -C /usr/local/
3. 修改配置文件(文件在安装目录的etc下):
vim /usr/local/nexus-3.12.1-01/etc/nexus-default.properties
修改对应的端口:默认是8081,没有使用的就可以不用修改
修改防火墙
vim /etc/sysconfig/iptables
-A INPUT -m state --state NEW -m tcp -p tcp --dport 8081 -ACCEPT
重启防火墙:
service iptables restart
4. 进入bin目录进行启动:
./nexus start (如果是root用户启动会有提示不建议使用root用户)
5. 关闭nexus服务:
ps aux | grep nexus
kill 进程号
6. 新建用户:
useradd nexus
chown -R nexus:nexus /usr/local/nexus-3.12.1-01 (自己的目录,解压出来有两个文件夹,两个文件夹的权限都要给该用户)
su nexus(如果出现bash-4.2$,就使用su root切换回root用户,使用cp -a /etc/skel/. /home/nexus之后再切换用户)
使用cd命令进入nexus的bin目录,使用./nexus start执行就好。
7. 通过 ps aux | grep nexus 可以查看nexus是否真正启动, 如果没有,可以使用 ./nexus run来查看没有启动的问题(错误信息)
8. 访问: 在本地使用 ip:8081 进行访问,如果可以正常访问,就安装成功(默认的账户是admin,密码是admin123),进行登录.
9. 使用root账户进入到bin目录下,修改上传的文件大小,使用 ulimit -a可以看到open file是1024,将他增加到65536,使用 vi /etc/security/limits.conf,在倒数第二行添加两行:
* soft nofile 65536
* hard nofile 65536
10. 修改nexus自启动: vi /etc/rc.d/rc.local,添加一行:
su - nexus -c '/usr/local/software/nexus/nexus-3.12.1-01/bin/nexus start'
11. 切换回nexus账户: su nexus,使用./nexus restart 重新启动
4. 私服的使用
1. 仓库的类型:
* proxy: 代理仓库,主要代理远程的仓库,私服和远程仓库之间的连接
* group: 仓库组,通常包含了多个代理仓库和宿主仓库,在项目中只要引入仓库组就可以下载到代理仓库和宿主仓库中的包
* hosted:宿主仓库,内部项目、付费jar
1. releases 发布内部release版本的仓库
2. snapshots 发布内部snapshots版本的仓库
3. third 自建第三方jar
2. 新建
* 点击设置,就是小齿轮那个标签
* 点击左侧导航的Repositories
* 点击create repository
* 选择 maven hosted,输入字段(maven-third),点击create完成
3. 配置本地的maven(家目录下的.m2,没找到,就去maven_home下的setting),修改maven的setting文件
* 在servers标签内配置远程私服的账号和密码:
<server>
<id>xdclass-releases</id>
<username>admin</username>
<password>admin123</password>
</server>
<server>
<id>xdclass-snapshots</id>
<username>admin</username>
<password>admin123</password>
</server>
* 在<profiles>中配置私有库和插件库的地址(地址指向私服的group地址):
<profile>
<id>xdclass</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<!-- 私有库地址-->
<repositories>
<repository>
<id>xdclass</id>
<url>http://192.168.88.128:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
<!--插件库地址-->
<pluginRepositories>
<pluginRepository>
<id>xdclass</id>
<url>http://192.168.88.128:8081/repository/maven-public/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
* 新加标签在setting结束标签之前加上下面代理,用来激活配置
<activeProfiles>
<activeProfile>xdclass</activeProfile>
</activeProfiles>
* 修改私服上的代理地址,将代理地址改为阿里云的:
http://maven.aliyun.com/nexus/content/groups/public
4. 上传本地项目到私服,在maven项目的pom.xml中进行配置:
<!--pom.xml 远程仓库的配置 id要跟本地maven的setting.xml相同 -->
<distributionManagement>
<repository>
<id>xdclass-releases</id>
<name>Wangzhi Release Repository</name>
<url>http://192.168.88.128:8081/repository/maven-releases/</url>
</repository>
<snapshotRepository>
<id>xdclass-snapshots</id>
<name>Wangzhi Snapshot Repository</name>
<url>http://192.168.88.128:8081/repository/maven-snapshots/</url>
</snapshotRepository>
</distributionManagement>
5. 点击deploy就可以发布了
6. 上传第三方jar包到私服:
* 选择私服的upload,选择上传到哪个?一般选择自己新建的.
* 选项的填写:
1. file : 选择本地的第三方jar
2. extension: 是什么jar包,也就是后缀名
3. group id : com.xdclass
4. artifact id : wiggin
5. version: 1.0
6. 选中generate a pom那一行,点击upload就可以了
7. 本地项目的引用按照上面填写的引用就可以
5. 安装Mysql(可以参考linux常用命令中的安装mysql,比这个相对简单)
linux下安装mysql的方式
yum 安装简单
自行编译安装 自由
mysql下载
http://mirrors.sohu.com/mysql/MySQL-5.7/mysql-5.7.17.tar.gz
编译安装mysql
1.解压
tar -zxvf mysql-5.7.17.tar.gz
2.安装相应的依赖
yum install make cmake gcc gcc-c++ bison bison-devel ncurses ncurses-devel autoconf automake wget
3.下载boost
mkdir /usr/local/boost
wget http://www.sourceforge.net/projects/boost/files/boost/1.59.0/boost_1_59_0.tar.gz --no-check-certificate
4.添加用户并创建相应目录存放数据
useradd mysql
cd /home/mysql/
mkdir data logs temp
chown -R mysql:mysql data logs temp
4.执行cmake
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1 \
-DMYSQL_DATADIR=/home/mysql/data \
-DMYSQL_USER=mysql \
-DMYSQL_TCP_PORT=3306 \
-DWITH_BOOST=/usr/local/boost
5.编译安装
make 进行编译
make install 安装
6.修改mysql安装目录权限
chown -R mysql:mysql /usr/local/mysql
7.初始化mysql
mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/home/mysql/data
产生密码 eqK:iH;+S6dC
8.删除/etc下的my.cnf
rm /etc/my.cnf
9.复制服务启动脚本
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
10.启动 MySQL 服务:
service mysql start
11.设置mysql服务开机自启动
chkconfig mysql on
12.登陆mysql并设置可远程登陆
mysql -u root -p 回车
粘贴初始化时产生的临时密码 eqK:iH;+S6dC
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xdclass' WITH GRANT OPTION;此时不让改,提示要先设置下密码
SET PASSWORD = PASSWORD('xdclass');
ALTER USER 'root'@'localhost' PASSWORD EXPIRE NEVER;
flush privileges;
exit;
重新登陆,使用刚刚设置的密码
mysql -u root -p
登陆完成之后,即可设置允许远程登陆
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'xdclass' WITH GRANT OPTION;
13.开启防火墙端口
vim /etc/sysconfig/iptables
加入
-A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT
14.使用连接工具测试远程连接
6. sonarQube(代码质量管理工具)的安装和使用(可以检查项目代码的错误,覆盖率等等)
前置依赖
mysql 5.6 or 5.7
jdk 1.8
1.下载
https://www.sonarqube.org/
2.安装unzip并解压sonarqube并移动到/usr/local
yum install unzip
unzip sonarqube-6.7.4.zip
mv sonarqube-6.7.4 /usr/local/
3.mysql里新增数据库
CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;
4.修改sonarqube相应的配置(下面的配置都是在原来的配置中找见进行修改)
vim /usr/local/sonarqube-6.7.4/conf/sonar.properties
sonar.jdbc.username=root
sonar.jdbc.password=wiggin
sonar.jdbc.url=改成步骤3创建的库名
sonar.web.context=/sonar
sonar.web.host=0.0.0.0
5.新增用户,并将目录所属权赋予该用户
useradd sonar
chown -R sonar:sonar sonarqube-6.7.4/
6.启动
su soanr
/usr/local/sonarqube-6.7.4/bin/linux-x86-64/sonar.sh start (可能会启动失败,可以查看 logs下的日志文件来查看失败原因)
7.界面访问
http://192.168.56.101:9000/sonar
开启防火墙
firewall-cmd --zone=public --add-port=9000/tcp --permanent
firewall-cmd --reload
8. 进行登录:
默认的账户名和密码都是admin,登录成功之后需要生成token(8e8d2ede68954ddf387e50efb24a140f0e3ff7d4)
在界面产生令牌,并将项目代码使用以下命令进行提交由sonarqube进行分析,完成后,查看相应的分析结果
mvn sonar:sonar \
-Dsonar.host.url=http://192.168.88.128:9000/sonar \
-Dsonar.login=8e8d2ede68954ddf387e50efb24a140f0e3ff7d4
在项目的根目录,使用git bash命令,将上面3行放入git bash命令行中运行,就可以build success
Jenkins的安装及常见问题定位
安装tomcat
1. 安装tomcat(创建用户操作tomcat)
useradd tomcat 新建用户
passwd tomcat 修改密码(密码不能过于简单)--Mypwd123456$
2. 使用root命令进行解压tomcat
3. 将解压的目录的权限给tomcat用户:
chown -R tomcat:tomcat apache-tomcat-9.0.12
安装Jenkins(基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。)
1. 下载 https://jenkins.io/download/
下载长期支持的war包(通用)
2. 将下载的war包上传到安装的tomcat的webapps目录下
3. 将jenkins的war包操作权限给tomcat用户
chown tomcat:tomcat jenkins.war
4. 启动tomcat
进入bin目录, ./startup.sh
5. 配置防火墙
firewall-cmd --zone=public --add-port=8080/tcp --permanent
firewall-cmd --reload
6. 不能访问查看日志: 进入logs目录, more catalina.out可以看到端口已经被使用,关闭tomcat,使用netstat -tlun可以看到8080端口还在被使用,使用netstat -tlunp | grep 8080.可以看到哪个程序占用了80端口,发现是与gitlab相关,所以修改tomcat的端口号.
7. 修改端口号:
进入tomcat的conf目录,修改server.xml,找到8080端口,将端口修改为9999,重新进入bin目录进行启动,可以使用netstat -tlun查看到9999端口已经启动
8. 防火墙
firewall-cmd --zone=public --add-port=9999/tcp --permanent
firewall-cmd --reload
9. 就可以在本机访问了:
访问 http://192.168.88.128:9999/jenkins 就可以进行安装jenkins了,会提示到某一个目录下去查找密码,使用 more + 目录就可以进行查看了,复制内容,进行操作就好
10. 安装(如果出现离线问题)
离线解决:
访问 http://192.168.56.101:9999/jenkins/pluginManager/advanced 目录,拉到最底下,将https--》改成http,之后提交,重启tomcat, 再次访问就可以进行安装了,默认安装就好.
11. 创建管理员用户:
用户名: wangzhi
密码 : nrblwbb7
全名 : wangzhi
电子邮件: 2585700076@qq.com
点击保存并完成就好
12. 发现一片空白,重启tomcat.然后再次访问,就可以了
敏捷持续集成(Jenkins)的更多相关文章
- 自动化持续集成Jenkins
自动化持续集成Jenkins 使用Jenkins配置自动化构建http://blog.csdn.net/littlechang/article/details/8642149 Jenkins入门总结h ...
- 这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script
这些年我们一起搞过的持续集成~Jenkins+Perl and Shell script ##转载注明出处:http://www.cnblogs.com/wade-xu/p/4378224.html ...
- 持续集成~Jenkins构建GitHub项目的实现
有了前两讲的基础,这回我们就可以把github上的项目做到CI(jenkins)里了,让它自动去集成部署,持续集成~Jenkins里的NuGet和MSBuild插件,持续集成~Jenkins里的pow ...
- 持续集成-jenkins 环境搭建
转自:http://blog.jxdev.me/blog/2015/03/26/jian-xin-de-chi-xu-ji-cheng-zhi-lu-%5B%3F%5D-da-jian-jenkins ...
- 1.jenkins持续集成-jenkins安装
1.为什们要使用jenkins Jenkins是基于Java开发的一种持续集成工具,用于监控持续重复的工作,功能包括: 1.持续的软件版本发布/测试项目; 2.监控外部调用执行的工作. 2.安装jen ...
- 持续集成Jenkins + robot framework + git
Jenkins + robot framework + git持续集成 一.Jenkins安装插件 进入系统管理—插件管理—可选插件下安装以下插件Git Client Plugin.GIT plugi ...
- 持续集成Jenkins+sonarqube部署教程
1 引言 1.1 文档概要 本文主要介绍jenkins,sonar的安装与集成,基于ant,maven构建.用一个例子介绍jenkins的编译打包部署,代码检查.最后集成jenkins.(现阶段只是简 ...
- python+selenium自动化软件测试(第11章):持续集成jenkins和GitHub的使用
11.1 jenkins持续集成环境 相关安装包下载链接:http://pan.baidu.com/s/1qYhmlg4 密码:dcw2赠送jenkins集成selenium环境视频链接http:// ...
- 持续集成-jenkins介绍与环境搭建
什么是持续集成? 转自:https://blog.csdn.net/tanshizhen119/article/details/80328523 持续集成,俗称CI, 大师Martin Fowler对 ...
随机推荐
- day 11 前方高能-迭代器
第一类对象 -----函数名 == 变量名 函数对象可以像变量一样进行赋值 还可以作为列表的元素进行使用 可以作为返回值返回 def wrapper(): def inner(): ...
- Android Notification的使用 - z
http://blog.csdn.net/new_one_object/article/details/55511253 另,博主其它文章也很好
- 20155223 Exp8 WEB基础实践
20155223 Exp8 WEB基础实践 基础问题回答 什么是表单? 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素. 表单使 ...
- 【php增删改查实例】第四节 -自己 DIY 一个数据库管理工具
本节介绍如何自己DIY一个数据库管理工具,可以在页面输入sql 进行简单的增删改查操作. 首先,找到xampp的安装目录,打开htdocs: 新建一个php文件,名称为 mysqladmin.php ...
- mfc 类三种继承方式下的访问
知识点 public private protected 三种继承方式 三种继承方式的区别 public 关键字意味着在其后声明的所有成员及对象都可以访问. private 关键字意味着除了该类型的创 ...
- python 回溯法 子集树模板 系列 —— 11、全排列
问题 实现 'a', 'b', 'c', 'd' 四个元素的全排列. 分析 这个问题可以直接套用排列树模板. 不过本文使用子集树模板.分析如下: 一个解x就是n个元素的一种排列,显然,解x的长度是固定 ...
- [BZOJ2138]stone[霍尔定理+线段树]
题意 一共有 \(n\) 堆石子,每堆石子有一个数量 \(a\) ,你要进行 \(m\) 次操作,每次操作你可以在满足前 \(i-1\) 次操作的回答的基础上选择在 \([L_i,R_i]\) 区间中 ...
- JavaScript快速入门-简介
一.JavaScript历史(摘自w3school) JavaScript 是因特网上最流行的脚本语言,它存在于全世界所有 Web 浏览器中,能够增强用户与 Web 站点和 Web 应用程序之间的交互 ...
- 前端项目模块化的实践2:使用 Webpack 打包基础设施代码
以下是关于前端项目模块化的实践,包含以下内容: 搭建 NPM 私有仓库管理源码及依赖: 使用 Webpack 打包基础设施代码: 使用 TypeScript 编写可靠类库 使用 TypeScript ...
- PAT甲题题解-1062. Talent and Virtue (25)-排序水题
水题,分组排序即可. #include <iostream> #include <cstdio> #include <algorithm> #include < ...