zoukankan      html  css  js  c++  java
  • 持续集成基本概念(1)

    我叫张贺,贪财好色。一名合格的LINUX运维工程师,专注于LINUX的学习和研究,曾负责某中型企业的网站运维工作,爱好佛学和跑步。
    个人博客:传送阵
    笔者微信:zhanghe15069028807,非诚勿扰。

    集成基本概念

    1、什么是集成?

    一个软件的开发项目通常由多个程序员合力完成,每个程序员开发若干个模块,最终组合成一个完成的项目,这样的过程就是集成。

    2、什么是持续集成?

    程序员一般不会把整个模块完全写完之后再提交到仓库,一般是半天或是一天提交一次,这样频繁提交的过程就是持续集成。

    3、为什么要持续集成?

    1. 程序员每完成一点更新,就提到到仓库,仓库再提交给调度平台(如jenkins),调度平台拥有自动编译、自动测试、自动反馈的功能,反馈当然是反馈给开发人员,这样形成一个循环,可以快速的发现错误,定位错误也比较容易。
    2. 软件平台可以对代码自动进行编译和测试,所以在一定程度上节省了人力成本。

    4、什么情况下使用持续集成?

    项目开发的规模比较小,就范不上用持续集成了。但是如果项目很大,需要不断添加新的功能,或不断升级产品,则需要进行反复集成,这个时候就需要用到持续集成来简化我们的工作。

    5、什么是持续交付?

    持续交付建立在持续集成的基础上,目的是为了将代码部署到预生产环境当中。持续交付就是将调度平台已经编译、测试、反馈好代码,手动部署到预生产环境当中,这里的预生产环境通常指的是测试环境。

    手动部署的含义并不是在命令行当中cp、mv啥的,而是在调度平台上手动点击一下部署按钮。

    6、什么是持续部署?

    持续部署是持续交付的下一步,指代码在任何时刻都是可部署的,最后部署到生产环境的自动化。

    持续部署和持续交付的区别在于,持续交付是测试环境,持续部署是环境,一个是手动的,另一个是自动的。

    持续部署是全自动的,其实这种环境并不是特别好,出了错不好排查,其实不如半自动好一些,所谓的半自动就是指的持续交付。

    7、持续集成实施流程

    根据持续集成的设计、代码从提交到生产,整个过程有以下几个步骤:

    1. 提交代码
    2. 代码托管(仓库)
    3. 调度平台(jenkins)获取仓库的代码
    4. 调度平台进行编译、测试、部署(手工或自动)
    5. 回退

    版本控制系统

    1、什么是版本控制系统

    version control system,将每一次文件的变化,集中在一个系统中加以版本的控制,以便后续查阅特定文件版本的历史记录。

    2、版本控制解决了什么问题?

    1. 追溯文件历史变更
    2. 多人团队协同开发
    3. 代码集中统一管理

    3、常用的版本控制系统

    常见的版本控制系统分为两种:svn为集中版本控制系统的代表,git为分布式版本控制系统的代表。

    集中式:所有人操作一个版本控制系统,版本控制系统可能有单点故障,一旦发生故障所有的程序员都无法提交合并代码。

    分布式:版本控制系统提供本地仓库的功能,程序员可以把版本控制系统上的仓库下载到本地一份,平时在自己的本地提交即可,后续可自行将本地的仓库提交到版本控制系统当中,这样程序员和版本控制系统并不是实时通讯的,不会特别依赖网络,即使版本控制系统挂上半天,也不会影响开发。

    总结:集中式依赖网络、分布式不依赖网络(现在趋势)。

    git也是linus写的,github、码云都是根据git做的,受到程序员的追捧。

    4、git的基本使用

    [root@git ~]#yum –y install git
    
    //在使用git之前,先要明确自己的身份
    [root@git ~]# git config --global user.name "zhanghe"
    [root@git ~]# git config --global user.email "zhanghe@formail.com"
    [root@git ~]# git config --global color.ui true  #这里加颜色的,可不加,加上好看一些。
    //明确自己的身份后,会在当前目录下生成一个隐藏文件
    [root@git ~]# cat .gitconfig 
    [user]
    	name = zhanghe
    	email = zhanghe@formail.com
    [color]
    	ui = true
    [root@git ~]# ll -h .gitconfig
    -rw-r--r-- 1 root root 71 Jan 11 15:06 .gitconfig
    
    //建立一个git版本库,这个目录里面所有文件都可以被git管理起来,每个文件的修改、删除,git都能跟踪,以便任何时刻都可以追踪历史,或者在某个时刻可以还原。
    [root@git ~]# mkdir demo
    [root@git ~]# cd demo
    //初始化仓库
    [root@git demo]# git init
    Initialized empty Git repository in /root/demo/.git
    //生成了一个隐藏目录,不要动这个目录
    [root@git demo]# ls .git
    branches  config  description  HEAD  hooks  info  objects  refs
    

    如何提交目录文件到本地仓库

    [root@git demo]# touch file1 file2 file3
    [root@git demo]# ls
    file1  file2  file3
    
    //查看仓库的状态,告诉你有三个文件没有提交,可以通过git add进行提交
    [root@git demo]# git status
    # On branch master
    #
    # Initial commit
    #
    # Untracked files:
    #   (use "git add <file>..." to include in what will be committed) #警告没有提交在暂存区
    #
    #	file1
    #	file2
    #	file3
    nothing added to commit but untracked files present (use "git add" to track)
    
    //通过git add提交,然后再看看仓库的状态,告诉你发现了三个新提交的文件,可以通过git rm删除
    [root@git demo]# git add file1 file2 file3  #无论有多少,git .都可以进行
    [root@git demo]# git status
    # On branch master
    #
    # Initial commit
    #
    # Changes to be committed:
    #   (use "git rm --cached <file>..." to unstage)
    #
    #	new file:   file1
    #	new file:   file2
    #	new file:   file3
    
    //通过git add只是提交到仓库的暂存区,并没有真正的提交到仓库,通过commit可以提交到真正的仓库
    [root@git demo]# git commit -m "新增file1,file2,file3到仓库"
    [master (root-commit) c2001e4] 新增file1,file2,file3到仓库
     3 files changed, 0 insertions(+), 0 deletions(-)   #0个insert,0个deletion
     create mode 100644 file1
     create mode 100644 file2
     create mode 100644 file3
    [root@git demo]# git status  #再看仓库的状态,发现所有的任务都没有了,都完成了
    # On branch master
    nothing to commit, working directory clean
    

    修改文件

    [root@git demo]# echo aaa > file1
    [root@git demo]# git status
    # On branch master
    # Changes not staged for commit:
    #   (use "git add <file>..." to update what will be committed)
    #   (use "git checkout -- <file>..." to discard changes in working directory)
    #
    #	modified:   file1   #告诉你一个文件被修改
    
    [root@git demo]# git add .  #提交到暂存区
    [root@git demo]# git commit -m "修改了file1"  #提交到仓库
    [master bdcc886] 修改了file1
     1 file changed, 1 insertion(+)   #提示一个文件被改变,提示一个文件被改变
    

    两次版本的文件都是有的,后面会演示如何查看两个版本的内容。

    重命名文件

    //将file1 重命名为file
    git mv file1 file  就可以实现改名
    
    //然后再提交
    git commit –m “修改file1为file”
    #	renamed:    file1 -> file1.1   #提交一个文件被重命名
    
    //再查看仓库状态,为空
    git status
    
  • 相关阅读:
    7617:输出前k大的数
    2991:2011
    7620:区间合并
    1688 求逆序对
    Magento How To Display Product Custom Option On list.phtml
    大二实习使用的技术汇总(中)
    codility上的问题 (22)
    poj 3321
    使用ViewPager实现左右“无限”滑动的万年历
    数论练习专题
  • 原文地址:https://www.cnblogs.com/yizhangheka/p/12181917.html
Copyright © 2011-2022 走看看