Jenkins持续集成git、gitlab、sonarqube(7.0)、nexus,自动化部署实战,附安装包

导读

  之前用的都是SVN,由于工作需要用到Git,求人不如求己技多不压身多学一项技能未来就少求别人一次,系统的学一遍,自己搭建一整套环境,自动化部署(自动发版),代码质量检测等等(为啥不用docker搭建环境呢,个人平时比较忙,暂未学习docker,过段时间会学docker相关,也会写相应博文)。为啥要打水印,Wechat上有人告诉我,之前很多博文,被某些网站白嫖,然后挂到自己网站(未来博客上都会打水印),~@¥#%¥@%#@%¥再次声明,创作不易,严禁转载!!!

踩坑

  从10月12、13(周末)天天搞到夜里2、3点,周一至周五,由于个人原因,刚换份工作,平时也忙,个人精力有限,只能晚上花2、3小时,学习-搭建-踩坑-度娘-搭建-成功,一直到今天,才完整的搭建出来,博客才发出来。安装过程中,并不是一帆风顺的,在此为了避免学习的小朋友踩相同的坑,最好版本和我一致,下面都会有提供我使用的安装包。那些坑,我已经巧妙的绕开啦,按照我的步骤来,干就完事儿啦,欧力给~

演示环境

  1. mac系统
  2. 虚拟机:Centos 6.5(我分配了4G,2核,配置低了会卡!里面用到ES服务器配置低,服务起不来,ES脑补链接:点我直达,磁盘至少分50G,当初我给了20G,最后服务配置太多以后,导致服务跑不起来了)

Git

Git是什么

  Git 是一个开源分布式版本控制系统,用于敏捷高效地处理任何或小或大的项目

  Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

  Git 与常用的版本控制工具 CVS, Subversion 等不同,它采用了分布式版本库的方式,不必服务器端软件支持。

Git的安装

  官网地址:https://git-scm.com/downloads

  不要慌,最下面我会提供我使用的所有安装包

linux:yum install -y git
mac:自带的有git
windows:需要自动手动下载,一直下一步即可

安装git完成

  yum自动下载的git不是最新的,如果想安装最新的git版本,自行百度查,方法很多滴~由于时间关系,就不带领小伙伴实操啦,功能都大差不差的。

常用命令

帮助

1、git                       查看git的帮助文档
2、git --help              查看git的帮助文档
3、git add --help        查看某个命令的帮助文档

版本号

生产空的本地仓库

将文件添加暂存区

提交

初次commit之前,需要配置用户邮箱及用户名

git config --global user.email "you@example.com"
git config --global user.name "Your Name"

git commit:将暂存区的文件提交到本地仓库

远程仓库

echo "# git-test" >> README.md
git init
git add README.md
git commit -m "first commit"
git branch -M master
git remote add origin https://github.com/543210188/git-test.git
git push -u origin master

推送

git push -u origin master:往名字为origin的仓库的master分支上提交变更

拉取

1、git fetch       拉取远程仓库的变更到本地仓库
2、git merge origin/master    将远程的变更,合并到本地仓库的master分支

3、上面2个命令等价于 git pull

取消添加

git rm --cache 1.txt
注意:如果只是:git rm --cache,仅删除暂存区里的文件
如果不加--cache,会删除工作区里的文件,并提交到暂存区

恢复文件

1、git checkout master 文件名

注:直接加文件名,从暂存区将文件恢复到工作区,如果工作区已经有该文件,则会覆盖

加了[分支名]+文件名,表示从分支名为所写的分支名中拉取文件,并覆盖工作区里的文件

git文件状态

git status  查看git的状态

git图形化客户端

官网:https://www.sourcetreeapp.com/ 

 

 

拉取代码

分支

  软件项目中启动一套单独开发路线的方法,可以避免版本兼容开发问题,避免不同版本影响,封装一个开发阶段,解决bug的时候新建分支,用于对该bug的研究。

创建分支&查看分支

创建分支:git branch 分支名
查看分支:git branch
注:列出所有的分支,分支前面有*号,代表当前所在那个分支

删除分支

删除:git branch -d 分支名
注:不能删除当前所在的分支

修改分支名

修改分支名:git branch -m 旧分支名 新分支名

开发v2.0版本分支(切换分支并推送到github)

切换分支:git checkout 分支名
注:如果在分支上面对文件进行修改之后,没有commit就切换到另外一个分支,是不允许的,必须commit之后,才能切换分支

强制切换分支:git checkout -f 分支名
注:强制切换分支,如果有未提交的变更,直接丢弃

