jenkins+git+github搭建及代码持续集成,自动部署上线

192.168.1.30:
jenkins+git+github搭建及代码持续集成,自动部署上线_第1张图片
Jenkins是一个开源软件项目,是基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。(通过自动化的持续集成可以将这些重复的动作都变成自动化的,包括代码编译、数据库集成、测试、审查、部署及反馈。)Jenkins的前身是Hudson,主要创建者是川口清子(Kohsuke Kawaguchi)
《Jenkins官方文档》
持续集成是一种软件开发实践,频繁地(一天多次)将代码集成
持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」
持续部署即在持续交付的基础上,把部署到生产环境的过程自动化
搭建前建议先查看产品发布流程: 以jenkins+git/svn自动部署为例,产品发布流程
Jenkins功能

1、持续的软件版本发布/测试项目。
2、监控外部调用执行的工作。

(注意:本案例以jenkins+git+GitHub+邮件为主。若没有连接邮箱,邮箱操作可以省略,svn配置也是可以省略)

一、环境准备:使用yum安装jenkins
最好可以准备两台服务器:jenkins Server、gitlab Server

[root@room9pc01 ~]# yum -y install java-1.8.0.openjdk
[root@room9pc01 ~]# wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo

[root@room9pc01 ~]# wget -O /root/jenkins.io.key https://pkg.jenkins.io/redhat/jenkins.io.key

[root@room9pc01 ~]# rpm --import  /root/jenkins.io.key 

[root@room9pc01 ~]# yum clean all && yum makecache
[root@room9pc01 ~]# yum install -y jenkins     //安装会比较久
[root@room9pc01 jenkins]# systemctl start jenkins

jenkins+git+github搭建及代码持续集成,自动部署上线_第2张图片
yum makecache 是 将服务器上的软件包信息 现在本地缓存,以提高 搜索 安装软件的速度(元数据缓存创建)

[root@room9pc01 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword  //查询admin密码 ,并复制

访问 http://ip:8080/ 进行安装插件 ,输入用户名admin,粘贴密码

[root@room9pc01 jenkins]# firefox http://ip:8080

jenkins相关目录:

[root@room9pc01 jenkins]# rpm -ql jenkins
/etc/init.d/jenkins # 启动文件

/etc/logrotate.d/jenkins # 日志分割配置文件

/etc/sysconfig/jenkins # jenkins主配置文件(端口,用户等)

/usr/lib/jenkins # 存放war包目录

/usr/lib/jenkins/jenkins.war # war 包 (升级jenkins,将新版本的war包替换即可,不能手动解压,它会自动解压)

/usr/sbin/rcjenkins # 命令

/var/cache/jenkins # war包解压目录 jenkins网页代码目录

/var/lib/jenkins # jenkins 工作目录

/var/lib/jenkins/workspace    #项目存放目录

Jenkins默认的端口号是8080,修改方法:
下载war包安装

[root@room9pc01 ~]# wget -c -O /var/lib/jenkins/jenkins.war http://mirrors.jenkins.io/war-stable/latest/jenkins.war

cd 到Jenkins的安装目录(即jenkins.war所在目录)

[root@room9pc01 ~]# cd /var/lib/jenkins/

1)命令行修改端口:
(需要重启计算机,才生效)

[root@room9pc01 jenkins]# java -jar jenkins.war --httpPort=8081   //更改端口为8081,也可以设置为其他的端口

如图出现下面信息则表示成功:
信息: Jenkins is fully up and running
jenkins+git+github搭建及代码持续集成,自动部署上线_第3张图片
若出现如下问题:其原因是因为服务器配置了自定义的host name 没有在hosts文件中定义.
在这里插入图片描述解决:进入etc/hosts 编辑,在127.0.0.1 添加你的hostname

[root@room9pc01 ~]# vim /etc/hosts
127.0.0.1   room9pc01.example.com 

2)配置文件修改端口
(永久修改)

