持续集成CICD

    • 1.持续集成 ( 集成、交付、部署)
    • 2.git、gitlab、jenkins、sonarqube
  • 1.软件开发生命周期(简易版 --> 引入 环境 - 工具 --流程 )

  • 2.什么是环境、代码部署指的是什么
    • 开发环境:
    • 测试环境:一般来说是由测试人员部署。然后在该环境进行代码的测试。
    • 预发布环境: 保证上线前的代码质量。( 域名不一样。连接生产环境数据库。)
    • 生产环境:线上对外 环境,用户直接 访问的环境。由运维 来维护。
  • 3.环境与环境之间的代码是 如何部署的?
    • 代码部署:将我们开发的代码放到对应的web站点目录。/code
    • 手动:慢、干扰因素多、不安全。 scp、xftp、git pull svn pull
    • 自动:快、干扰因素少、安全。
  • 3.持续集成、持续交付、持续部署
    • 持续集成:频繁的一天多次,将代码集成到主干分支。(重复集成 的工作。)

-   持续交付
    -   交付个qa团队测试,一次算交付,每天频繁多次,持续交付。
-   持续部署
    -   开发-->代码-->构建-测试后-返回结果为给开发-->测试-->部署的操作。
  • 4.代码发布的流程与对应的实施的工具。

  • 5.第一个工具,git

    • 1.什么是git
      • git是一个分布式的版本控制软件。
        • 分布式
        • 版本控制
        • 软件。

          git基本使用:

    一个人开始干:

mkdir douyin
cd douyin/
git init					#将目录初始化为一个git的仓库
#配置一个我是谁,我的邮箱是什么?
git config --global user.email "army@qq.com"
                git config --global user.name "army"
                git config color.ui true
                
                git status
                git add .
                git status
                
                #提交文件至本地仓库:
                git commit -m "v1.0短视频开发完成"
                #查看提交的记录( 提交的描述,以及COMMITID,这个COMMITID是唯一的。)
                 git log```
在开发一个新功能( 视频审核 )

git add . #让git将该文件 管理起来
git commit -m "描述信息"#将文件提交到本地仓库中
git log #查看当前仓库所有的提交记录 ```

  • XXX功能

[root@gitlab douyin]# vim yuefan.html
[root@gitlab douyin]# git add .
[root@gitlab douyin]# git commit -m "功能上线"


git log 查看历史提交记录 git reset --hard COMMITID (你想回退到哪个指定的版本)