查看历史

查看提交历史:git log
查看最近2次的提交:git log -2
查看最近2次提交差异:git log -p -2
查看某个人提交的代码:git log --author 作者
显示简要的信息:git log --oneline
整个提交历史:git log --graph

代码对比

作用

  1. 解决冲突
  2. 制作补丁
比较工作区跟暂存区的差异:git diff
比较暂存区与分支差异:git diff --cached 或者 --staged
跟当前分支比较:git diff HEAD
比较当前分支与另外一个分支差异:git diff 分支名
查看两个分支的差异(针对已提交):git diff 分支名1 分支名2
查看单纯的一个文件差异:git diff 文件名
查看两次不同提交差异:git diff commitid_1 commitid_2
查看有变更的文件:git diff --stat

git更改提交 

用途

  1. 将暂存区中不必要的文件移除
  2. 版本回滚
  3. 只修改提交的摘要信息
把暂存区中的文件移除出来_1:git reset HEAD 文件名 
把暂存区中的文件移除出来_2:git reset HEAD^
修改暂存区中的摘要信息(需要重新提交git commit -m "test"):git reset --soft HEAD^
丢失修改过的代码(重置代码):git reset --hard HEAD^

分支合并冲突

分支合并(拿指定的分支名与当前分支进行合并):git merge 分支名

 

 

冲突解决

合并分支:git merge 分支名
查看冲突文件(重要):git diff --name-only --diff-filter=U

  注:视情况,是只要master的代码还是v2.0(分支)代码,我这里处理是要2边的代码。 

标签

打上标签(给最近的打上标签):git tag 标签名
给指定的提交打上标签(git log获取commitid值,也就是获取提交的版本):git tag 标签名 commitid
显示标签(以字母序,非时间):git tag
显示该标签提交的那次相关信息:git show 标签名
删除标签(不会删除那次提交):git tag -d 标签名
将标签推送到远程服务器上(标签必须存在):git push origin 分支名 标签名
删除远程服务器上的标签:
1、删除本地的标签:git tag -d 标签名
2、删除远程的:git push origin :refs/tags/标签名

 

gitignore文件 

用途

  1. 忽略不必要的文件 

1、创建gitignore文件:touch .gitignore
2、在.gitignore添加忽略的目录:
target
.idea


.log:表示忽略项目中所有以.log结尾的文件
123?.log:表示忽略项目中所有以123加任意字符的文件 
/error.log:表示忽略项目中根目录中的error.log 这个文件 
src/main/test/:表示忽略/src/main/test/目录下的所有文件
*.class **/java/:匹配所有java目录下的所有文件
!/error.log:表示在之前的匹配规则下,被命中的文件,可以使用!对前面的规则进行否定
如果项目已经推送到远程服务器中,可通过这种方式删除
1、先删除本地暂存区文件(git rm -rf --cache target/):git rm -rf --cache 目录名
2、提交:git commit -m "删除本地暂存区"
3、推送:git push

Gitlab

简介

  GitLab 是一个用于仓库管理系统的开源项目,使用Git作为代码管理工具,并在此基础上搭建起来的web服务。安装方法是参考GitLab在GitHub上的Wiki页面。

为什么要使用gitlab? 

  1. 基础功能开源,可自行搭建
  2. 可以进行权限控制,使代码对部分人可见

安装gitlab(Centos6.5)

目录结构及说明

/etc/gitlab/gitlab.rb          #gitlab配置文件
/opt/gitlab                    #gitlab的程序安装目录
/var/opt/gitlab                #gitlab目录数据目录
/var/opt/gitlab/git-data       #存放仓库数据
gitlab-ctl reconfigure         #重新加载配置
gitlab-ctl status              #查看当前gitlab所有服务运行状态
gitlab-ctl stop                #停止gitlab服务
gitlab-ctl stop nginx          #单独停止某个服务
gitlab-ctl tail                #查看所有服务的日志

Gitlab的服务构成:
nginx:                 静态web服务器
gitlab-workhorse        轻量级反向代理服务器
logrotate              日志文件管理工具
postgresql             数据库
redis                  缓存数据库
sidekiq                用于在后台执行队列任务(异步执行)

官网

官网:https://about.gitlab.com/

国内镜像:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

在线下载及安装

yum install -y curl policycoreutils-python openssh-server        #安装依赖
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-13.1.11-ce.0.el6.x86_64.rpm --no-check-certificate  #centos6.5
rpm -ivh gitlab-ce-13.1.11-ce.0.el6.x86_64.rpm # 安装包gitlab
sudo service postfix start
sudo chkconfig postfix on

