跳至主要內容

应用系统自动化部署

linuxgitlabjenkins

本次自动化建设是以官网系统重构的契机,实现公司J2EE应用服务统一标准化,自动化的初次尝试,希望借此推进公司各应用的标准化。

介绍

不规范不统一的部署,会给应用服务版本发布以及系统运维带来一些额外的成本,而故障恢复也需要一个统一且简单的操作以减少恢复时间,因此,规范应用服务的部署,并实现自动化是对项目的维护有至关重要的作用。

本次规范化包括:

“一服务”对应“一用户一运行环境”:应用服务目录,文件备份,日志生成,运行环境,运维用户,统一化和标准化。保证各个服务之间互相独立,互不影响。

应用服务自动化部署,实现持续集成,持续交付并通过自动化构建

软件包括:Gitlab、JDK、Maven、Jenkins、MySQL、Tomcat

机器规划如下:

机器IP软件
1.110Git、Gitlab、Jdk、Maven、Git、Jenkins、MySQL
1.111Tomcat、Jdk

基础工具安装

unzip、zip、wget、tar、telnet、lrzsz

部署机器1.110

新建目录

文件夹安装版本说明
/data/root/javajdk-8u77-linux-x64.tar.gzjdk安装目录,是tomcat运行环境
/data/root/jenkins-jenkins工作目录
/root/.jenkins-jenkins用户文档目录,该目录下plugins目录为插件安装目录,存放hpi安装插件
/data/root/mavenapache-maven-3.3.9-bin.tar.gzmaven安装目录,是jenkins构建maven项目必要支持软件
/data/root/tomcatapache-tomcat-8.5.61.ziptomcat安装目录,是jenkins运行环境
/data/root/tomcat/jenkinsJenkins v2.276Jenkins安装目录

Git的安装

安装命令

yum install git

新建git用户

git config --global user.name "Jenkins"
git config --global user.email "[email protected]"

配置访问公钥

ssh-keygen -t rsa -C "[email protected]"

公钥位置:/root/.ssh/id_rsa.pub

Gitlab的安装

介绍

版本:gitlab-ce-10.7.1-ce.0.el6.x86_64.rpm

安装基础依赖

yum install -y curl policycoreutils-python openssh-server cronie
lokkit -s http -s ssh

安装gitlab

yum install gitlab-ce-10.7.1-ce.0.el6.x86_64.rpm

修改配置文件

vi /etc/gitlab/gitlab.rb

相关命令

  • gitlab-ctl stop //停止服务

  • gitlab-ctl reconfigure //刷新配置

  • gitlab-ctl restart //重启服务

配置用户
Jenkins/Jenkins1234/[email protected]
root/root1234
配置用户凭证
cat /root/.ssh/id_rsa.pub

将查询结果配置到gitlab的jenkins用户ssh上

配置Gitlab用户

导入项目,创建Jenkins分支,并将Jenkins用户设置为stport项目的开发者:

http://192.168.1.110:9999/root/stport.git

Jdk的安装

介绍

版本:jdk-8u77-linux-x64.tar.gz

安装目录:/data/root/java

配置环境变量

vi /etc/profile

export JAVA_HOME=/data/root/java
export PATH=$PATH:$JAVA_HOME/bin  

刷新系统环境配置

source /etc/profile

Maven的安装

介绍

版本:apache-maven-3.3.9-bin.tar.gz

安装目录:/data/root/maven

解压压缩包

tar -vxf apache-maven-3.3.9-bin.tar.gz

配置环境变量

vi /etc/profile

export MAVEN_HOME=/data/root/maven/apache-maven-3.3.9
export PATH=${PATH}:${MAVEN_HOME}/bin  

刷新系统环境配置

source /etc/profile

修改maven配置文件

settings.xml,修改仓库文件存在位置

GIT的安装

介绍

版本:version 1.7.1

安装命令

yum install git

Tomcat的安装

介绍

版本:apache-tomcat-8.5.61.zip

安装目录:/data/root/tomcat

MySQL的安装

介绍

版本:mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

安装目录:/data/root/mysql

数据库存放目录:/data/root/mysql/data

添加用户组

groupadd mysql

添加用户

添加用户mysql 到用户组mysql

useradd -g mysql mysql

用户授权

chown -R mysql:mysql /data/root/mysql/

安装依赖

yum install -y numactl yum install -y libaio-devel.x86_64

解压安装包

tar -vxf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz mv mysql-5.7.22-linux-glibc2.12-x86_64/ mysql

初始化数据库

/data/root/mysql/bin/mysqld --initialize --user mysql --basedir=/data/root/mysql --datadir=/data/root/mysql/data/
A temporary password is generated for root@localhost: icQrb-;Q8>>r

警告

初始化的过程会启动服务,但是由于采用默认配置,访问是有问题的

[client]                                        # 客户端设置,即客户端默认的连接参数
port = 3306                                     # 默认连接端口。默认是3306,可更改
socket=/data/root/mysql/data/mysql.sock         # 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
character-set-server=utf8                       # 设置mysql服务端默认字符集