[root@room9pc01 jenkins]# systemctl stop jenkins
[root@room9pc01 jenkins]# vim /etc/sysconfig/jenkins   
......
JENKINS_PORT="8081"          //默认是8080
......
[root@room9pc01 jenkins]# systemctl restart jenkins

访问测试

[root@room9pc01 jenkins]# firefox http://ip:8081    

二、相关工具安装

工具安装可在jenkins的web界面系统管理—管理插件—可选插件勾选需要的,也可以手动安装。

2.1 maven安装

[root@room9pc01 jenkins]# cd /usr/local/
[root@room9pc01 local]# wget http://mirror.bit.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
[root@room9pc01 local]# mv /usr/local/apache-maven-3.6.0   /usr/local/maven
[root@room9pc01 local]# echo "export PATH=$PATH:/usr/local/maven/bin" > /etc/profile.d/maven.sh
[root@room9pc01 local]# source /etc/profile.d/maven.sh
[root@room9pc01 local]# mvn -version  //查看版本

2.2 jdk安装

下载地址:https://download.oracle.com/otn-pub/java/jdk/8u201-b09/42970487e3af4f5aa5bca3f542482c60/jdk-8u201-linux-x64.tar.gz

  [root@room9pc01 ]# tar -zxvf jdk-8u201-linux-x64.tar.gz -C /usr/local 
  [root@room9pc01 ]# ln -sv /usr/local/jdk1.8.0_201/ /usr/local/jdk1.8
  [root@room9pc01 ]# echo "export PATH=$PATH:/usr/local/jdk1.8/bin" >/etc/profile.d/java.sh
  [root@room9pc01 ]# source /etc/profile.d/java.sh

2.3 svn安装(若版本控制不是svn,则不用操作)

   [root@room9pc01 ~]# yum install subversion -y
   [root@room9pc01 ~]# mkdir /svnrepo
   [root@room9pc01 ~]# cd /svnrepo/project1/    //必须依次修改以下三个文件
   [root@room9pc01 conf]# vim  svnserve.conf   
   [general]                                    //以下四行去掉注释,必须顶格写
   anon-access = none                           //改为none
   auth-access = write
   password-db = passwd
   authz-db = authz
   
   [root@room9pc01 conf]# vim passwd 
   [users]
   # sally = sallyssecret
   svnman = 123456
   
   [root@room9pc01 conf]# vim authz 
   [groups]
   [/]
   svnman = rw

  启动项目1:
   [root@room9pc01 ~]# svnserve -d -r /svnrepo/project1/ 
  启动整个项目:
  [root@room9pc01 ~]#  svnserve -d -r /svnrepo/

2.4 Git安装

 [root@room9pc01 ~]# yum install curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc-c++ perl-ExtUtils-MakeMaker wget autoconf -y
 [root@room9pc01 ~]# wget https://www.kernel.org/pub/software/scm/git/git-2.7.3.tar.gz
 [root@room9pc01 ~]# tar xf git-2.7.3.tar.gz
 [root@room9pc01 ~]# cd git-2.7.3
 [root@room9pc01 ~]# make configure
 [root@room9pc01 ~]# ./configure --prefix=/usr/local/git
 [root@room9pc01 ~]# make profix=/usr/local/git
 [root@room9pc01 ~]# make install
 [root@room9pc01 ~]# echo "export PATH=$PATH:/usr/local/git/bin" > /etc/profile.d/git.sh
 [root@room9pc01 ~]# source /etc/profile.d/git.sh
 [root@room9pc01 git-demo-project]# git config --global user.name " your name"
 [root@room9pc01 git-demo-project]# git config --global user.email  "your email"

关于git与github的关联
1 创建公钥和私钥

   [root@room9pc01 ~]# ssh-keygen 

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa): Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:5SGYye8oxCKFJjddb4W8JC0RAQhBWCvuG8aZL8eMJs4 root@Jenkins
The key’s randomart image is:
±–[RSA 2048]----+
|…=* … |
|…o oo
. |
|+.= . =++.o |
|++ o o.+ . |
|… o S . |
|o.oo o |
| B+ . . . |
|++++ . |
|+Eo. |
±—[SHA256]-----+

 [root@room9pc01 ~]# cat .ssh/id_rsa.pub 
 [root@room9pc01 ~]# Jenkins ~]# cat .ssh/id_rsa