linux其他版本安装方式

  centos其他版本下载包方式,当然啦,也可以先把包下载到本地,然后在丢到linux,执行安装效果是一样的

修改对外开放域名或ip

vim /etc/gitlab/gitlab.rb

打开后有一行 external_url 的设置改成要对外开放 web 的 url ,
例如我可以指定 git.chenyanbin.com
只想內部使用也可以改成 http://192.168.199.199:8888 这样的内部IP地址.

配置生效:gitlab-ctl reconfigure
重启:gitlab-ctl restart
设置防火墙端口(防火墙已全部关闭的话,可忽略):vim /etc/sysconfig/iptables

启动gitlab

sudo gitlab-ctl reconfigure
sudo lokkit -s http -s ssh
停止gitlab:gitlab-ctl stop
重启gitlab:gitlab-ctl start

登录

  注:第一次登录时,需要设置初始密码,然后用root+密码登录即可

创建项目并推送到gitlab

  本地新建一个项目并用git,将文件夹推送到gitlab上。

邮件服务

作用

  1. 有合并请求时,邮件通知
  2. 账号注册时,邮件验证
  3. 修改密码时,通过邮件修改

步骤

  1. 开启QQ邮箱的smtp服务
  2. 修改gitlab配置
  3. 测试邮件服务是否正常

gitlab_rails['smtp_enable'] = true 
gitlab_rails['smtp_address'] = "smtp.qq.com" 
gitlab_rails['smtp_port'] = 465 
gitlab_rails['smtp_user_name'] = "543210188@qq.com" 
gitlab_rails['smtp_password'] = "邮箱随机字符串" 
gitlab_rails['smtp_domain'] = "qq.com" 
gitlab_rails['smtp_authentication'] = "login" 
gitlab_rails['smtp_enable_starttls_auto'] = true 
gitlab_rails['smtp_tls'] = true 
user['git_user_email'] = "543210188@qq.com" 
gitlab_rails['gitlab_email_from'] = '543210188@qq.com'
重启配置文件:gitlab-ctl reconfigure
重启服务:gitlab-ctl restart

 测试邮件

gitlab-rails console
Notify.test_email('543210188@qq.com','邮件测试','博客地址:https://www.cnblogs.com/chenyanbin/').deliver_now

账号注册和分组

用户注册(未开启邮箱检验)

  缺点:随便添加账户,乱注册,不符合企业管理标准

用户注册(邮箱校验)

  开启校验并真实邮箱注册

创建组并邀请成员(配置过邮件服务,会邮件提醒)

访问权限

  1. private:只有组成员才能看到
  2. Internal:只要登录的用户就能看到
  3. Public:所有人都能看到

组权限

  1. Guest:可以创建issue、发表评论,不能读写版本库
  2. Reporter:可以克隆代码,不能提交
  3. Developer(推荐):可以克隆代码、开发、提交、push
  4. Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目
  5. Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员

生成随机密钥

ssh-keygen -t rsa

分支及标签保护

为什么要保护分支?

  保护特定的分支不被随便合并,以免影响相应的分支

  自己部署好gitlab,然后赋予账户权限,体验下就好

注:能push就能merge,相应的权限自我控制(master分支设置只能master可以合并)。 

第二种方式合并请求

敏捷持续集成

简介

  持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通过每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽早地发现集成错误。

好处

  1. 节省人力成本
  2. 加快软件开发进度
  3. 实时交付

重要组件

  1. git
  2. gitlab
  3. Jenkins:持续集成引擎
  4. maven:构建
  5. sonarqube:代码质量管理
  6. JDK
  7. Tomcat

jdk和maven安装

jdk安装:点我直达

maven安装:点我直达

nexus私服安装

官网:点我直达

  下面百度云盘也会提供哟~

解压

tar -zxvf nexus-3.27.0-03-unix.tar.gz -C /usr/local

修改启动端口号

vim /usr/local/nexus-3.27.0-03/etc/nexus-default.properties

 

开启防火墙端口

  注:因为我本地没有使用8081端口,所以默认端口可以使用。但是防火墙端口记得开放哟~ 

vim /etc/sysconfig/iptables

 

重启防火墙

service iptables restart

启动nexus

  注意:jdk版本必须得1.8!!!nexus版本不同,可能需要的jdk版本不同

nexus不推荐使用root用户启动(可忽略)

