拓扑图如下:
一、Jenkins搭建
1、安装最新的linux系统CentOS-7-x86_64-Minimal,更新系统以及安装软件
yum upgrade -y && yum update -y
yum install epel-release lrzsz vim net-tools unzip wget gcc g++ cmake git svn -y
2、添加系统用户apps,安装jdk1.8。执行如下命令:
useradd apps
mkdir -p /apps/svr
tar -zxf jdk-8u131-linux-x64.tar.gz -c /apps/svr
ln -s /apps/svr/jdk1.8.0_131 /apps/svr/jdk
修改apps用户的home目录下的配置文件.bashrc,追加如下内容:
export JAVA_HOME=/apps/svr/jdk
export JRE_HOME=/apps/svr/jdk/jre
CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$CLASSPATH
3、下载最新的LTS版的Jenkins包(Generic java package)到路径/apps/svr/tomcat,用apps用户后台启动。
Java -jar jenkins.war &
4、安装maven。
下载最新的apache-maven-3.3.9-bin.zip包,解压到/usr/local路径,修改/etc/profile,增加:
export MAVEN_HOME=/usr/local/apache-maven-3.3.9
PATH=$PATH:$MAVEN_HOME/bin
修改maven的配置文件/usr/local/apache-maven-3.3.9/conf/settings.xml,增加访问nexus私服的设置。
6、安装Jenkins插件。浏览器打开http://IP地址:8080,打开Jenkins的安装界面,安装所有的推荐插件,包括Multiple SCMs plugin。
7、配置Jenkins工具。登录Jenkins,打开系统管理(manage Jenkins),进入global tool configuration
a)JDK
Name jdk1.8
JAVA_HOME /apps/svr/jdk1.8.0_131
如果想要多个jdk版本,可以选择新增JDK。
b)git
Name Default
Path to Git executable git
c)Maven
Name apache-maven-3.3.9
MAVEN_HOME /usr/local/apache-maven-3.3.9
8、添加拉取gitlab代码凭证。登录Jenkins,在credentials,system,global credentials下,选择add credentials,输入gitlab系统的账号密码。
二、Jenkins的使用
Jenkins工作目录在apps用户的home目录下,一个隐藏文件夹.jenkins。从gitlab拉取回来的代码都在workspace目录下。
以下以新建order-prod项目为例:
1、登录Jenkins,点击“new item”,输入项目名字order-prod,选择“maven project”。
2、在“Source Code Management”(源码管理),选择Multiple SCMs(前面需要安装插件Multiple SCMs plugin),然后选择Add SCM中的git,“Repository URL”填写项目代码的gitlab路径,credentials选择之前添加的凭证,也可以现在add添加。“Branch Specifier”填代码分支名字。再次择Add SCM中的git,这次添加项目的配置文件的gitlab路径,凭证和分支,然后选择“additional behaviours”,再选择“check out to a sub-directory”,手动指定从gitlab拉取下来的文件的存放路径,这里我填写/home/apps/.jenkins/workspace/order-prod-config。
3、在“pre steps”,选择“add pre-build step”中的“execute shell”,在command中输入shell命令“cp /home/apps/.jenkins/workspace/kepler-prod-config/* /home/apps/.jenkins/workspace/kepler-prod/src/main/resources/”,这个命令是在maven打包构建之前替换项目代码里面的配置文件。测试环境,灰度环境,正式环境都用不同的配置文件。
4、在“build”中,“ROOT POM”填写pox.xml,goals and options填写“clean install -Dmaven.test.skip=true”。这里是maven构建的命令。
5、在最后“post steps”,首先选择“run only if build succeeds”,“execute shell”填写命令“cp -R /home/apps/.jenkins/workspace/kepler-prod/target/kepler-service-1.0.0-SNAPSHOT.jar /home/apps/svn_mall/sadoc/kepler/ && cd /home/apps/svn_mall/sadoc/kepler && svn add kepler-service-1.0.0-SNAPSHOT.jar && svn commit -m "kepler update"”。这个命令实际上就是利用把构建好的待发布的包,上传到SVN服务器。在此之前,需要登录服务器,在/home/apps/svn_mall/路径执行“svn --username=xingmaogou co svn://192.168.100.7/sadoc”,这里username为SVN的用户名,IP地址替换为相对于的公网IP地址,然后执行“svn add kepler-service-1.0.0-SNAPSHOT.jar”。
这样,Jenkins这端配置完成。
三、SVN服务器搭建
SVN服务器搭建在生产环境所在的内网,生产环境的walle服务器能访问,并且需要映射端口出来给公司内外Jenkins访问。
1、yum安装SVN服务器
首先看系统是否安装了svn,rpm -qa subversion,如果已经安装,需要先行卸载。然后
yum -y install subversion
2、配置SVN并且启动
指定svn的数据存储路径
mkdir -p /application/svndata
指定svn的配置文件信息路径
mkdir -p /application/svnpasswd
启动svn服务
svnserve -d -r /application/svndata/
3、检测svn服务是否正常启动,如果能看到下图所示则证明启动成功
第一通过进程检测
ps -ef | grep svn
第二通过端口3690检测
netstat -lntup | grep 3690
第三通过文件检测,需要root用户才可以执行
lsof -i :3690
4、使用svnadmin建立svn项目版本库
查看创建项目版本库命令
svnadmin --help
svnadmin help create
创建sadoc版本库
svnadmin create /application/svndata/sadoc
5、配置sadoc版本可的权限
进入sadoc版本库配置目录,并备份配置文件
cd /application/svndata/sadoc/conf/
cp -p svnserve.conf svnserve.conf.default
进行详细配置
anon-access = none //禁止匿名访问
auth-access = write //认证后有读的权限
password-db = /application/svnpasswd/passwd //指定密码文件
authz-db = /appplication/svnpasswd/authz //指定权限认证文件
6、复制passwd和authz文件到sadoc的svnpasswd目录并修改权限
执行如下命令完成操作
cp -p authz passwd /application/svnpasswd/
cd /application/svnpasswd/
chmod 700 authz passwd
7、为Svn版本库创建用户并授权访问指定项目版本库
编辑passwd文件配置用户和密码
vi passwd
xingmaogou = xingmaogou
xingyuan = xingyuan
编辑authz文件配置读取权限
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>
8、重新启动svn服务进行验证
杀死svn服务
pkill svnserve
启动svn
svnserve -d -r /application/svndata/
备注:修改passwd和authz文件不需要重启svn服务而修改svnserve.conf则需要
9、最后安装客户端进行sadoc的配置是否正确
svn --username=xingmaogou co svn://121.xxx.xxx.xx9/sadoc
四、walle发布系统搭建
Walle为专门国产开源的发布系统,可以多台主机,多种环境,多用户执行发布任务,并且可以回滚。https://walle-web.io/。相对于Jenkins搭建在公司内外,walle需要安装在生产环境的内网。安装注意参照官方文档https://walle-web.io/docs/installation.html。但是需要注意的地方有几点
1、安装SVN客户端并且能否访问前面搭建的SVN服务器
2、安装yum安装nginx,PHP,并且都用同一个用户启动,修改nginx,和PHP-fpm配置文件,启动用户都用apps。
3、yum安装php相关软性的时候,如yum install php56w.x86_64 php56w-cli.x86_64 php56w-common.x86_64 php56w-gd.x86_64 php56w-ldap.x86_64 php56w-mbstring.x86_64 php56w-mcrypt.x86_64 php56w-mysql.x86_64 php56w-pdo.x86_64 php56w-fpm,软件名字都不需要“56w”,否则会安装失败。
4、邮箱配置是在walle的PHP项目工程的config文件夹下的local.php配置,具体参照https://github.com/meolu/walle-web。
5、walle配置,在管理员登录walle之后,在项目配置中,新建项目。特别需要注意的是,“宿主机”下,“代码检出仓库”是位于walle系统所在linux主机。目标机器就是生产环境所在主机,用户为apps用户,webroot目录需要特别注意,这个路径在服务器上只需要创建到父一级,比如你填写的是“/data/www/walle”,但是在生产服务器上只能创建目录“/data/www”。
6、walle服务器的ssh公钥需要放到所有目标服务器的apps用户下,信任从而能免密码登陆。
全部配置好之后,普通用户邮件申请账号,管理员添加项目并且给普通用户授发布权限。
7、高级任务里,可以填写shell命令用于重启程序。
8、“分支/tag上线”选择“无trunk/无branches”,然后开启审核。