jenkins+gitlab+maven+tomcat实现自动集成、打包、部署
一、介绍
持续集成(Continuous Integration,简称CI)是一种软件开发实践,团队开发人员每次都通过自动化的构建(编译、发布、自动化测试)来验证,从而尽早的发现集成错误。持续集成最大的优点是避免了传统模式在集成阶段的除虫会议(bug meeting),其要素包括统一的代码库、自动构建、自动测试、自动部署、频繁提交修改过的代码等。
二、环境
Jenkins 自身采用 Java 开发,所以要必须安装 JDK,本文集成的项目基于 Maven 构架,Maven 也必须安装。使用git连接远程仓库gitlab
centos7 64位 47.92.85.152 4G 安装jdk、maven、git、jenkins
centos7 64位 47.92.85.153 4G 安装gitlab
三、安装
1.jdk安装
下载jdk8版本
https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
上传到服务器,解压
tar -zxvf jdk-8u40-linux-i586.tar.gz
添加环境变量配置
vi /etc/profile //进入编辑
在文件末尾加入以下内容:
export JAVA_HOME=/usr/local/java8/jdk1.8.0_161 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH
完成编辑后让其生效
source /etc/profile
运行命令就可以看到java版本了
java -version
2.安装maven
下载maven版本
https://maven.apache.org/download.cgi
上传到服务器,解压
tar -zxvf apache-maven-3.6.0-bin.tar.gz
添加环境变量配置
vi /etc/profile //进入编辑
在文件末尾加入以下内容:
export MAVEN_HOME=/usr/local/maven/apache-maven-3.6.0 export MAVEN=$MAVEN_HOME/bin export PATH=$MAVEN:$PATH
完成编辑后让其生效
source /etc/profile
mvn -version #查看maven版本
3.tomcat安装配置
- 下载地址:http://tomcat.apache.org/
- 解压缩:tar -zxvf apache-tomcat-8.5.tar.gz
- 进入Tomcat安装目录:/opt/apache-tomcat-7.0.41/bin
- 启动Tomcat:./startup.sh
- 关闭Tomcat:./shutdown.sh
- 查看Tomcat日志:tail -f /opt/apache-tomcat-7.0.41/logs/catalina.out
4.git安装
更新系统包到最新
yum -y update
安装git
yum –y install git
完毕,查看git版本号
git --version
创建一个git用户并赋予密码
useradd git passwd git
设置用户名和邮箱
git config --global user.name "你的名字" git config --global user.email "你的邮箱"
创建秘钥
ssh-keygen -t rsa -C "你的邮箱" #一直回车,密码为空。生成的目录看输出日志创建完成后会有公钥id_rsa.pub(服务器上使用) 和 私钥 id_rsa(客户端使用)
禁用git用户shell登录(一定要禁用)
vi /etc/passwd
将git用户修改为如下(一般在最后一行)git:x:1000:1000::/home/git:/usr/bin/git-shell
修改sshd配置加权限
chown -R git:git .ssh
修改配置,启用ssh公钥认证
vi /etc/ssh/sshd_config
修改如下内容:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
systemctl restart sshd #重启ssh生效
5.gitlab安装
https://www.cnblogs.com/vyanbin/p/centos7_gitlab.html
6.Jenkins安装
下载rpm包
http://pkg.jenkins-ci.org/redhat/
使用rpm包安装命令
rpm -ih jenkins-2.155-1.1.noarch.rpm
自动安装完成之后:
/usr/lib/jenkins/jenkins.war WAR包
/etc/sysconfig/jenkins 配置文件
/var/lib/jenkins/ 默认的JENKINS_HOME目录
/var/log/jenkins/jenkins.log Jenkins日志文件
调整配置文件
vim /etc/sysconfig/jenkins
JENKINS_USER="root" ## 原值 "jenkins" 必须修改,否则权限不足
JENKINS_PORT="8088" ## 原值 "8080" 可以不修改,访问端口号
启动Jenkins
sudo systemctl enable jenkins sudo systemctl restart jenkins
开放端口号
firewall-cmd --zone=public --add-port=8088/tcp --permanent #开放端口
firewall-cmd --reload #重启防火墙
安装JDK后,Jenkins无法启动,需要修改vi /etc/rc.d/init.d/jenkins, 查找,输入/java, 添加新的jre路径
# Search usable Java. We do this because various reports indicated
# that /usr/bin/java may not always point to Java >= 1.6
# see http://www.nabble.com/guinea-pigs-wanted-----Hudson-RPM-for-RedHat-Linux-td25673707.html
candidates="
/etc/alternatives/java
/usr/lib/jvm/java-1.6.0/bin/java
/usr/lib/jvm/jre-1.6.0/bin/java
/usr/lib/jvm/java-1.7.0/bin/java
/usr/lib/jvm/jre-1.7.0/bin/java
/usr/lib/jvm/java-1.8.0/bin/java
/usr/lib/jvm/jre-1.8.0/bin/java
/usr/bin/java
/data/java/jdk1.8.0_101/bin/java
访问
http://47.92.85.152:8088/
提示输入密码,在/var/lib/jenkins/secrets/initialAdminPassword中, 默认用户为admin
登录后提示安装插件,点击“推荐的插件”
需要安装的相关插件
- Git plugin ## 版本管理 GIT 的插件
- GitLab Plugin ##gitlab
- Maven Integration plugin ## 项目构建 Maven 的插件
- Gradle Plugin ## 项目构建 Gradle 的插件
- Publish Over SSH ##ssh连接插件
- 无需重启 Jenkins 插件即生效。如遇失败可重试或离线安装。
Jenkins配置全局工具
配置好后,点击保存。
全局安全配置一般默认即可
系统设置,主要配置SSH连接服
配置完成后,可点击test按钮,是否连接成功。
接下来就可以新建maven项目任务
配置任务
需要在这一步,设置Gredentials的秘钥,点击钥匙按钮设置,选择SSH的方式,把服务器上生成的私钥粘贴上去。配置好后,下拉框选择刚配置的连接方式。
触发器,可以设置定时构建。
每隔5分钟构建一次 H/5 * * * *
每两小时构建一次 H H/2 * * *
每天中午12点定时构建一次 H 12 * * *
每天下午18点定时构建一次 H 18 * * *
在每个小时的前半个小时内的每10分钟 H(0-29)/10 * * * *
每两小时45分钟,从上午9:45开始,每天下午3:45结束 45 9-16/2 * * 1-5
每3小时一次,每个工作日上午9点到下午6点(也许是上午10:38,下午12:38,下午2:38,下午4:38) H H(6-18)/3 * * 1-5
构建命令设置和构建成功后执行部署命令
配置完成后,点击保存。就可以测试构建了。
shell部署命令示例如下
#!/bin/bash
export BUILD_ID=dontKillMe
source /etc/profile
echo "删除旧部署目录"
rm -rf /opt/tomcat/tomcat8_xsl/webapps/xinsilue
rm -rf /opt/tomcat/tomcat8_xsl/webapps/xinsilue.war
echo "复制war包到部署目录"
cp /var/lib/jenkins/workspace/gsd_xsl_test/gsd_xsl.web/target/xinsilue.war /opt/tomcat/tomcat8_xsl/webapps/xinsilue.war
echo "停止tomcat服务中......"
tomcat_pid=`ps -ef | grep tomcat8_xsl/ | grep -v grep | awk '{print $2}'`
if [ -z $tomcat_pid ]; then
echo "tomcat服务未启动"
else
kill -9 $tomcat_pid
sleep 5
echo "停止tomcat服务成功"
fi
cd /opt/tomcat/tomcat8_xsl/bin/
./startup.sh
echo "tomcat启动中......"
TomcatServiceCode=0
while [ "$TomcatServiceCode" != "200" ]; do
sleep 3
TomcatServiceCode=$(curl -I -m 10 -o /dev/null -s -w %{http_code} http://localhost:8096)
done
echo "tomcat启动成功......"
在Jenkins中运行shell脚本经常遇到权限问题,我是给jenkins一个root权限,这样就不会再遇到权限问题了。
1) vi /etc/sysconfig/jenkins
2) 找到$JENKINS_USER改为 “root”:
$JENKINS_USER="root"
3)然后更改Jenkins home,webroot和日志的所有权:
chown -R root:root /var/lib/jenins
chown -R root:root /var/cache/jenkins
chown -R root:root /var/log/jenkins
4).重新启动Jenkins并检查用户是否已被更改
service jenkins restart
这样我们就给jenkins设置了root权限,我们再运行shell脚本就不会提示权限问题了。
maven构建时,出现下载依赖包失败问题,然后构建失败,可以设置maven包下载位置,设置为国内的,默认是从maven中央库中去下载的
<!-- 配置阿里云 --> <mirror> <id>alimaven</id> <name>aliyun maven</name> <url>http://maven.aliyun.com/nexus/content/groups/public/</url> <mirrorOf>central</mirrorOf> </mirror> <!--开源中国镜像仓库--> <mirror> <id>CN</id> <name>OSChina Central</name> <url>http://maven.oschina.net/content/groups/public</url> <mirrorOf>central</mirrorOf> </mirror>