[mysqld]
port = 3306                                     # MySQL监听端口。默认是3306,可更改
socket=/data/root/mysql/data/mysql.sock         # 为MySQL客户端程序和服务器之间的本地通讯指定一个套接字文件
basedir=/data/root/mysql/                       # MySQL安装根目录
datadir=/data/root/mysql/data                   # MySQL数据文件所在位置
default-storage-engine=INNODB                   # 默认存储引擎INNODB
max_connections=1400                            # 最大连接数
collation-server=utf8_general_ci                # 数据库默认字符集
lower_case_table_names=1                        # 是否对sql语句大小写敏感,1表示不敏感
max_allowed_packet=128M                         # SQL数据包发送的大小,如果有BLOB对象建议修改成1G
explicit_defaults_for_timestamp=true            # TIMESTAMP如果没有显示声明NOT NULL,允许NULL值
skip-name-resolve                               # 解决远程访问慢的问题,必须等安装完成后才配置上(打开注释),否则第一次登陆会登陆不上
character-set-server=utf8                       # 设置mysql服务端默认字符集

# 日志设置
#log_error = /data/root/mysql/data/error.log      # 数据库错误日志文件

user=mysql
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
/data/root/mysql/bin/mysqld
/data/root/mysql/bin/mysql -uroot -p 
输入密码
alter user user() identified by "root";
update mysql.user set authentication_string=password('root1234'),password_expired='N' where user='root';
grant all on *.* to root@'%' identified by 'root1234' with grant option;
flush privileges;
ps -ef | grep mysqld 
kill -9 1987

提示

解决远程访问慢

编辑配置文件

vi /etc/my.cnf打开skip-name-resolve配置

# 解决远程访问慢的问题,必须等安装完成后才配置上(打开注释),否则第一次登陆会登陆不上
skip-name-resolve
重启服务
/data/root/mysql/bin/mysqld

提示

设置开机自启

cp /data/root/mysql/support-files/mysql.server /etc/init.d/mysql3306
修改参数

vim /etc/init.d/mysql3306

basedir=/data/root/mysql
datadir=/data/root/mysql/data
conf=/etc/my.cnf
$bindir/mysqld_safe --defaults-file=$conf --datadir=$datadir --pid-file=$server_pid_file 
设置开机启动
chkconfig --add mysql3306  
chkconfig --list

如果看到mysql的服务,并且3,4,5都是on的话则成功,如果是off,则键入

chkconfig --level 345 mysql3306 on 

启动mysql服务

systemctl start mysql3306

检查端口是否被监听

netstat -na | grep 3306

注意

防火墙开放3306端口

编辑防火墙配置文件

vi /etc/firewalld/zones/public.xml

<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="dhcpv6-client"/>
  <!-- 最主要添加下面这句 -->
  <port protocol="tcp" port="3306"/>
</zone> 
重启防火墙
systemctl restart network

其他

找到mysql.sock,放到/data/root/mysql/data目录下 新建软连接:

ln -s /data/root/mysql/data/mysql.sock /tmp/mysql.sock show variables like '%lower_case_table_names%';

部署机器1.111

Tomcat的安装

介绍

版本:apache-tomcat-8.5.61.zip

目录文件:/data/stport/tomcat

配置文件:/data/stport/tomcat/settings.xml

Jdk的安装

介绍

版本:jdk-8u77-linux-x64.tar.gz

目录文件:/data/stport/java

应用规范化部署

规划

用户与组

组名称组ID备注
staff600
用户名称用户ID用户目录
601staff/home/
cxwh602staff/home/cxwh

应用目录结构

目录属主/组备注
/data/{应用用户名}:staff应用存放目录
/data/{应用用户名}/java{应用用户名}:staffJdk软件安装包存放目录
/data/{应用用户名}/tomcat{应用用户名}:stafftomcat安装包存放目录
/data/{应用用户名}/config{应用用户名}:staff项目环境相关配置文件,一般是xxx.properties
/data/{应用用户名}/application{应用用户名}:staff当前运行版本的版本目录,采用软链接到release对应版本
/data/{应用用户名}/deploy{应用用户名}:staff发版时文件存放位置
/data/{应用用户名}/release{应用用户名}:staff应用文件发版后存放的位置
/data/{应用用户名}/tools{应用用户名}:staff应用相关工具存放位置,例如版本发布脚本
/data/{应用用户名}/logs{应用用户名}:staff应用,脚本日志目录
/data/{应用用户名}/temp{应用用户名}:staff临时文件目录
/data/{应用用户名}/resource{应用用户名}:staff数据文件等资源存放位置
/data/{应用用户名}/backup{应用用户名}:staff备份目录

创建用户

结果

包名规范

包部署命名规范

所有的应用打包命名为:应用简称-版本号-日期-环境标识.war

应用简称:一般与应用用户名一致

版本号:x.x.x,x是整数,可以是两位

日期:格式是yyyymmdd

环境标识:与maven上的profile的id一致,一般是dev/sit/uat/prod,分别表示开发/集成测试/用户验收测试/生产

日志规范

包部署命名规范

基于tomcat的应用

