Jenkins自动化系统部署
模式:Jenkins+gitlab
Git是什么,版本管理工具。GitLab 私有化的“GitHub”,管理代码版本的平台
Jenkins只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有
流程介绍:自我理解开发把代码上传到gitlab上,然后通过Jenkins配合一些插件和脚本可以远程发布到引用服务器。
具体的创建Jenkins任务的过程为
1.创建jenkins任务
2.填写Server信息
3.配置git参数
4.填写构建语句(shell脚本),实现自动部署
服务器环境
一台jenkins服务器:192.168.4.117
一台gitlab服务器:192.168.4.81
一台web测试服务器:192.168.4.91
安装gitlab
https://blog.csdn.net/Doudou_Mylove/article/details/86756435
gitlab部署项目如下:
根据提示需要给配置文件添加SSH密钥
gitlab服务器上执行
ssh-keygen -t rsa
把公钥复制到gitlab上如下位置
修改配置文件
vim /opt/gitlab/embedded/service/gitlab-rails/config/gitlab.yml
重启gitlab
gitlab-ctl restart
安装git客户端
yum -y install git
创建一个gitlab仓库目录,并把上面创建的测试项目demo克隆到此目录下:
mkdir /data
cd /data
git clone [email protected]:root/demo.git
如果是新创建的项目在克隆的时候会提示你克隆的是一个空项目。
测试上传一个文件:
依次执行下面五步:
git config --global user.email "[email protected]"
git config --global user.name "root"
git add *
git commit -m "add index.html"
git push origin master
#前面两个是全局设置,第三行是把当前目录下所以文件暂存起来,第四行提交到gitlab,最后一行是将本地的master分支推送到origin主机,同时指定origin为默认主机,后面就可以不加任何参数使用git push了(git push,默认只推送当前分支)。
安装Jenkins
需要先安装Java环境并加入环境变量
https://blog.csdn.net/Doudou_Mylove/article/details/89377512
#卸载原有Jenkins(可选):
systemctl status jenkins
systemctl stop jenkins
yum -y remove jenkins
find / -name jenkins
rm -fr /var/cache/jenkins/
rm -fr /var/lib/jenkins/
开始安装Jenkins
cd /etc/yum.repos.d/
wget http://pkg.jenkins.io/redhat/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
查看Jenkins有关配置文件
[root@localhost ~]# rpm -ql jenkins
/etc/init.d/jenkins
/etc/logrotate.d/jenkins
/etc/sysconfig/jenkins //主配置文件,可修改用户和端口等
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins
/var/lib/jenkins //数据存放目录
/var/log/jenkins
启动Jenkins
systemctl start jenkins
#如果是下载的war包,运行Jenkins (下载的War可以直接运行)
#nohup java -jar jenkins.war --httpPort=22000 &
#22000是Jenkins端口
#cat /root/.jenkins/secrets/initialAdminPassword
#查看初始化密码,这个文件位置可以日志(nohup.out)里找到
#或者直接下载Jenkins的war包到tomcat的webapps目录下(需要先安装tomcat),启动tomcat(./startup.sh)的时候Jenkins也就启动了,然后通过浏览器访问时要在端口后面加Jenkins:
例如:http://192.168.102.128:8080/Jenkins
这里用yum安装的Jenkins,所以就用下面方式访问:
浏览器输入http://192.168.102.128:8080/
解锁目录:/var/lib/jenkins/secrets/initialAdminPassword
安装gitlab插件
插件要安装下面几个,依次在可选插件里面搜索安装,然后重启Jenkins:
"Gitlab Hook"、"Build Authorization Token Root"、"Publish Over SSH"、"Gitlab Authentication"、"Gitlab"、"Maven Integration"
先做一个动作:
在gitlab上创建一个访问令牌
名称随便写,时间设置的尽量长一点,都画勾,点击创建个人访问令牌就会显示一串编码,复制下来后面会用
然后在Jenkins服务器上做免密钥登录到远程应用服务器为下面的系统设置做铺垫
ssh-keygen -t rsa
ssh-copy-id -i /root/.ssh/id_rsa.pub [email protected]
下面这步在远程应用服务器上执行
chmod 644 authorized_keys
同时把公钥也配置到gitlab web端一份
再把私钥配置到Jenkins自身web端
选择凭据,点击global
接着在Jenkins上设置系统设置:
上面这个位置点击”添加-Jenkins”会显示个人访问令牌页面,把上面gitlab上创建记录好的令牌编码粘贴过来
再往下填写发布到远程的应用服务器信息,名称随意,重点是IP和用户名,远程目录必须要存在,切记一定要点击右下角的测试,如果显示成功则说明上面我们在Jenkins上传到远程应用服务器上的公钥是生效的。
继续在Jenkins上安装maven:
安装maven的目的是通过项目中的pom.xml文件自动解决项目依赖问题,构建项目。解压即可用,为下面的全局设置做铺垫
cd /usr/local
wget http://mirrors.hust.edu.cn/apache/maven/binaries/apache-maven-3.2.2-bin.tar.gz
tar -xvf apache-maven-3.5.2-bin.tar.gz
mv apache-maven-3.5.2 maven
配置环境变量
vim /etc/profile
export M2_HOME=/usr/local/maven-3.5.2
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$M2_HOME/bin:$PATH
source /etc/profile
mvn –version
#注意环境变量是跟Java的变量有联系的。
接着设置Jenkins全局设置:
主要修改jdk和maven
开始创建项目(只有安装上maven插件才能构建maven项目):
填写gitlab库地址,然点击“添加-Jenkins”添加凭证,默认就行
再往下标注处画勾,并记住gitlab webhook网址,点击下面“高级”
点击“高级”记住私密令牌,这个令牌和上面的webhook网址会在后面一同用到
最后点击“构建后操作”,注意SSH服务器发布格式:
最后回到gitlab,点击“项目-设置-集成”
把上面在Jenkins活动配置里面记录的webhook和令牌编码填到对应的位置:
验证可选,但是一定要测试一下,返回挂钩200说明成功:
当你上面点击验证测试的时候实际上相当于从gitlab上提交过一次了,回到Jenkins查看是红色的,点击小红圈看日志:提示没有pom.xml文件,原因是我们gitlab本地的仓库目录没有真正的maven项目,所以在上面测试推送的时候会报错:
接下来去和开发要一个测试maven项目,然后从本地上传到gitlab,然后看结果:
主要用上面标注的这个文件夹。
项目介绍:这是一个简单的测试maven项目
用途:gitlab+jenkins+maven
使用方式:
推送现有文件夹(可以用eclipse,本地git等,我用的是ftp)到gitlab,再通过Jenkins发布到远程服务器
先把gitlab项目克隆到指定位置
git clone [email protected]:root/maven-demo.git
cd maven-demo
用ftp把本地项目传到gitlab项目下,然后依次执行下面命令
git init
git remote add origin [email protected]:root/maven-demo.git
git add .
git commit -m "初始提交"
git push -u origin master
第一次发布会下载好多pom.xml依赖的东西,时间较长
执行成功后去远程应用服务器根据前面系统设置和Jenkins活动配置的SSH目录查看是否收到代码:
发布到远程服务器如果是一个jar包可以手动启动也可以在Jenkins编写shell脚本执行:
手动:java –jar 包名
#注意启动之后窗口不能关闭,可以选择后台启动
启动之后可以去浏览器查看:
正常都会新建一个start.sh脚本,port端口自己指定,把脚本放到Jenkins里面自动执行,从而达到全自动化发布
vim start.sh
#!/bin/bash
nohup java -jar xxx.jar --server.port=xxxx &
./start.sh
#如果不是maven项目的话,就更简单,在Jenkins上创建一个自由活动,而且减少了maven配置。后续完善...