Git仓库
Jenkins
作为持续集成工具,利用webhook插件
检测GitLab仓库代码变动,使用Git工具
到Git仓库拉取代码
到集成服务器,再配合JDK、Maven等
软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。分发
到测试服务器或者生产服务器,测试人员或用户就可以访问服务器IP | 服务器信息 | 备注 |
---|---|---|
192.168.1.10 | 4G内存、可联网 | Gitlab、Git、Maven、JDK |
192.168.1.20 | 4G内存、可联网 | Jenkins、Git、Maven、JDK |
192.168.1.30 | 4G内存、可联网 | Tomcat、JDK |
tar -zxf jdk-8u201-linux-x64.tar.gz
mv jdk1.8.0_201 /usr/local/java
vim /etc/profile
#末尾添加
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
export CLASSPATH=$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
#保存瑞出
source /etc/profile
java -version #安装成功,jdk版本信息
yum -y install git
tar -zxf apache-maven-3.6.0-bin.tar.gz
mv apache-maven-3.6.0 /usr/local/maven
vim /etc/profile
#末尾添加
export PATH=$PATH:/usr/local/maven/bin
#保存退出
source /etc/profile
mvn -v #安装成功,maven版本信息
find / -type f -name settings.xml
vim /usr/local/maven/conf/settings.xml
157 </mirror>
158 -->
159 <mirror>
160 <id>aliyun maven</id>
161 <name>aliyun</name>
162 <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
163 <mirrorOf>central</mirrorOf> # 代表本机去中央仓库的请求拦截,让阿里云来处理
164 </mirror>
165 </mirrors>
tar -zxf apache-tomcat-8.5.42.tar.gz
mv apache-tomcat-8.5.42 /usr/local/tomcat
/usr/local/tomcat/bin/startup.sh
`启动`:/usr/local/tomcat/bin/startup.sh
`停止`:/usr/local/tomcat/bin/shutdown.sh
`查看日志`: tail -f /usr/local/tomcat/logs/catalina.out
详细安装步骤链接
详细安装步骤链接
192.168.1.10 由于刚才已经与gitlab进行sshd密钥部署,就不重新获取了
ssh-copy-id -i 192.168.1.20
ssh-copy-id -i 192.168.1.30
192.168.1.20
ssh-keygen
ssh-copy-id -i 192.168.1.10
ssh-copy-id -i 192.168.1.30
192.168.1.30
ssh-keygen
ssh-copy-id -i 192.168.1.10
ssh-copy-id -i 192.168.1.20
gitlab服务器获取密钥
ssh-keygen #回车
记得安装maven插件、gitlab webhook插件
没有maven插件不能创建maven项目
没有gitlab webhook插件,不能检测gitlab仓库代码变动实现自动计划
新建maven项目
源码管理
复制GitLab中game-of-life项目的SSH地址
报错:无法进行链接
添加凭证
查看gitlab服务器上的密钥
选择刚才创建的凭证
构建触发器
选择当GitLab的项目中代码变化时,Jenkins进行构建任务
图中的URL是在GitLab的设置中需要使用的
点击触发器中的“高级”,生成一串token值,用于GitLab与Jenkins集成使用
Build
执行构建时,对项目进行打包
Post Steps
当构建运行成功后,将jar包传送到tomcat主机的tomcat网页根目录下自动部署
scp /var/lib/jenkins/workspace/game/gameoflife-web/target/*.war [email protected]:/usr/local/tomcat/webapps/
构建后操作
设置过邮箱的话,这里可以设置构建全部结束后,给你发送邮件
无论最终构建成功/失败/不稳定都将发送邮件
这里的URL和token值就是在Jenkins的任务配置时,构建触发器
gitlab服务器拖入项目包,进行上传代码
上传代码成功后,jenkins自动化任务就会进行执行
[root@localhost ~]# tar -zxf game-of-lift.tar.gz
[root@localhost ~]# cd game-of-life/
[root@localhost game-of-life]# git init
重新初始化现存的 Git 版本库于 /root/game-of-life/.git/
[root@localhost game-of-life]# git add .
[root@localhost game-of-life]# git config --global user.email "[email protected]"
[root@localhost game-of-life]# git config --global user.name "zidingyi"
[root@localhost game-of-life]# git commit -m "game"
# 位于分支 master
无文件要提交,干净的工作区
[root@localhost game-of-life]# git remote add game [email protected]:root/game.git
[root@localhost game-of-life]# git push -u game master
Counting objects: 7496, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2292/2292), done.
Writing objects: 100% (7496/7496), 17.34 MiB | 24.45 MiB/s, done.
Total 7496 (delta 4659), reused 7496 (delta 4659)
remote: Resolving deltas: 100% (4659/4659), done.
To [email protected]:root/game.git
* [new branch] master -> master
分支 master 设置为跟踪来自 game 的远程分支 master。
这个时候Tomcat的webapps目录下已经有了项目的war包并且已经编译解压好了
[root@localhost ~]# ls /usr/local/tomcat/webapps/*.war
/usr/local/tomcat/webapps/gameoflife.war
可以直接访问http://192.168.1.30:8080/gameoflife
登录到Jenkins查看终端输出是否成功
报错:主机密钥验证失败,使用scp命令也执行失败,这是因为Jenkins页面执行的命令是通过jenkins用户来执行的,所以免密登录应该给jenkins来做
解决Jenkins的scp问题,安装Jenkins会默认创建jenkins用户,现在切换到jenkins用户
[root@jenkins ~]# su jenkins
[root@jenkins ~]#
发现用户并没有变,也没有报错
查看jenkins的运行环境,cat /etc/passwd | grep jenkins,它的运行环境默认是/bin/false
jenkins:x:988:982:Jenkins Automation Server:/var/lib/jenkins:/bin/false
将环境改为bash
现在切换jenkins
[root@jenkins ~]# su jenkins
bash-4.2$
出现bash-4.2$因为这个用户没有home目录
vim /root/.bash_profile
# 最后一行添加
export PS1='[\u@\h \W]\$ '
# 这个就是普通用户登录后的命令行提示符[root@jenkins~]#
source /root/.bash_profile
设置jenkins不使用密码
visudo
# 在最后一行添加
jenkins ALL=(ALL)NOPASSWD: ALL
生成jenkins的密钥对
[root@jenkins~]#su jenkins
[jenkins@jenkinsroot]$ssh-keygen
[jenkins@jenkinsroot]$ssh-copy-id -i [email protected]
使用root运行
vim /etc/sysconfig/jenkins
# 修改jenkins用户
JENKINS_USER="jenkins" # 修改为root
在GitLab上模拟代码变化
这个时候就可以scp成功了
这个时候Tomcat的webapps目录下已经有了项目的war包并且已经编译解压好了
[root@localhost ~]# ls /usr/local/tomcat/webapps/*.war
/usr/local/tomcat/webapps/gameoflife.war
可以直接访问http://192.168.1.30:8080/gameoflife
Jenkins
vim /tmp/autoscp.sh
# 添加
#!/bin/bash
WARFILE=/var/lib/jenkins/workspace/game/gameoflife-web/target/gameoflife.war
scp $WARFILE [email protected]:/tmp
ssh [email protected] /tmp/deploy.sh
chmod +x /tmp/autoscp.sh
Tomcat
vim /tmp/deploy.sh
# 添加
#!/bin/bash
DAY=/backup/$(date +%Y%m%d)
HOUR=$DAY/$(date +%H%M%S)
APPBASE=/usr/local/tomcat/webapps/gameoflife
WAR=/tmp/gameoflife.war
[ -d /backup ] || mkdir /backup
[ -d $DAY ] || mkdir $DAY
if [ -d $APPBASE ]
then
mkdir $HOUR
mv $APPBASE/* $HOUR
fi
unzip $WAR -d $APPBASE
chmod +x /tmp/deploy.sh
将Jenkins中项目的构建时执行的shell部分改为执行脚本
这个时候Tomcat的tmp目录下已经有了项目的war包
ls /tmp/*.war
tmp/gameoflife.war
并且也已经解压完成根据脚本的操作自动部署到了Tomcat主机
访问http://192.168.1.30:8080/gameoflife