2 注册GitHub帐号 ,浏览器访问github官网 : https://github.com/ ,点击Sign up 进行注册
在github中添加公钥id_rsa.pub
部署密钥:

jenkins+git+github搭建及代码持续集成,自动部署上线_第4张图片

3 GitHub配置
将需要上传的放到git项目文件下

[root@room9pc01 ~]# cd git-demo-project/
[root@room9pc01 git-demo-project]# ls
jenkins  master.zip  Test_Item

将本地文件上传到GitHub上:进入终端

[root@room9pc01 ~]# git clone https://github.com/lincyou/Test_Item.git
[root@room9pc01 ~]# git add Test_Item/
[root@room9pc01 ~]# git commit -m "上传"
[root@room9pc01 ~]# git push

jenkins+git+github搭建及代码持续集成,自动部署上线_第5张图片
刷新,看一下有所上传的文件,成功。

  [root@room9pc01 ~]#  git config --global user.name "Your Name"           //配置一下姓名和邮箱
  [root@room9pc01 ~]# git config --global user.email "[email protected]"

继续将本地代码上传到Github

[root@room9pc01 git-demo-project]# cp master.zip Test_Item/
 [root@room9pc01 git-demo-project]#cd Test_Item/
[root@room9pc01 Test_Item]# git add .
[root@room9pc01 Test_Item]# git commit -m "提交master"
[root@room9pc01 Test_Item]# git remote add origin https://github.com/lincyou/Test_Item.git                 
[root@room9pc01 Test_Item]# git push -u origin master
Username for 'https://github.com':                    //输入github 用户名
Password for 'https://[email protected]':            //输入github 密码

查看github可以看到master.zip已经上传到Test_Item/

补充:
若上传大文件到GitHub上,出现:

fatal: The remote end hung up unexpectedly
Everything up-to-date

解决:需下载一个 Git LFS 客户端,具体操作寻问度娘

2.5 密码破解(若是忘记了web界面登录密码)

[root@room9pc01 ~]#cd /var/lib/jenkins/users/admin_7014882124903007609 #此为admin用户的目录,也可以对应自己创建的用户

[root@room9pc01 admin_7014882124903007609]# vim config.xml 

定位到passwordHash删除改行,改为
#jbcrypt:$2a$10$pDQks0ytOkCfmpdgpLygrOC3uY7i/XnZHBKRQDhrBPwKoN2f5Kz8C

重启一下jenkins
新密码为admin

三、WEB界面配置
一) 系统设置(初学者可以略过,非必须操作,可先不进行设置)
1Jenkins配置优化
1.1配置jenkins并发执行数量,提高执行效率。依次点击:系统管理 >> 系统设置 >> Maven项目配置:执行者数量填:5

jenkins+git+github搭建及代码持续集成,自动部署上线_第6张图片
2. 设置邮件,能够在测试完成后,主动发邮件告知测试情况。
在jenkins所在服务器上,配置邮件服务器解析;

[root@room9pc01 ~]# vim /etc/hosts
176.130.6.81 smtp.163.com

在邮箱设置设置开启POP3/SMTP和IMAP/SMTP打钩,客户端授权密码
jenkins+git+github搭建及代码持续集成,自动部署上线_第7张图片
2.1系统管理 >> 系统设置 >> Jenkins Location
jenkins+git+github搭建及代码持续集成,自动部署上线_第8张图片
2.2 向下拉,找到邮件通知,配置邮件的smtp信息(邮箱协议选择SSL,则端口用465。默认端口是25)
注意:SMTP用户名是发件人邮箱,SMTP认证的密码是授权码
jenkins+git+github搭建及代码持续集成,自动部署上线_第9张图片
配置完成后点击 Test configuration 进行测试,测试成功后,点击保存

