gitlab和jenkins自动化代码上线

1. 介绍

什么是持续集成?

经常频繁的代码合并, 持续集成跟运维有关的工作,提供一个代码仓库,版本控制系统(备份,迁移)

什么是持续交付?

开发团队---测试团队---运维上线
开发团对,单元测试,---测试-- 代码质量检测--- 测试, sonarqube

什么是持续部署?

频繁的代码上线,持续部署

2. 持续集成

什么是版本控制系统

每一次提交或修改都看作是一个版本

版本控制系统解决了什么问题?

快速回滚到指定的版本,只保留变化的内容

常见版本控制系统svn与git区别?

svn:  中心化的代码仓库
git:    分布式的代码仓库

安装和配置git

#git的安装
yum install git -y
git --version
​
git config --global user.name "xxxx"
git config --global user.email "xxxx@qq.com"
git config --global color.ui   "true"

创建版本库

mkdir test
cd test
git init  

git仓库添加文件

git  add   .    #添加文件到缓冲区
git  commit  -m   'add three file'

git修改文件名称并提交

git  mv  file1  file4
git commit -m 'change file name'

git的文件对比

git diff  file3  #本地目录和缓冲区文件对比
git diff --cached  file3   #缓冲区文件和仓库文件对比

实现回退功能

查看当前的历史版本
git log --oneline   
git reset --hard 942bdf3
​
查看所有的历史版本
git reflog --oneline
git reset --hard 942bdf3
撤销修改的文件

提交到缓冲的区文件撤回
git reset HEAD file3(文件名)
git checkout -- file3(文件名)
​
未add到缓冲区的文件撤回
git checkout -- file3(文件名)

git分支管理

#增加一个新分支
git branch dev01
#切换分支
git checkout  dev01
​
#在开发分支上合并主分支
git merge master  -m '注释'#切回主分支
git checkout  master
#在主分支合并开发
git merge dev01  -m '注释'

git标签管理

#查看当前标签
git tag

#给当前版本打标签
git tag v1.2 
​
#删除标签
git  tag  -d  v1.2
​
#给任意版本打标签
git tag  -a v1.0  -m  '优化了1111  修复bug'  a119962 

git远程仓库gitee

#从远程仓库克隆到本地
git clone git@gitee.com:yu_hong_lei/linux63.git

#讲本地推到远程
git  push  origin  master

#远程更新到本地
git  pull  origin  master

gitlab仓库搭建

`安装`
#上传gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm到当前目录
yum localinstall gitlab-ce-11.9.11-ce.0.el7.x86_64.rpm -y

vim  /etc/gitlab/gitlab.rb
#设置访问url和关闭prometheus
external_url 'http://10.0.0.100'
prometheus_monitoring['enable'] = false
#配置gitlab通过smtp发送邮件
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'xxxxxx@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'gitlab'
​
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "xxxxxx@qq.com"
gitlab_rails['smtp_password'] = "xxxxxx"
gitlab_rails['smtp_domain'] = "qq.com"
gitlab_rails['smtp_authentication'] = "login"
gitlab_rails['smtp_enable_starttls_auto'] = true
gitlab_rails['smtp_tls'] = true

#初始化​
gitlab-ctl  reconfigure

`gitlab汉化`
#下载汉化包https://gitlab.com/xhang/gitlab
tar xf gitlab-11-9-stable-zh.tar.gz 
gitlab-ctl stop
\cp -a gitlab-11-9-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
gitlab-ctl start

`gitlab备份和恢复`
#备份
gitlab-rake gitlab:backup:create
#恢复
gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq
gitlab-rake gitlab:backup:restore BACKUP=1510472027_2017_11_12_9.4.5 
gitlab-ctl start unicorn
gitlab-ctl start sidekiq
​#备份路径
vim /etc/gitlab/gitlab.rb
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
gitlab_rails['backup_keep_time'] = 604800
#迁移云主机
先备份,云主机安装相同版本,恢复
 
`gitlab版本升级`
gitlab升级,  10-->11-->12
gitlab升级不能跨大版本

上传需要升级的rpm包
yum localinstall -y gitlab-ce-12.3.6-ce.0.el7.x86_64.rpm

3. jenkins介绍

Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要
Jenkins是一个调度平台

4. 安装jenkins

安装方式:
1.yum方式 或 rpm包
​ 2.直接部署war包
​ 3.使用docker安装

#部署tomcat
rpm -ivh jdk-8u102-linux-x64.rpm
mkdir /app
tar xf apache-tomcat-8.0.27.tar.gz -C /app
cd /app/apache-tomcat-8.0.27/webapps/
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war-stable/latest/jenkins.war
mv jenkins.war ROOT.war
/app/apache-tomcat-8.0.27/bin/startup.sh
#打开浏览器访问http://10.0.0.15:8080安装Jenkins

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

5. Jenkins插件的安装

在这里插入图片描述
在这里插入图片描述

6. 创建一个job

在这里插入图片描述

一个代码上线的流程
通用配置参数化构建
源码管理拉取git仓库
构建触发器gitlab自动触发Jenkins远程构建
构建环境删除workspace
构建html 远程上线, java maven编译 部署
构建后通知 邮件通知,钉钉通知**

7. Jenkins拉取gitlab的代码

在这里插入图片描述
在这里插入图片描述

8. 实现html自动化代码上线

#!/bin/bash
project=$1
tag=$2
tarname="${project}_${tag}.tar.gz"
web_ip="10.0.0.101 10.0.0.102"
tar zcf /opt/$tarname *