也可以自己手动创建个用户,然后加入到组,赋予权限,步骤如下
1、useradd nexus
2、chown -R nexus:nexus xxxx/xxxx/nexus-3.27xxx/
3、chown -R nexus:nexus xxxx/xxxx/sonatype-work/ 4、su nexus 5、./nexus start

踩了个坑

 

小技巧

  注:./nexus start,启动完成之后,查看nexus是否启动:ps aux|grep nexus,若没有启动的话,可以使用:./nexus run;此时启动项目就会提示哪里出错啦~

访问

  注:点击右上角登录,默认账号密码:admin/admin123;从nexus3.17以后,默认密码改为随机的了,文件路径在:/usr/local/sonatype-work/nexus3/admin.password里!!!

 

修改最大文件数(默认1024)

 

 

  注:记得重启!!!

设置nexus开机自启动

 vim /etc/rc.d/rc.local 

nexus安装及使用

项目maven大概过程分析

设置maven的setting.xml

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <pluginGroups/>
    <proxies/>
    <servers>
        <server>
            <id>ybchen-releases</id>
            <username>admin</username>
            <password>admin</password>
        </server>
        <server>
            <id>ybchen-snapshots</id>
            <username>admin</username>
            <password>admin</password>
        </server>
    </servers>
    <mirrors/>
    <profiles>
        <profile>
            <id>ybchen</id>
            <activation>
                <activeByDefault>false</activeByDefault>
            </activation> <!-- 私有库地址-->
            <repositories>
                <repository>
                    <id>ybchen</id>
                    <url>http://192.168.199.199:8088/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories> <!--插件库地址-->
            <pluginRepositories>
                <pluginRepository>
                    <id>ybchen</id>
                    <url>http://192.168.199.199:8088/repository/maven-public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </pluginRepository>
            </pluginRepositories>
        </profile>
    </profiles>
    <activeProfiles>
        <activeProfile>ybchen</activeProfile>
    </activeProfiles>
</settings>

设置nexus的代理地址,并添加到组中

  阿里云地址:http://maven.aliyun.com/nexus/content/groups/public/ 

测试

  本地库,我已经清空,所有下载的都会先去nexus看看,没有的话,才会走阿里云代理上下载,然后还会下载到nexus。  

将本地jar上传至nexus

 

<distributionManagement>
    <repository>
        <id>ybchen-releases</id>
        <name>Nexus Release Repository</name>
        <url>http://xxx.xxx.xxx.xxx:port/repository/maven-releases/</url>
    </repository>
    <snapshotRepository>
        <id>ybchen-releases</id>
        <name>Nexus Release Repository</name>
        <url>http://xxxx.xxxx.xxx.xxx:port/repository/maven-snapshots/</url>
    </snapshotRepository>
</distributionManagement>

安装mysql

点我直达

代码质量管理平台sonarQube安装及使用

前置条件

  • mysql 5.6 | 5.7
  • jdk1.8

 我使用的是7.0,版本要求:点我直达

下载地址:点我直达

官网

点我直达

安装

1、依赖:yum install unzip -y
2、解压:unzip sonarqube-7.0.zip 
3、移动:mv sonarqube-7.0 /usr/local/
4、切换: cd /usr/local/
5、登录mysql:mysql -u root -p
6、创建库:CREATE DATABASE sonar DEFAULT CHARACTER SET utf8;
7、退出mysql:exit
8、进入sonarqube:cd sonarqube-7.0/conf/

修改配置

vim sonar.properties
主要配置以下内容
sonar.jdbc.username=root
sonar.jdbc.password=root
sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false
sonar.web.host=0.0.0.0
sonar.web.context=/sonar
sonar.web.port=9000

 

启动

useradd sonar
chown -R sonar:sonar /usr/local/sonarqube-7.0
su sonar
cd /usr/local/sonarqube-7.0/bin/linux-x86-64/
./sonar.sh start

访问

  记得开放防火墙端口:9000,账号/密码:admin/admin

汉化

  安装完,重启服务再次打开网页即可

sonar7.0的中文包,网页在线安装不上,我是去github上下载,手动安装的,按照以下几步即可,下面我也会提供,我直接下载的是jar包,源码包还得编码(因为我懒)
1. 在https://github.com/SonarCommunity/sonar-l10n-zh,下载汉化包源码;
2. 本地打包,cmd里面,在解压包里面运行: mvn install 
3. 将打好的jar包,放到: sonarqube/extensions/plugins  目录先;
4. 重启sonar,即可

  具体操作如下,github地址:点我直达

使用