```
[root@gitlab douyin]# git reflog	#查看所有历史提交的commitID
[root@gitlab douyin]# git reset --hard b3d3523
```
  • git命令总结,多个区域的概念
        git init					#将一个目录初始化为一个版本库
        git add						#将目录下的所有文件都加入到git的版本管理
        git commit 				#将所有被git管理的文件,都提交到本地仓库进行版本管理
        git log						#查看git的提交记录(谁、什么时间、提交了什么、commitid是啥、提交的描述是什么)
        git reflog				#查看git所有的提交记录 (每一次的提交都能查看到)
        git reset --hard	#回退到指定的版本,后面跟上commitid   这个id可以通过log查看,也可以reflog ```
    -   ![image-20190801214513960](http://cdn.xuliangwei.com/image-20190801214513960.png)
    -   git分支:
        - 功能出现了bug、还希望在开发一个商城系统:怎么办?
  ![](https://img2020.cnblogs.com/blog/1275194/202011/1275194-20201119165225227-794005490.png)
# git分支的操作与使用:
git branch dev				#创建dev分支
git checkout dev			#切换到dev分支

#开发商城:
vim shopping.html
git add .
git commit -m "商城完成百分之20%-c4"

#现在约功能出现了bug,请回到master分支,基于master的c3创建bug分支
git checkout master
git branch bug
git checkout bug

#开始bug修复
vim yuefan.html
git add .
git commit -m "bug修复完毕..c5"

#bug修复完成后,我们需要回到master分支,然后合并bug分支的内容:
git checkout master
git merge bug -m "合并bug分支--c6"

#继续回到dev分支开发商城系统
git checkout dev
git add .
git commit -m "商城完成百分之100%--c7"

#继续在dev分支合并master的代码。确保修复的bug与我的商城系统兼容
git merge master -m "商城100%-bug修复--c8"

#最后回到master分支。然后将dev开发的功能合回master   没有问题就可部署了
git checkout master
git merge dev -m "合并dev开发的商城功能。"

#当确保master分支是最新的内容,可以干掉其他的分支;
git branch -d dev
git branch -d bug```

三里屯买栋楼房:

1.我们需要有一个远程仓库 ( 码云 开源,个人可以免费使用。)
2.我们要将本地的仓库与远程建立连接

    git remote add origin git@gitee.com:oldboy_oldxu/dy.git		#请填写自己的地址 (  基于ssh方式  )
    cat ~/.ssh/id_rsa.pub					#将服务器的公钥放入gitee服务器中
    git push -u origin master			#git push主要是用来将本地版本已管理的文件推送到远程仓库中
    #如何推送其他分
    git branch dev
    git checkout dev
    touch dev.html
    git add .
    git commit -m "添加dev的html"
    git push origin dev	#这个push这里不再是master而是你当前的分支名称。
    
    #公司新来了一个小王,他需要查看公司的代码,怎么办?  ( 还可能需要修改。然后提交:)
    
    #1.小王需要先克隆项目:  (  仅在第一次需要,需要注意,私有的项目需要小王将公钥放入中心服务器  )
    git clone git@gitee.com:*****/dy.git
    
    #2.修改代码。推送代码中心服务器
    user.name=******
    user.email=*******@qq.com
    git add .
    git commit -m ""
    git push origin master
    
    #3.我自己,需要拉取中心服务器的最新代码:
    git checkout master
    git pull origin master						#拉取中心的最新代码
    
    #4.我修改代码,提交到中心服务器,小王拉取代码。
     touch linux_army.html
     git add .
     git commit -m " 描述"
     git push origin master
    
    #5.小王就需要执行git pull 才可以看到我推送到远程服务器的最新版本代码
    git pull origin master
    3.将本地的代码提交到远程仓库( 首先要能提交到本地仓库-->才可以提交到远程仓库,否则不行?)

-   git tag标签: 为某个指定的CommitID打上标签:
    git tag -a v1.1 -m "最新的代码"			#为最新的代码打上标签
    git tag															#查看当前本地的标签
     git push origin --tags							#推送本地的所有标签
    #指定对应的commitID打上标签
     git tag -a v1.0 ea03880 -m "当初上线商城功能的版本"
     git tag -l
     git push origin --tags

gitignore忽略

程序产生的垃圾
程序产生缓存
图片
数据配置
git牵扯到的多个区域总结:

git的命令总结:

git config --global user.email
git config --global user.name
git add
git status
git commit -m ""
git log
git reflog
git reset --hard CommitID

git branch  Name
git checkout BranchName
git branch -d Name
git merge BranchName   (master想和并dev,请先到master分支,然后使用git merge将dev分支和合并到master)
    
git clone URL   Http的地址,如果项目是开源的,则不需要输入密码即可克隆
git remote add origin URL | SSH    #origin就是一个别名
git remote remove origin 
git push origin master
git pull origin master

git tag -a v1.0 -m ""
git tag -a v1.1 commitid -m ""
git tag -l
git tag -d v1.1


6.git仓库-->gitlab代码托管平台
码云:别人的服务器,自己公司的代码是否可以托管到别人的服务器上?

   自建代码托管平台:

       gitlab 重级别  (功能全、权限管理、分支保护、) 代码托管平台。
           社区版   不花钱。  私有项目随便创建,想怎么来就怎么来。
           企业版
       gogs  轻量级(简陋,能完成代码的提交。)

   安装gitlab

    #gitlab安装本身很复杂,但是官方提供了rpm安装包,安装即可使用。封装好了。

[root@gitlab ~]# yum localinstall gitlab/gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm -y
[root@gitlab ~]# cd /etc/gitlab/
[root@gitlab gitlab]# ls
 gitlab.rb
[root@gitlab gitlab]# cp gitlab.rb gitlab.rb_bak

## GitLab URL
external_url 'http://gitlab.oldboy.com'
        	
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = '123@qq.com'
gitlab_rails['gitlab_email_display_name'] = 'Oldboy-Gitlab'
        
### GitLab email server settings
gitlab_rails['smtp_enable'] = true
gitlab_rails['smtp_address'] = "smtp.qq.com"
gitlab_rails['smtp_port'] = 465
gitlab_rails['smtp_user_name'] = "123@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

#关闭一些没有用的组件
1385:prometheus['enable'] = false
1386:prometheus['monitor_kubernetes'] = false
1452:alertmanager['enable'] = false
1474:node_exporter['enable'] = false
1493:redis_exporter['enable'] = false
1511:postgres_exporter['enable'] = false
1540:gitlab_monitor['enable'] = false
1553:prometheus_monitoring['enable'] = false
1560:grafana['enable'] = false
1550:prometheus_monitoring['enable'] = false
        
        
        #初始化操作:
        [root@gitlab gitlab]# gitlab-ctl reconfigure
        
        
        #访问gitlab
        #设置超级管理员密码:  oldxu.com
        	#默认超级管理员root  
        ```

       gitlab汉化:

    [root@gitlab ~]# ll gitlab/
    总用量 1479048
    -rw-r--r-- 1 root root  76557595 8月   9 08:50 gitlab-12-0-stable-zh.tar.gz
    -rw-r--r-- 1 root root 640227518 8月   9 08:50 gitlab-ce-12.0.3-ce.0.el7.x86_64.rpm
    -rw-r--r-- 1 root root 797754871 8月   9 08:51 gitlab-ce-12.10.9-ce.0.el7.x86_64.rpm
    
    [root@gitlab ~]# cd gitlab/
    [root@gitlab gitlab]# tar xf gitlab-12-0-stable-zh.tar.gz
    [root@gitlab gitlab]# cat gitlab-12-0-stable-zh/VERSION
    12.0.3
    
    [root@gitlab gitlab]# gitlab-ctl stop
    [root@gitlab gitlab]# \cp -r gitlab-12-0-stable-zh/* /opt/gitlab/embedded/service/gitlab-rails/
    [root@gitlab gitlab]# gitlab-ctl reconfigure
    [root@gitlab gitlab]# gitlab-ctl start
    ```

   用户、组、权限之间的关系

1.创建组

2.基于组创建项目

3.创建用户

4.将用户加入到组中,然后分配对应的权限。

5.分别使用账户登陆gitlab,查看是否能看到对应的项目。

------验证完毕:



`echo "10.0.0.110 gitlab.oldboy.com" >> /etc/hosts`

oldxu是主程序人员			( Linux 服务器    gitlab   10.0.0.110)

oldli是开发人员					(  Linux服务器   web01  10.0.0.7 )

由于master分支是授保护的,所以很有可能oldli是无法将代码提交到master分支的,那怎么办呢?

   方法一:

       1.oldli创建一个dev分支,开发自己的项目
       2.oldli将dev分支提交到远程仓库
       3.oldli使用自己的账户登陆gitlab,然后申请合并请求:(申请dev与master合并)
       4.管理员登陆gitlab,同意合并,则才能完成合并的操作。 如果拒绝,那么合并失败。

   方法二:(不推荐。)

       关闭分支保护就行了。  项目-->设置-->仓库-->保护分支
       选择主程序员和开发者都可以提交。

   方法三:(也不推荐,不然要分支保护干啥呢?)

       超级管理员登陆gitlab,将对应的用户的权限提升为 主程序员。

   如何将http拉取项目的方式调整为ssh免密

       1.打开电脑,无论是linux还是windows,先生成公钥
       2.将公钥粘贴到你gitlab对应的账户下。  点击右上角设置---ssh秘钥,添加即可。

   gitlab备份、恢复、升级

       备份:自带备份命令:
            # gitlab-rake gitlab:backup:create			#备份的命令
            
            	#没有说备份到哪儿?
            	#备份保留多久?
            	
            	#vim /etc/gitlab.rb
            	gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"	#备份的路径
            	gitlab_rails['backup_keep_time'] = 604800								#备份保留7天
            	
            		#修改了备份的路径,记得要执行 gitlab-ctl reconfigure
            		
            		
            [root@gitlab ~]# ll /var/opt/gitlab/backups
            总用量 152
            -rw------- 1 git git 153600 8月   9 16:50 1596963023_2020_08_09_12.0.3_gitlab_backup.tar
            
            
            
            #如何实现每天自动备份呢?
            		# contab即可。
            ```

           恢复:

            #1.停止数据写入服务:
            # gitlab-ctl stop unicorn
            # gitlab-ctl stop sidekiq
            
            #2.通过gitlab-rake命令进行恢复
            # gitlab-rake gitlab:backup:restore BACKUP=1596963023_2020_08_09_12.0.3
            		Restore task is done.
            	
            #3.重启gitlab,检查是否恢复完毕。
            ```

    

    迁移的步骤:

    ​	1.备份旧gitlab

    ​	2.在新机器安装相同环境的gitlab

    ​	3.在新机器恢复旧gitlab的备份

    ​	4.验证数据的完整性

    ​	5.将域名解析到新的gitlab服务器地址

    ​	6.保留旧gitlab服务器一段时间,确认没问题,销毁。( 7-15天 )

    

    升级的步骤:

    ​	1.gitlab的升级和其他的升级不一样。不支持跨域版本升级。只能小版本迭代。

    ​			gitlab-11版本-->gitlab-12版本,无法升级。

    ​			1.先升级到gitlab-11的最新版本--然后才能升级到gitlab-12版本,否则升级报错,然后提升不要跨域大版本升级。请先升级到某某版本。

    ​		1.先想办法升级到:gitlab-ce-11.9.9-ce.0.el7.x86_64.rpm

    ​		2.然后才能 升级到  gitlab-ce-12版本

    

    想完成迁移并且升级:

    ​	1.先实现迁移:

    ​	2.然后进行小版本的升级迭代

    ​	3.最后在升级到你需要的那个版本。   记得备份一次。



    ![](https://img2020.cnblogs.com/blog/1275194/202011/1275194-20201119165428596-374799993.png)   


    ![](https://img2020.cnblogs.com/blog/1275194/202011/1275194-20201119165439751-1117085015.png)
posted @ 2020-11-19 16:57  痒乐多多  阅读(898)  评论(0编辑  收藏  举报