Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署
Jenkins+Maven+Gitlab+Tomcat 自动化构建打包、部署笔记
版本控制概念
-
记录开发文件的时间机器
- 更好的开发,挽回代码错误带来的损失
-
分类
- 本地版本控制系统
- 集中化的版本控制系统 CVS、Subversion(SVN)
- 分布式版本控制系统GIT
- 本地版本控制系统
-
产品
-
github
-
git 纯命令行的软件 服务器&客户端
-
gitlab 私有的git web服务器
-
gitlab部署
gitlab-LOGO
-
system
-
支持的类UNIX系统
- Ubuntu
- Debian
- CentOS
- Red Hat Enterprise Linux (please use the CentOS packages and instructions)
- Scientific Linux (please use the CentOS packages and instructions)
- Oracle Linux (please use the CentOS packages and instructions)
-
不支持的类UNIX系统
- OS X
- Arch Linux
- Fedora
- Gentoo
- FreeBSD
-
环境准备
服务器一台:CentOS7
内存:8G
CPU:2核以上
主要是关防火墙和selinux
Install and configure the necessary dependencies
sudo yum install curl policycoreutils openssh-server openssh-clients //安装和配置必要的依赖关系
sudo yum install postfix //安装邮件程序
sudo systemctl enable postfix
sudo systemctl start postfix
sudo systemctl stop firewalld //防火墙关上!
sudo systemctl disable firewalld
Add the GitLab package server and install the package
由于官网安装比较慢,这里直接上传安装包gitlab-ce-9.1.0-ce.0.el7.x86_64.rpm
链接: https://pan.baidu.com/s/1N0GqYnd5UHXQo0_V9O1YPQ?pwd=gjmb 提取码: gjmb
//离线安装
yum -y install gitlab-ce-9.1.0-ce.0.el7.x86_64.rpma
//官网安装
curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
Configure and start GitLab
sudo gitlab-ctl reconfigure //自动配置文件权限,安装数据库….安装的时间会很长!!!
Browse to the hostname and login
gitlab服务器的地址:http://server_IP Gitlab占用80端口,访问时直接访问IP就可以(第一次会让你确认root账户登录的密码)
登陆图示
欢迎界面
创建8位新密码 然后使用root登录即可
创建项目
推送密钥
粘贴这个地址,用于下载项目
查看秘钥
➜ ssh-keygen
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/echo/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /Users/echo/.ssh/id_rsa
Your public key has been saved in /Users/echo/.ssh/id_rsa.pub
The key fingerprint is:
SHA256:eL/4ra3L1AQpYKy3zQWC+6bec0+vgfUqlqWXiG43Ecg echo@bogon
The key's randomart image is:
+---[RSA 3072]----+
| oo |
| ..o.. . |
| + o..o |
| o E..... |
| o.+So. . |
| +.++.+ |
| o ..*=.o |
| ..+ X=oB |
| ..oo=.*@=+ |
+----[SHA256]-----+
➜ cat ~/.ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQDDh1o1h80mo9ulEP6TvmuCDez5hSXPohewY8gm6x77iF/2gXg6qxtDWxNDSAEwbIrW8kxfWkVpPJBFmTYjjCyI8lbWLf4wt926KLtAt1irBnS3IBt2AZDl1MRllEbl8OvXELnUQo7fnKxfzoYbBE8+fg3fTXd+sxQeMs53U3wcZiz35Sbobd2bMK2HcO7kTsQX8M+pYIzopeMdoeitr0rwAIUWHuxU5jZjfpRX5Qhu+QVM4KGj/bs0eIaY9inho3UQSkZC10vfNFboFnuW3qlUm2ekkPdONokIjiEQOqSbUg6y9eHg9cJaKRfdr+UZ1YuR1MGPtmyuQJ6fRMemaMklc3Zpl0ZF+RrU0mCjXSPuv6ud9aFmuCezoB+g3VEg8mh4lrWCPdSoet9WWP5ns9KAOfK1RRKo4ncrbvrfTUA2iBso+EgP14lZC+0Ay5tYcw/QUe48rezvEOOuNz9jzl3wTAbXj3qP6gO1Z6WW73Ai8GmPxOioQV6pxfk4HLq1fvc= echo@bogon
上传密钥
查看密钥
链接地址
用于命令行,或客户端程序进行下载使用
使用gitlab
图形操作
上传文件到gitlab
下载文件到gitlab客户端
命令行操作
克隆服务器的文件
[root@web1 ~] yum -y install git
[root@web1 ~] git --version
git version 1.8.3.1
[root@web1 ~] git config --global user.name "root"
[root@web1 ~] git config --global user.email git@qq.com
[root@web1 ~] git clone git@192.168.23.26:root/project1.git //把项目克隆到当前服务器上,192.168.23.26 gitlab主机地址
上传文件
[root@web1 ~] cd project1/ //进入工作目录
[root@web1 project1] echo 123456 > 2.sh //新建文件
[root@bogon my.test] git init //初始化
[root@web1 project1] git remote add origin git@192.168.23.26:root/project1.git //配置远程服务器地址 如果远程服务器配置报错,因为之前已经配置过其他远程服务器。可以用命令清除掉 git remote rm origin
[root@web1 project1] git add . //建立当前文件夹下所有的文件,为准备上传的文件
[root@web1 project1] git commit -m "add client.txt" //提交上传说明
[root@web1 project1] git push -u origin master //上传
Jenkins理解
简介
-
CI/CD
- 持续集成/持续发布 开发(git) -->git主库-->jenkins(git+jdk+tomcat+maven打包+测试)-->发布到tomcat服务器
-
jenkins
- Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。
意思是我们通过配置,将以前:编译、打包、上传、部署到Tomcat中的过程交由Jenkins,Jenkins通过给定的代码地址URL,将代码拉取到其“宿主服务器”(Jenkins的安装位置),进行编译、打包和发布到web容器中
- Jenkins是帮我们将代码进行统一的编译打包、还可以放到tomcat容器中进行发布。
jenkins概述
是一个开源的、提供友好操作界面的持续集成(CI)工具,起源于Hudson(Hudson是商用的),主要用于持续、自动的构建/测试软件项目、监控一些定时执行的任务。Jenkins用Java语言编写,可在Tomcat等流行的servlet容器中运行,也可独立运行。
jenkins通常与版本管理工具(SCM)、构建工具结合使用;常用的版本控制工具有SVN、GIT。jenkins构建工具有Maven、Ant、Gradle。
-
CI
- 英文全称:Continuous Integration
中文全称:持续集成工具
持续集成是一种软件开发实践。在持续集成中,团队成员频繁集成他们的工作成果,一般每人每天至少集成一次,也可以多次。每次集成会经过自动构建(包括自动测试)的检验,以尽快发现集成错误。
- 英文全称:Continuous Integration
-
SCM
-
英文全称:Source Control Management (Software Version Control) 中文全称:源码控制管理软件 版本控制
-
jenkins目标
是监控软件开发流程 快速显示问题 提高开发效率 过程控制
jenkins特性
-
易于安装
- 不需要安装、不需要数据库,只需通过java -jar jenkins.war或部署到一个servlet容器中
-
易于配置
- 所有的配置都可能通过jenkins提供的web界面完成,当然如果你喜欢,也可以通过手动修改xml文件进行配置
-
测试报告
- 生成JUnit或TestNG的测试报告.集成RSS/E-mail通过RSS发布构建结果或当构建完成时通过e-mail通知
-
文件识别
- jenkins能跟踪每次构建生成哪些jar包以及使用哪个版本的jar包
-
分布式构建
- 支持Jenkins能够让多台计算机一起构建/测试
-
插件支持
- jenkins可以通过第三方插件扩展,也可以根据团队需要开发插件
-
任务(Job)和构建(build)
- 任务:(Job)是Jenkins的一个执行计划,是一系列操作的集合
构建:是Jenkins的任务的一次运行
- 任务:(Job)是Jenkins的一个执行计划,是一系列操作的集合
-
工作流程图
- 开发者检入代码到源代码仓库。
- CI系统会为每一个项目创建了一个单独的工作区。当预设或请求一次新的构建时,它将把源代码仓库的源码存放到对应的工作区。
- CI系统会在对应的工作区内执行构建过程。
- (配置如果存在)构建完成后,CI系统会在一个新的构件中执行定义的一套测试。完成后触发通知(Email,RSS等等)给相关的当事人。
- (配置如果存在)如果构建成功,这个构件会被打包并转移到一个部署目标(如应用服务器)或存储为软件仓库中的一个新版本。软件仓库可以是CI系统的一部分,也可以是一个外部的仓库,诸如一个文件服务器或者像Java.net、 SourceForge之类的网站。
- CI系统通常会根据请求发起相应的操作,诸如即时构建、生成报告,或者检索一些构建好的构件。
Jenkins就是这么一个CI系统。之前叫做Hudson。
Jenkins部署
环境
Github | https://github.com/ |
---|---|
192.168.23.27 | 部署Jenkins |
192.168.23.28 | Tomcat网站服务器 |
部署Git
192.168.23.27执行
#安装依赖包
[root@tomcat ~] yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker -y
#git官网下载最新版本GIT,如果网速慢可下载提供的安装包 链接: https://pan.baidu.com/s/1kRYq6hVa1K1C0dHMK1l7Ww?pwd=ijxw 提取码: ijxw
wget https://mirrors.edge.kernel.org/pub/software/scm/git/git-2.9.5.tar.gz
//安装Git
[root@tomcat soft] tar xf git-2.9.5.tar.gz -C /usr/local/ #解压并cd到解压目录
[root@tomcat local] mv git-2.9.5/ git
[root@tomcat /] cd /usr/local/git #进入解压目录
[root@tomcat git-2.9.5] make prefix=/usr/local/git all #编译源码包
[root@tomcat git-2.9.5] make prefix=/usr/local/git install #源码安装
#修改环境变量
[root@tomcat git-2.9.5] vim /etc/bashrc
PATH=$PATH:$HOME/bin:/usr/local/git/bin #添加内容
[root@tomcat local] source /etc/bashrc
[root@tomcat local] git --version #测试是否安装成功
git version 1.8.3.1
-
关于bashrc和profile
-
/etc/profile:此文件为系统的每个用户设置环境信息,当用户第一次!!!登录!!!时,该文件被执行. 并从/etc/profile.d目录的配置文件中搜集shell的设置.
/etc/bashrc:为每一个运行bash shell的用户执行此文件.当bash shell被打开时,该文件被读取
jdk环境部署
192.168.23.27执行
#下载软件
jdk-11.0.17_linux-x64_bin.rpm #注意:因为版本原因不能用jdk9和jdk10
链接: https://pan.baidu.com/s/1VBm6-WF-Wx-aMxF79JeZdw?pwd=17ey 提取码: 17ey
#解压安装
[root@jenkins soft]# tar xv openjdk-11+28_linux-x64_bin.tar.gz -C /usr/local/
[root@jenkins local]# mv jdk-11/ jdk
#添加环境变量
[root@jenkins local]# vim /etc/bashrc
JAVA_HOME=/usr/local/jdk
export PATH=$PATH:$JAVA_HOME/bin
#测试jdk
[root@jenkins soft]# java -version
java version "11.0.17" 2022-10-18 LTS
Java(TM) SE Runtime Environment 18.9 (build 11.0.17+10-LTS-269)
Java HotSpot(TM) 64-Bit Server VM 18.9 (build 11.0.17+10-LTS-269, mixed mode)
部署maven
192.168.23.27执行
#下载和解压Maven
链接: https://pan.baidu.com/s/1RVJO4HscAuZ1ontIJrpx3g?pwd=x3q3 提取码: x3q3 #网盘提取
wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.5.3/binaries/apache-maven-3.5.3-bin.tar.gz #官网下载
[root@tomcat soft] tar zxvf apache-maven-3.5.3-bin.tar.gz -C /usr/local/
[root@tomcat soft] mv /usr/local/apache-maven-3.5.3/ /usr/local/maven
#修改环境变量
[root@tomcat local] vim /etc/bashrc #添加如下内容
export M2_HOME=/usr/local/maven
export M2=$M2_HOME/bin
PATH=$M2:$PATH:$HOME/bin:/usr/local/git/bin
export JAVA_HOME=/usr/local/jdk
export PATH
[root@tomcat local] source /etc/bashrc
#测试maven
[root@tomcat local] mvn -version
Apache Maven 3.5.3 (3383c37e1f9e9b3bc3df5050c29c8aff9f295297; 2018-02-25T03:49:05+08:00)
Maven home: /usr/local/maven
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/local/jdk/jre
Default locale: zh_CN, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-1127.el7.x86_64", arch: "amd64", family: "unix"
部署tomcat
192.168.23.27执行
#官网下载tomcat
apache-tomcat-9.0.1.tar.gz
#网盘提取
链接: https://pan.baidu.com/s/1e6TSpN7d1yvH6dXLSoSVsA?pwd=7smt 提取码: 7smt
#解压部署
[root@tomcat soft] tar -zxvf apache-tomcat-9.0.1.tar.gz -C /usr/local/
[root@tomcat soft] mv /usr/local/apache-tomcat-9.0.1/ /usr/local/tomcat
#定义Tomcat所需环境变量
[root@tomcat soft] vim /etc/profile #插入如下内容
CATALINA_HOME=/usr/local/tomcat
export CATALINA_HOME
[root@tomcat soft] source /etc/profile
#启动Tomcat
[root@tomcat soft] /usr/local/tomcat/bin/startup.sh
#测试tomcat
http://192.168.23.27:8080/
部署Jenkins
192.168.23.27执行
#官网下载jenkins
http://updates.jenkins-ci.org/download/war/2.319 #下载最新版
#部署jenkins.war到tomcat下
[root@tomcat soft] cp jenkins.war /usr/local/tomcat/webapps/
#注释
#jenkins密码忘了,可以重置它
#重置jenkins
关闭tomcat /usr/local/tomcat/bin/shutdown.sh
rm -rf /usr/local/tomcat/webapp/jenkins*
rm -rf ~/.jenkins*
cp jenkins.war /usr/local/tomcat/webapps/
启动tomcat即可访问jenkins
#启动tomcat: 注意启动tomcat会自动解压webapps下的war包
[root@tomcat soft]# /usr/local/tomcat/bin/startup.sh
登陆Jenkins
http://192.168.23.27:8080/jenkins
如果访问报错执行
有两种方式解决:
1.卸载原来的jdk,安装官方的jdk版本。
2.在服务器额外配置插件,根据自己服务器的版本安装,如下:
#Ubuntu9以上
apt-get install ttf-dejavu
#CentOS 6
yum install dejavu-sans-fonts
#CentOS 7
yum install fontconfig
添入以下文件密码到上图页面中
[root@tomcat soft]# cat /root/.jenkins/secrets/initialAdminPassword
bdc164a2206145668fc378ca0ba7a1af #点击继续
选择suggested的插件进行下载
等待安装完成
Jenkins插件管理
简介
我们配置的是 git + maven 方式的 自动化部署 所以git和maven的相关插件是必须的 还有一个ssh用于机器间的文件传送
安装插件Deploy to container
-
作用
- 支持自动化将代码部署到tomcat容器
-
安装过程
- 系统管理-->插件管理-->可选插件-->过滤Deploy to container-->勾选,点击下边的按钮:直接安装,这个可能时间较久,等待即可
安装插件Maven Integration
- 作用
- jenkins 利用maven编译,打包,所需插件
安装git相关3个插件
- GIT plugin
- GitHub Authentication
- GitHub Branch Source
- GitHub Organization Folder
安装过程中如可选插件里没有,就多个模块点一点可能已经安装过了
安装插件:Publish Over SSH
检查错误配置
左侧:点击“系统管理”
如果有“编码问题”错误,在Tomcat–>conf–>server.xml文件中修改即可
[root@localhost ~]# head -1 /usr/local/tomcat/conf/server.xml
<?xml version="1.0" encoding="UTF-8"?>
如果有”反向代理设置有误“错误,请忽略
Jenkins系统设置
-
注意
- 这里没有强调的都设置为默认即可
-
路径
- 系统管理->(全局工具配置)Global Tool Configuration,配置jdk,git,maven的根目录
配置jdk目录
配置git目录
配置maven
关于重启jenkins
- http://server_ip:8080/jenkins/restart
- http://server_ip:8080/jenkins/exit
- http://server_ip:8080/jenkins/reload
SSH 设置
简介
(192.168.23.27)jinkens服务器上的maven将开发产生的*.war包,通过SSH自动推送到远程tomcat 服务器上(192.168.23.28),需要手工配置ssh key,配合自动化推送
- 192.168.23.27 是jenkins
- 192.168.23.28 是tomcat网站服务器,代表业务服务器
jenkins服务器准备秘钥认证
[root@jenkins local]# ssh-keygen #一直回车
[root@jenkins local]# ssh-copy-id 192.168.23.28 #把密钥推送到192.168.23.28上 注意这里的192.168.23/28是一台tomcat网站服务器。什么都不用安装,接到代码即可
[root@jenkins local]# ssh root@192.168.23.28 #测试连接成功
Last login: Wed Nov 23 11:40:18 2022 from 192.168.23.164
[root@bogon ~]#
在jenkins上配置ssh信息
准备SSH私钥
[root@bogon ~]# cat /root/.ssh/id_rsa
#复制cat出来的所有内容,粘贴到下一步页面上的key中。
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA0i1q/vpqEJStSCjks7wO+aKtNFxKVbhhgwW6C14MdG6aQ9J2
OnwQGwBsW92ID+2cMom/lAdwf68zK3A71zgWIGvcBNhNujPTezyKSfdZIww2qymc
zW81J1bPS1/V3EmbTewmuJvEpP8yaSAYNjIcMX2YW33DuO9/p18xV0tnDuzLNRpk
MiPfjL4Ya8cc+fpe8rUNDbHMIbLNd2hKTF79kB+95bNT8GWCVP8NtN6K1qnyryQd
/aSiEQHhUu1NTBbkjCeGVBmy+0rfk33viDK1dcg749FCiVv0iFqre439eZnuOtGj
bL1B62YFjs24HVGmQJrJmU0GIidSXD5z8Cl0fQIDAQABAoIBAD3SSC+Z3srjwJiC
FstbXJhHJmVJZEAUjPIqJBAl6MnyooOii04moeIfXMAkyFnPDWu8ItLa4VddZFK5
n5BtmeyNbVkreqlzhxgvtYmOLPTnKcls4wd2V48rtKu6E8DJEdp4xOb2QoA55E0R
uK1wTeSsybzXoFNsdwL3OB8yOa0kppYDcHRO0ke+MCZoE05g6L+4DNFSGxm6UQTd
lO+Hx497x2kfCCMh3hPrQvBrVGjVABNlHI4/DXDCMvhbKvNWI7sxGwZgEHd8FeR5
UTZ0xRA60LwBKnm+0eREY+Fpb1q1Pzz8KI91LTfXpJBjyHpv5LLjANV6+koKR3Mo
nzDdGy0CgYEA/h4eWey5XixZ3UaMt9W0ubFM/k+9A6ztago0ZqFHY84lWIVJqvsF
MY6AAnHGPNk7FG3BfyJOLinEcuGSQ2PavgfKVArFjhxPt1eGmhfse1MuZs/nzYJP
fhuiy0bxNZAXvdbVAtpGbRByiP4iaP6/9+0bMJQiaftvXGayepys5AsCgYEA07v5
0O5f8J3ApgP8LocqeQmsNCxyiiy/ZwXm/K++dqsUKScd2pjky3WkhbIBrXwemsmR
5fQcOUmcOmrYt538IFZgl99kcNbLEKQy2/SY4373JuKrtjGsfghzMHWq1Za2a5cO
hYMuq/4DKjpse5dprfh0RgbNadiY/5g9cbeCFpcCgYBqGWMswpTmx/fBVqp8OwMZ
IPj3mY1ekn4R7y7PxvjKqBCZtBT9CY+ykD/MRXqyfzSWo/jNPyKLTa8TFDGAZ5m2
DASjMFgprJJwB2BQyDpZh3JxRM8Q1B6ilaFT5EvjxETVY3ROm5oaAWsA3bK6SdsX
Be17S+5Od8eYOdy9KttY3wKBgQCj60ZHIxSxYl/P5wvoNYqDNCLWLYbrRCNWLfKa
s7A/jMjJ51escWvHvCcHvjygQ5Qp/11tamQjUcKaUze+R5f2rQiQ60iGNzP0iTo6
oQ1wKk5LE3ceUSyaUg5jeOUuAETv3H1IjbunObrXiW2M7TbKkavqvr9ub1pbnlAL
ZqdWtwKBgH6TXyNXjQcloU/kVh2d42gLp8lQ587mODl3G6wn7p9EKzDaEYXactj4
rISNiJCw0G5Sorzry8e6QDBYZSrQes2AxKL5xAX4gs58fJwnbvKvCzpubASM05ml
ym/eHttFhRFtrYudgjsuyag1wJ8Ua1GzI1ess8/t32eHwLqmU6lR
-----END RSA PRIVATE KEY-----
进入jenkins系统设置
新建任务
创建任务
定义名称和类型
设置maven
公有git仓库
选择版本控制器和仓库地址
https://github.com/bingyue/easy-springmvc-maven
注意:如果是私有仓库,这里需要建立credentials身份认证
设置触发器(保持默认)
设置构建(编译打包)
手动添加Goals and options clean package -Dmaven.test.skip=true
构建后操作
在构建后设置中 选择:(send build artifacts over ssh)通过SSH发送构建工件
-
说明:
-
name ssh server 因为之前的配置会默认出现tomcat业务服务器的名字
-
source file
- target/.war 构建之后,在jenkins服务器上是可以自动看到war包的,(该路径不需要创建) ls /root/.jenkins/jobs/testjob1/builds/target/.war
-
Remove prefix 自动删除路径前缀(不需要创建路径前缀)
-
Remote directory tomcat业务服务器上的路径,需要提前在192.168.23.28(tomcat)上创建该目录。用来存放网站源代码。(需要后台创建)
[root@bogon local]# mkdir /jenkins/war -p
-
Exec command tomcat(192.168.0.109)在接收到源码之后的自定义动作。
比如:将源码拷贝到网站的主目录(/jenkins),并执行一些其他操作如重启服务器等(或创建文件touch)(需要后台创建) -
[root@bogon local]# mkdir /jenkins/sh [root@bogon local]# vi /jenkins/sh/1.sh touch /123.com [root@bogon local]# chmod +x /jenkins/sh/1.sh [root@bogon local]# chmod +x /jenkins/sh/
-
开始构建
查看构建结果
观察tomcat网站服务器,代码和脚本
[root@bogon ~]# ls /jenkins/
sh war
[root@bogon ~]# ls /jenkins/war/
easy-springmvc-maven.war #easy-springmvc-maven.war 就是推送过来的网站源码了
[root@bogon ~]# ls /123.com
/123.com