settings.xml
============================
<?xml version="1.0" encoding="UTF-8"?>
<settings
    xmlns="http://maven.apache.org/SETTINGS/1.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <pluginGroups></pluginGroups>
    <proxies></proxies>
    <servers></servers>
    <mirrors>
        <!--maven代理开始-->
        <mirror>
            <id>huaweicloud</id>
            <mirrorOf>*,!HuaweiCloudSDK</mirrorOf>
            <url>https://mirrors.huaweicloud.com/repository/maven/</url>
        </mirror>
        <mirror>
            <id>aliyun</id>
            <name>aliyun Maven</name>
            <mirrorOf>*,!HuaweiCloudSDK</mirrorOf>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
        <!--maven代理结束-->
    </mirrors>
    <profiles>
        <!--sonar配置开始-->
        <profile>
            <id>sonar</id>
            <activation>
                <activeByDefault>true</activeByDefault>
            </activation>
            <properties>
                <sonar.jdbc.url>jdbc:mysql://192.168.199.199:3306/sonar?useUnicode=true&amp;characterEncoding=utf8</sonar.jdbc.url>
                <sonar.jdbc.username>root</sonar.jdbc.username>
                <sonar.jdbc.password>root</sonar.jdbc.password>
                <sonar.host.url>http://192.168.199.199:9000/sonar</sonar.host.url>
            </properties>
        </profile>
        <!--sonar配置结束-->
    </profiles>
</settings>
git init
mvn clean install
mvn sonar:sonar

Jenkins

安装

前置条件

  1. JDK(jdk8);安装:点我直达
  2. tomcat(tomcat9);安装:点我直达

jenkins下载:点我直达

 

将jenkins放到tomcat中

 

问题排查(重要)

  1. 查看tomcat是否启动
  2. 查看端口8080是否开启:netstat -tlun
  3. 查看防火墙端口是否开启,记得重启防火墙
  4. 查看tomcat日志:/var/soft/apache-tomcat-9.0.38/logs/catalina.out

 

  注:可以看到,地址被占用了!

修改tomcat的端口号,我这里修改为:9999,记得防火墙!!!

 

访问

 

 

安装推荐组件

 

创建用户名密码

 

实例配置

 

登录

插件安装及配置

系统配置

  1. jdk
  2. maven
  3. sonarqube
  4. 邮件
  5. gitlab授权
  6. 免密登录
配置jdk和maven

配置邮件

配置sonarqube

继续到全局配置里设置sonarqube

授权登录

生成密钥
yum -y install openssh-clients
ssh-keygen -t rsa

 

生成的key放到gitlab

more ~/.ssh/id_rsa.pub

创建项目

  注:git方式拉代码,直接不报红,代表搭建成功

jenkins手动发版测试

linux创建目录
1、cd /
2、mkdir springboot_demo

jenkins配置

clean install

mv target/*.jar /springboot_demo/
cd /springboot_demo
BUILD_ID= java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar >log 2>&1 &
clean install

mv target/*.jar /springboot_demo/
cd /springboot_demo
BUILD_ID= java -jar spring-boot-demo-0.0.1-SNAPSHOT.jar >log 2>&1 &

整合sonar然后发布

  刚开始的时候sonarqube里面没有项目随着代码的重新发布,会将项目也提交到sonarqube中

#projectKey项目的唯一标识,不能重复
sonar.projectKey=yb
sonar.projectName=springboot-test
sonar.projectVersion=1.0
sonar.sourceEncoding=UTF-8
sonar.modules=java-module
# Java module 
java-module.sonar.projectName=test 
java-module.sonar.language=java 
# .表示projectBaseDir指定的目录 
java-module.sonar.sources=src 
java-module.sonar.projectBaseDir=. 
java-module.sonar.java.binaries=target/

提交后自动发布

功能描述

  本地代码修改完成之后,往gitlab上推代码,然后Jenkins自动打包发版程序,不用人工手动发版。

安装插件(gitlab)

  装完插件后,虚拟机上的磁盘满了,导致服务起不来,今天先到这吧,不搞这玩意了(明天要搞其他东西,搭建这一整套东西,恶心我几百回了,处处坑~),自行去找度娘吧,只需要简单配置2步就好,前面服务都全部搭建出来了,这个因为linux磁盘满了,懒得搞了,有点小遗憾,拜~

 

安装包

 

链接: https://pan.baidu.com/s/1OixJ3oHvjEjKLtvuvplclA  密码: fbqs

 

posted @ 2020-09-20 00:57  陈彦斌  阅读(397)  评论(1编辑  收藏