Jenkins自动化系统部署

模式:Jenkins+gitlab
Git是什么,版本管理工具。GitLab 私有化的“GitHub”,管理代码版本的平台
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有.

流程原理:Jenkins从gitlab代码库下载代码到本地,然后构建再通过脚本远程发布到应用服务器。

具体的创建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参考文档:gitlab安装使用_水煮胡萝卜的博客-CSDN博客_萝卜.gitlab

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

在默认或修改后的工作存储目录(/data/gitlab-data/repositories)下创建一个gitlab存放代码的仓库目录,并把上面创建的测试项目demo克隆到此目录下:

mkdir -p /data/gitlab-data/repositories/test_repo

cd /data/gitlab-data/repositories/test_repo

git clone git@192.168.102.129:root/demo.git

克隆完成后/data/gitlab-data/repositories/test_repo目录下就会看到一个demo的目录,然后把需要上传的代码cp到/data/gitlab-data/repositories/test_repo/demo目录下,这里是一个测试的代码文件就是index.html

依次执行下面三个步骤(前两个可忽略):

#git config --global user.email "benngcc@163.com"

#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环境并加入环境变量可参考:jdk安装(Java环境)_水煮胡萝卜的博客-CSDN博客

#卸载原有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 root@192.168.102.134

下面这步在远程应用服务器上执行

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 git@192.168.102.139:root/maven-demo.git

cd maven-demo

#用ftp把本地项目传到gitlab项目下,然后依次执行下面命令

git init

git remote add origin git@192.168.102.139: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配置。后续完善...

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