二) 全局工具配置
1 maven配置
针对之前手动安装的maven需要在web界面配置进行结合。
系统管理—全局工具配置(Maven Configuration)配置:
jenkins+git+github搭建及代码持续集成,自动部署上线_第10张图片
此处为手动安装的maven,需要取消自动安装maven,name可以自定义,MAVEN_HOME指定下载安装的maven具体文件目录jenkins+git+github搭建及代码持续集成,自动部署上线_第11张图片
2 jdk配置
对应手动安装的jdk,需要web配置java_home路径
jenkins+git+github搭建及代码持续集成,自动部署上线_第12张图片
3 Git配置
jenkins+git+github搭建及代码持续集成,自动部署上线_第13张图片

Jenkins新建项目中源码管理使用Git时遇到如下问题:
Failed to connect to repository : Error performing command: git ls-remote -h http://192.168.0.22/finance/AMS-Server.git HEAD
解决:
打开Jenkins的 主页面 > 系统管理 > Global Tool Configuration
如上面"whereis git"的地址为"/usr/local/git",则应该填入 “/usr/local/git/bin/git”) 并保存
4 在jenkins上,配置Github Plugin

系统管理—>系统设置—>GitHub --> Add GitHub Sever
jenkins+git+github搭建及代码持续集成,自动部署上线_第14张图片
jenkins+git+github搭建及代码持续集成,自动部署上线_第15张图片

三 )插件安装
系统管理—管理插件—已安装
1 检查是否有“选择自己需要的插件进行安装即可。如果没有,则需点击“可选插件”,找到所需的插件并安装 ,也可选择全部安装。
2 若没有或者需要安装其他的,可以上jenkins的官网下载,并且点击插件管理的高级,选择上传插件
官网:https://plugins.jenkins.io/jenkins+git+github搭建及代码持续集成,自动部署上线_第16张图片
四、构建项目
新建Item—填入项目名称—选择构建一个自由风格的软件项目—确定 ,源码管理选择git
4.1 设置:GitHub与jenkins关联
点击“右上角下拉的setting——》安全”:生成一个访问令牌。jenkins+git+github搭建及代码持续集成,自动部署上线_第17张图片得到一个token,自己先保存此token,如果丢失,之后再也无法找到token。

jenkins+git+github搭建及代码持续集成,自动部署上线_第18张图片
jenkins+git+github搭建及代码持续集成,自动部署上线_第19张图片
2.点击项目里面的Settings----Webhooks
jenkins+git+github搭建及代码持续集成,自动部署上线_第20张图片
这个PayloadURL填的就是http://XXX(你的服务器):端口号8081/项目名(照抄),其他的照抄
jenkins+git+github搭建及代码持续集成,自动部署上线_第21张图片

4. 2 创建一个新的任务
输入项目的名称:clsn-test,选择构建只有分风格的软件
在jenkins中添加私钥id_rsa
jenkins+git+github搭建及代码持续集成,自动部署上线_第22张图片
在首页中,点击项目名称的下拉监听,选择源码管理,先将GitHub的项目地址复制过来
jenkins+git+github搭建及代码持续集成,自动部署上线_第23张图片
点击add,输入github的用户名和密码
jenkins+git+github搭建及代码持续集成,自动部署上线_第24张图片
选择构建

     拉到最底部,选择使用shell脚本

jenkins+git+github搭建及代码持续集成,自动部署上线_第25张图片
脚本内容
jenkins+git+github搭建及代码持续集成,自动部署上线_第26张图片
创建测试环境

 [root@room9pc01 ]# mkdir  -p /data/www
 [root@room9pc01 ]# chown -R jenkins.jenkins /data/

选择构建后的操作,让每次构建完成后都将结果发送给管理员
jenkins+git+github搭建及代码持续集成,自动部署上线_第27张图片
测试手动集成
回到主页,点击构建jenkins 上的项目,点击右侧的“立即构建”按钮进行测试,可以看到 项目下的工作区有master.zip

命令行查看,可以发现已经在/data/www/下(即上线成功)

[root@room9pc01 Test_Item]# ls /data/www/
master.zip 

你可能感兴趣的:(Linux)