Tomcat日志文件名:tomcat.应用简称.YYYYMMDD.log,以天为单位存储切割

应用日志文件名:应用简称.YYYYMMDD.log,以天为单位存储切割

应用部署

Jenkins持续集成、持续交付、自动化构建

方案说明

介绍

应用服务采取人工部署的方式,会使得运维工作开展时,需要了解不同应用的具体部署细节。为了提高效率和准确性,搭建一套自动化部署平台,将应用系统的部署发布流程做成自动化模式。这样在产线投产时,避免人工部署的情况,降低出错几率,加速发布流程。同时流程得以标准化,便于系统管理与日常运维。最后在应用系统的部署发布流程中,可以做到即使没有对应的应用系统的研发人员,运维人员也可自行发包,提高运维效率。

Jenkins搭建

Jenkins是一个标准的J2EE项目,使用tomcat进行部署运行即可,这里修改tomcat的配置文件server.xml,将jenkins作为默认的root项目

启动Tomcat并访问192.168.1.110:8888open in new window

创建用户:Jenkins/Jenkins

安装插件:/root/.jenkins/plugins

登录界面:

设置开机自启

export JAVA_HOME=/data/root/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/root/tomcat
export CATALINA_HOME=/data/root/tomcat
/data/root/tomcat/bin/startup.sh

配置工具

配置构建节点

配置项目构建的远程机器节点,首页-构建执行状态-新建节点:

配置运行节点

配置Publish over SSH

项目构建配置

说明

按照以下截图,新建Jenkins参数化构建项目,自动化构建将完成以下任务

  1. 项目指定分支代码拉取更新和构建
  2. 构建完成上传项目到指定机器进行部署

进行构建

进行构建,并自动完成项目的发布

工作空间自动生成结果

构建包被自动传到目标服务器上,执行自动化部署,项目的正常访问

批量删除构建

Jenkins可以通过脚本行批量删除历史构建,打开Jenkins-系统管理-脚本命令行,输入以下代码

def jobName = "10.14_sttb_sit"   // 删除的项目名称
def maxNumber = 80    // 小于等于该编号的构建都将被删除
Jenkins.instance.getItemByFullName(jobName).builds.findAll {
  it.number <= maxNumber
}.each {
  it.delete()
}

其他

提示

  • Jenkins新版本启动半英文半中文的解决方法,在tomcat的catalina.sh新增启动参数指定中文运行
JAVA_OPTS="$JAVA_OPTS -Duser.language=C.UTF-8" 

应用系统

设置开机自启

vi /etc/rc.d/rc.local,添加代码

export JAVA_HOME=/data/stport/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export TOMCAT_HOME=/data/stport/tomcat
export CATALINA_HOME=/data/stport/tomcat
su - stport -c /data/stport/deploy/autostart.sh
/bin/su - stport -c "/data/stport/deploy/autostart.sh"

centos7需要修改rc.local为可执行chmod +x /etc/rc.d/rc.local,若Linux环境重启,则应用系统将以stport用户启动

提示

当Linux环境重启,若应用系统重启时遇到问题:

java.lang.IllegalStateException: Cannot run without an instance id.

解决:

[root@streport ~]# vi /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 streport

克隆系统之后的修改:

[root@sttb data]# vi /etc/hosts

[root@sttb data]# vi /etc/rc.d/rc.local

修改目录权限:

chown -R 777 dirname

修改目录用户组:

chown -R root:root dirname

修改密码:

passwd user

删除用户:userdel -r stport

cat /etc/sysconfig/iptables

查询占用大小

du -sh /data/datascreen

恢复域名解析

iptables -D OUTPUT -m state --state NEW -j DROP

关闭域名解析

iptables-restore < /etc/sysconfig/iptables

1 系统运行脚本

autostart.shopen in new windowcatLog.shopen in new windowclear.shopen in new windowdeploy.shopen in new windowpsTomcat.shopen in new windowrestart.shopen in new windowstop.shopen in new window

2 系统tomcat替换文件

catalina.shopen in new window

server.xmlopen in new window

tomcat 400页面隐藏版本号信息

修改server.xml文件:context中添加

<Valve className="org.apache.catalina.valves.ErrorReportValve" showReport="false" showServerInfo="false" />

kkfileview,服务器本机启动需要访问openoffice,openoffice需要访问自身的2001和2002端口,否则无法启动,或者启动后上传文件预览异常

解压kkFileView-4.1.0-SNAPSHOT.tar.gz
tar -xvf kkFileView-4.1.0-SNAPSHOT.tar.gz
执行install.sh全自动安装
./install.sh
设置开机自启
vim /etc/rc.d/rc.local,内容为:
rm -rf /data/kkFileView/bin/kkFileView.pid
export JAVA_HOME=/data/root/java
export PATH=.:/data/root/tools:$JAVA_HOME/bin:$PATH
/data/kkFileView/bin/startup.sh

系统历史执行过的命令增加时间记录

vi ~/.bash_profile
HISTTIMEFORMAT="%F %T "
export HISTTIMEFORMAT


source ~/.bash_profile
history