for n in $web_ip;
do
   scp -rp /opt/$tarname root@${n}:/tmp/
   ssh root@${n} "mkdir /html/${project}_$tag && \
tar xf /tmp/$tarname -C /html/${project}_$tag && \
rm -fr /html/web      && \
ln -s /html/${project}_$tag /html/web"

done

在这里插入图片描述

9. 使用gitlab自动触发构建项目(适用于测试环境)

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

10. 使用参数化构建完成版本回退

#!/bin/bash
project=$1
tag=$2
web_ip="10.0.0.101 10.0.0.102"

for n in $web_ip;
do
   ssh root@${n} "rm -fr /html/web   && \
ln -s /html/${project}_$tag /html/web"

done

在这里插入图片描述
在这里插入图片描述

11. 实现java项目自动化代码上线

Jenkins安装maven插件及javadoc插件
在这里插入图片描述

##jenkins安装maven
wget https://mirror.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.6.0/binaries/apache-maven-3.6.0-bin.tar.gz
tar xf apache-maven-3.6.1-bin.tar.gz -C /usr/local/
ln -s /usr/local/apache-maven-3.6.1/ /usr/local/maven
##配置环境变量
vim /etc/profile
export M2_HOME=/usr/local/maven
export PATH=${M2_HOME}/bin:$PATH
. /etc/profile
##测试安装成功
mvn -v

##maven配置加速
vim /usr/local/maven/conf/settings.xml
...在mirros下面添加
    <mirror>
        <id>alimaven</id>
        <name>aliyun maven</name>
        <url>
            http://maven.aliyun.com/nexus/content/groups/public/
        </url>
        <mirrorOf>central</mirrorOf>
    </mirror>
...
#!/bin/bash
project=$1
tag=$2

tar_path=$(find `pwd`  -name "*.war")
tarname=`basename $tar_path`
web_ip="10.0.0.100 10.0.0.101"
#打包


for n in $web_ip;
do
   scp -rp $tar_path root@${n}:/tmp/
   ssh root@${n} "rm -rf /html/${project}_$tag && \
   mkdir /html/${project}_$tag && \
   unzip -d /html/${project}_$tag /tmp/$tarname && \
   rm -fr /app/apache-tomcat-8.0.27/webapps/ROOT  && \
   ln -s /html/${project}_$tag /app/apache-tomcat-8.0.27/webapps/ROOT  && \
   pkill java  && \
   source /etc/profile &&  /app/apache-tomcat-8.0.27/bin/startup.sh && \
   sleep 10"
done

在这里插入图片描述

  • 标签取值
    在这里插入图片描述
    在这里插入图片描述
  • 版本回退
#!/bin/bash
project=$1
tag=$2
web_ip="10.0.0.100 10.0.0.101"

for n in $web_ip;
do
   ssh root@${n} "rm -fr /app/apache-tomcat-8.0.27/webapps/ROOT      && \
ln -s /html/${project}_$tag /app/apache-tomcat-8.0.27/webapps/ROOT  && \
pkill java && \
    source /etc/profile &&  /app/apache-tomcat-8.0.27/bin/startup.sh && \
    sleep 10"
done

12. sonarqube实现代码质量检测

sonarqube服务端安装
#上传mysql和sonarqube镜像
#docker启动sonarqube
docker run --name mysql-sonar -e MYSQL_ROOT_PASSWORD=mysql -e MYSQL_DATABASE=sonar -e MYSQL_USER=sonar -e MYSQL_PASSWORD=sonar -v /data/mysql:/var/lib/mysql -p 33066:3306 -d mysql:5.7
docker run -d --name sonarqube -p 9000:9000 -p 9092:9092  --link=mysql-sonar:mysql   -e SONARQUBE_JDBC_USERNAME=sonar     -e SONARQUBE_JDBC_PASSWORD=sonar    -e SONARQUBE_JDBC_URL="jdbc:mysql://mysql:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=false" sonarqube:7.0
#浏览器访问http://10.0.0.15:9000
默认用户密码:admin

#进行汉化
docker cp sonar-l10n-zh-plugin-1.20.jar sonarqube:/opt/sonarqube/extensions/plugins/sonar-l10n-zh-plugin-1.20.jar
docker restart sonarqube 

在这里插入图片描述

sonarqube客户端安装
#上传sonarqube包解压
unzip sonar-scanner-cli-4.0.0.1744-linux.zip
#设置软连接
mv sonar-scanner-4.0.0.1744-linux /usr/local/
ln -s /usr/local/sonar-scanner-4.0.0.1744-linux /usr/local/sonar-scanner
ln -s /usr/local/sonar-scanner/bin/sonar-scanner /usr/bin
#测试是否成功
sonar-scanner
  • 手动实现
sonar-scanner \
  -Dsonar.projectKey=linux \
  -Dsonar.sources=. \
  -Dsonar.host.url=http://10.0.0.15:9000 \
  -Dsonar.login=595ec7db02faba4738b9cf789cf9d261fae1416e
  • 集中到Jenkins
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
sonar.projectKey=    ##项目key,随意输入(必填)
sonar.projectName=   ##项目名称和版本(必填)
sonar.sources=.      ##源码位置(必填)
sonar.java.binaries=target/classes  ##编译后的class位置(必填)

13. 配置钉钉通知

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

14. Jenkins分布式构建

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

15. Jenkins的用户权限

建议先备份配置文件

cp .jenkins/config.xml /opt

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
注:这时候千万别点注销.否则永远登不上了
在这里插入图片描述

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值