git持续集成自动化部

Git特点

分布式的版本控制系统

yum安装:

 yum install git

简单配置

[root@js-212 /]# git config --global user.name "ryan.yang"
[root@js-212 /]# git config --global user.email "11066986@qq.com"
[root@js-212 /]# git config --global color.ui true    #配置颜色
[root@js-212 /]# git config --list
user.name=ryan.yang
user.email=11066986@qq.com
color.ui=true

 版本库创建以及配合github上传代码

创建版本库:

[root@js-212 opt]# mkdir gittest
[root@js-212 opt]# cd gittest/
[root@js-212 gittest]# git init 
Initialized empty Git repository in /opt/gittest/.git/

 

简单添加文件与提交:

[root@js-212 gittest]# cat readme.txt 
1 hello
[root@js-212 gittest]# git status
# On branch master
#
# Initial commit
#
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    readme.txt
nothing added to commit but untracked files present (use "git add" to track)
[root@js-212 gittest]# git add readme.txt             #添加

[root@js-212 gittest]# git status
# On branch master
#
# Initial commit
#
# Changes to be committed:
#   (use "git rm --cached <file>..." to unstage)
#
#    new file:   readme.txt
#
[root@js-212 gittest]# git commit -m "the first commit"        #提交
[master (root-commit) 4cd2910] the first commit
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 readme.txt
[root@js-212 gittest]# git status
# On branch master
nothing to commit (working directory clean)

 

 

[root@js-212 gittest]# cat deploy.sh 
#!/bin/bash
echo hello
[root@js-212 gittest]# git status
# On branch master
# Untracked files:
#   (use "git add <file>..." to include in what will be committed)
#
#    deploy.sh
nothing added to commit but untracked files present (use "git add" to track)
[root@js-212 gittest]# git add deploy.sh 
[root@js-212 gittest]# git commit -m "2th commit"
[master 5a815ba] 2th commit
 1 files changed, 2 insertions(+), 0 deletions(-)
 create mode 100644 deploy.sh
[root@js-212 gittest]# ll
total 8
-rw-r--r-- 1 root root 23 Jun 16 11:21 deploy.sh
-rw-r--r-- 1 root root  8 Jun 16 11:09 readme.txt
[root@js-212 gittest]# git log
commit 5a815ba91acdaef47356e495869d7d42b2aed906
Author: ryan.yang <11066986@qq.com>
Date:   Fri Jun 16 11:21:58 2017 +0800

    2th commit

commit 4cd29106e3b127e176bc8ef27635d677bd183dc2
Author: ryan.yang <11066986@qq.com>
Date:   Fri Jun 16 11:12:28 2017 +0800

    the first commit

修改readme.txt的内容,并查看状态,并对比。
[root@js-212 gittest]# cat readme.txt 
1 hello
2 word
[root@js-212 gittest]# git status
# On branch master
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#    modified:   readme.txt
#
no changes added to commit (use "git add" and/or "git commit -a")
[root@js-212 gittest]# git diff readme.txt 
diff --git a/readme.txt b/readme.txt
index b976562..7e62c88 100644
--- a/readme.txt
+++ b/readme.txt
@@ -1 +1,2 @@
 1 hello
+2 word

[root@js-212 gittest]# git add readme.txt 
[root@js-212 gittest]# git commit -m "add 2word"
[master af6104c] add 2word
 1 files changed, 1 insertions(+), 0 deletions(-)
[root@js-212 gittest]# git log
commit af6104c8a8f65d08c23f4e3a16ab7fed54e58e27
Author: ryan.yang <11066986@qq.com>
Date:   Fri Jun 16 11:25:28 2017 +0800

    add 2word

commit 5a815ba91acdaef47356e495869d7d42b2aed906
Author: ryan.yang <11066986@qq.com>
Date:   Fri Jun 16 11:21:58 2017 +0800

    2th commit

commit 4cd29106e3b127e176bc8ef27635d677bd183dc2
Author: ryan.yang <11066986@qq.com>
Date:   Fri Jun 16 11:12:28 2017 +0800

    the first commit

 

版本回滚

[root@js-212 gittest]# git reset --hard HEAD^     #回滚,HEAD表示前面,^ 表示回滚一个版本,^^表示回滚两个版本。
[root@js-212 gittest]# cat readme.txt 
1 hello

指定版本回滚:
[root@js-212 gittest]# git reflog           #查看各个版本的序列号
5a815ba HEAD@{0}: HEAD^: updating HEAD
af6104c HEAD@{1}: commit: add 2word
5a815ba HEAD@{2}: commit: 2th commit
4cd2910 HEAD@{3}: commit (initial): the first commit
You have mail in /var/spool/mail/root
[root@js-212 gittest]# git reset --hard 4cd2910         #加上版本的序列号,指定回滚到某个版本
HEAD is now at 4cd2910 the first commit
[root@js-212 gittest]# ll
total 4
-rw-r--r-- 1 root root 8 Jun 16 11:28 readme.txt

[root@js-212 gittest]# git reflog
5a815ba HEAD@{0}: 5a815ba: updating HEAD
4cd2910 HEAD@{1}: 4cd2910: updating HEAD
5a815ba HEAD@{2}: HEAD^: updating HEAD
af6104c HEAD@{3}: commit: add 2word
5a815ba HEAD@{4}: commit: 2th commit
[root@js-212 gittest]# git reset --hard af6104c              #回滚到之前回滚之前的的版本。
HEAD is now at af6104c add 2word
[root@js-212 gittest]# ll
total 8
-rw-r--r-- 1 root root 23 Jun 16 11:32 deploy.sh
-rw-r--r-- 1 root root 15 Jun 16 11:34 readme.txt
[root@js-212 gittest]# cat deploy.sh 
#!/bin/bash
echo hello
[root@js-212 gittest]# cat readme.txt 
1 hello
2 word

 

注:只要add 则全部提交,如果修改了文件,如果没有add 那么则不会commit。

在修改文件,但是没有提交之前,可以通过checkout回到修改之前的文件内容:

[root@js-212 gittest]# cat readme.txt 
1 hello
2 hello word
[root@js-212 gittest]# vi readme.txt 
[root@js-212 gittest]# cat readme.txt 
1 hello
2 hello word
3 every is sunday
[root@js-212 gittest]# git checkout -- readme.txt 
[root@js-212 gittest]# cat readme.txt 
1 hello
2 hello word

 

 

与github.com 连用

在github上面创建账户,然后创建项目以后;要在github上面添加一个ssh 的key

[root@js-212 gittest]# ssh-keygen -t rsa
[root@js-212 gittest]# cat /root/.ssh/id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAxouCEuwIY0ukH8Kc7WwtZBo1uvYLHFVE9gy0YTAAj48pl+oawZ/J0QB4ap2iTqf2gprUFIm09IIdm+G+xKX5bPTxGdIihTM0Z+rCiqezSqlo66ASctPafzNij+2LrLUhXY4WOOyknDYChnyH8gy5rTUOiShpr8bePyus35HmIqZhDafnHu8dlqY1KwYy4taS24VQCpzTNS+jp+6Rl9OQrM1BFx/ojk0mmGvT9XyWVpzirpz0eotyahGgtW7Sxjo3t9k00FOQI7xCaRE0uXZXpoyLDeT+IRDud+c7ce8c+kgDaI6RFBwQcW6KxuNUghkQGvyB6hbExcd4jZL5Kl+hLQ== root@Tets-360iii
把上面的key复制到 githb的 setting的ssh key里面
[root@js-212 gittest]# git remote add origin git@github.com:ryan-yang-2049/demo.git
[root@js-212 gittest]# cat 
deploy.sh   .git/       readme.txt  
[root@js-212 gittest]# cat .git/config 
[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    url = git@github.com:ryan-yang-2049/demo.git
    fetch = +refs/heads/*:refs/remotes/origin/*

 先把github 上面的工程的内容pull下来,然后在把本地的push上去

[root@js-212 gittest]# git pull origin master
From github.com:ryan-yang-2049/demo
 * branch            master     -> FETCH_HEAD
Merge made by recursive.
 .gitignore |  101 ++++++++++++++++++++++++++++++
 LICENSE    |  201 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 302 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore
 create mode 100644 LICENSE

[root@js-212 gittest]# ls -a
.  ..  deploy.sh  .git  .gitignore  LICENSE  readme.txt
[root@js-212 gittest]# git push -u  origin master
Counting objects: 12, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (7/7), done.
Writing objects: 100% (11/11), 1.07 KiB, done.
Total 11 (delta 0), reused 0 (delta 0)
To git@github.com:ryan-yang-2049/demo.git
   3e5efce..8759869  master -> master
Branch master set up to track remote branch master from origin.

红色方框就是本地写的东西。

 如果在别的目录和机器没有这些文件,或者想获取别的github的代码,则可以 git cloone  git的clone的地址。

 

安装gitlab

http://www.codegreen.cn/archives/2017/07/18/344.html(持续集成部署)

(centos6 操作步骤:https://www.gitlab.com.cn/downloads/#centos6)

yum install curl policycoreutils openssh-server openssh-clients 

 gitlab rpm 包地址:https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/

下载gitlab 包:wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-7.12.1~omnibus.1-1.x86_64.rpm

 安装依赖包:

yum install curl openssh-server openssh-clients postfix cronie

 rpm安装:(gitlab默认监听80端口)

 rpm -ivh gitlab-ce-7.12.1~omnibus.1-1.x86_64.rpm

 

yum 源安装(已搭建完成)

Gitlab 安装
安装Gitlab
Gitlab的作用:作为源码管理的角色。
Gitlab实际上是整合了nginx、git等多种软件提供了一个可视化的界面。
包含git命令的基本功能,但相比于git命令更加简单易用。

1.信任 GitLab 的 GPG 公钥:
[root@bc ~]# curl https://packages.gitlab.com/gpg.key 2> /dev/null | sudo apt-key add - &>/dev/null

2.配置一个清华大学的yum源

[root@bc ~]# vim /etc/yum.repos.d/gitlab-ce.repo
  [gitlab-ce]
  name=gitlab-ce
  baseurl=http://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7
  repo_gpgcheck=0
  gpgcheck=0
  enabled=1
  gpgkey=https://packages.gitlab.com/gpg.key

3.安装gitlab和必要的依赖

[root@bc ~]# yum makecache
[root@bc ~]# yum install gitlab-ce
[root@bc ~]# yum install curl policycoreutils openssh-server openssh-clients
[root@bc ~]# systemctl enable sshd
[root@bc ~]# systemctl start sshd
[root@bc ~]# yum install postfix
[root@bc ~]# systemctl enable postfix
[root@bc ~]# systemctl start postfix

4.初始化gitlab

[root@bc ~]# gitlab-ctl reconfigure
5.找到应该访问的地址

[root@bc .ssh]# vim /etc/gitlab/gitlab.rb
  external_url 'http://node1.bc.com'
注意:
如果直接访问192.168.31.201,只能访问到一个空的nginx访问页面。
所以,最好能够使用域名解析来访问本地的gitlab网站。
[root@linux-node02 gitlab]# ll /etc/gitlab/gitlab.rb 
-rw------- 1 root root 68872 Jun 21 01:22 /etc/gitlab/gitlab.rb
这个文件里面有很多配置,例如 mysql,redis,smtp等等。
安装详细内容

 

gitlab 初始密码: root 5iveL!fe

还可以修改用户的密码:

sudo gitlab-rails console production
> user=User.where(name: "root").first
> user.password=12345678
> user.save!
> quit

 

 

 启动:[root@js-212 soft]# gitlab-ctl reconfigure

查看状态:

[root@js-212 soft]# gitlab-ctl status
run: logrotate: (pid 31350) 146s; run: log: (pid 31349) 146s
run: nginx: (pid 31329) 148s; run: log: (pid 31328) 148s
run: postgresql: (pid 31235) 176s; run: log: (pid 31234) 176s
run: redis: (pid 31164) 182s; run: log: (pid 31163) 182s
run: sidekiq: (pid 31312) 149s; run: log: (pid 31311) 149s
run: unicorn: (pid 31291) 150s; run: log: (pid 31290) 150s

 

 启动,关闭,重载:gitlab-ctl start/stop/reload

页面访问IP即可。因为监听80端口;

 

 

 

 

git分支的 创建 合并 冲突

[root@js-212 gittest]# ls
deploy.sh  LICENSE  readme.txt
[root@js-212 gittest]# git branch dev        #创建分支
[root@js-212 gittest]# git checkout dev      #切换到分支
Switched to branch 'dev'
[root@js-212 gittest]# git branch            #查看当前分支
* dev
  master
[root@js-212 gittest]# ll                    #可以查看到当前分支以及master的文件
total 20
-rw-r--r-- 1 root root    23 Jun 16 11:32 deploy.sh
-rw-r--r-- 1 root root 11357 Jun 16 14:14 LICENSE
-rw-r--r-- 1 root root    21 Jun 16 13:48 readme.txt
[root@js-212 gittest]# vi dev.txt            #在分支创建新的文件
[root@js-212 gittest]# cat dev.txt 
hello word ,happy everyday

[root@js-212 gittest]# git add  dev.txt     #添加到git

[root@js-212 gittest]# git commit -m "add dev.txt"#提交
[dev 6aae669] add dev.txt
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 dev.txt
[root@js-212 gittest]# ls                  #当前分支的所有文件
deploy.sh  dev.txt  LICENSE  readme.txt
[root@js-212 gittest]# git checkout master  #切换到master(主干)
Switched to branch 'master'
[root@js-212 gittest]# ls                 #查看主干下面的文件(发现没有dev的分支结构)
deploy.sh  LICENSE  readme.txt

如果要何必分支到主干,首先当前的环境必须是主干(master:git checkout master)
[root@js-212 gittest]# git merge dev      #把分支合并到主干
Updating 8759869..6aae669
Fast-forward
 dev.txt |    1 +
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 dev.txt
[root@js-212 gittest]# ll
total 24
-rw-r--r-- 1 root root    23 Jun 16 11:32 deploy.sh
-rw-r--r-- 1 root root    27 Jun 16 15:28 dev.txt
-rw-r--r-- 1 root root 11357 Jun 16 14:14 LICENSE
-rw-r--r-- 1 root root    21 Jun 16 13:48 readme.txt
[root@js-212 gittest]# git branch
  dev
* master

删除分支:
[root@js-212 gittest]# git branch -d dev


主干和分支冲突:只能手动更改配置文件。

 

 把分支推送到github.com上面去

[root@js-212 gittest]# git branch
  dev
* master
  test
[root@js-212 gittest]# git push origin dev
Counting objects: 4, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 285 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To git@github.com:ryan-yang-2049/demo.git
 * [new branch]      dev -> dev
[root@js-212 gittest]# git push origin test
Counting objects: 5, done.
Delta compression using up to 8 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 287 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To git@github.com:ryan-yang-2049/demo.git
 * [new branch]      test -> test
 

 

 打标签

打标签的时候确保在主干上面
[root@js-212 gittest]# git branch
  dev
* master
  test
[root@js-212 gittest]# git tag v1.0
[root@js-212 gittest]# git tag
v1.0

查看某个标签修改的信息,文件等等
[root@js-212 gittest]# git tag
v1.0
[root@js-212 gittest]# git show v1.0
commit e11fc726d62ca415b87eed4778d98139c6a49d2f
Author: ryan.yang <11066986@qq.com>
Date:   Fri Jun 16 15:35:38 2017 +0800

    change dev.txt

diff --git a/dev.txt b/dev.txt
index b48eea8..da6d9e3 100644
--- a/dev.txt
+++ b/dev.txt
@@ -1 +1 @@
-hello word ,happy everyday
+hello word ,happy everyday--yesyesyes

 

 打标签到 github上面去

[root@js-212 gittest]# git push origin v1.0
Warning: Permanently added the RSA host key for IP address '192.30.255.113' to the list of known hosts.
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:ryan-yang-2049/demo.git
 * [new tag]         v1.0 -> v1.0

 

 github查看:

编写一个markdown

用于说明文档,可以操作,使用,安装文档等等

 markdown语法:mac软件(Mou),windows软件(markdownPad)

 

[root@js-212 gittest]# cat Help.md 
# Help document
## gan sha
    
* hello
* world
* hello word
    
> 引用                    #引用,

[广告链接](http://www.baidu.com)         #一些链接可以 []

![图片信息](https://ss0.bdstatic.com/5aV1bjqh_Q23odCf/static/superman/img/logo/bd_logo1_31bdc765.png)         #在github中显示一些图片 ![]

#####################下面几个都是写代码的格式,可以用tab 也可以用反引号 `` 或者一行里面使用反引号
while true: do echo "hello word" done `while true: do echo "hello,ryan" done` `yum install tree` `echo over`


在这个里面还可以设置字体的粗细: **aa** 可以变粗,*b* 可以变斜体。 *** 是分割线。 [root@js
-212 gittest]# git add Help.md [root@js-212 gittest]# git commit -m "add help document" [master 3ac28ac] add help document 1 files changed, 23 insertions(+), 0 deletions(-) create mode 100644 Help.md [root@js-212 gittest]# git push origin master Counting objects: 4, done. Delta compression using up to 8 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 533 bytes, done. Total 3 (delta 1), reused 0 (delta 0) remote: Resolving deltas: 100% (1/1), completed with 1 local object. To git@github.com:ryan-yang-2049/demo.git 8759869..3ac28ac master -> master

 

 完成以后的github显示为:

 拉取一个git仓库:

git clone git@github.com:ryan-yang-2049/demo.git

 

持续集成(保证代码质量)

 

 sonar : 代码质量管理平台(代码静态检验规则)

 

 

 持续集成:

 

简单的上线,部署,回滚等脚本(自动化)

[root@js-212 gittest]# cat prod-deploy.sh 
#!/bin/bash

#Date/Time
CDATE=$(date "+%Y-%m-%d")
CTIME=$(date "+%Y-%m-%d_%H-%M")

#Shell
CODE_DIR="/deploy/code/demo"
CONFIG_DIR="/deploy/config"
TMP_DIR="/deploy/tmp"
TAR_DIR="/deploy/tar"

usage(){
    echo $"Usage: $0 [deploy| rollback-list | rollback-pro ver]"
}


#获取代码
git_pro(){
    echo "begin git pull"
    cd ${CODE_DIR} && git pull
    API_VERL=$(git show|grep commit|cut -d ' ' -f2)
    API_VER=$(echo ${API_VERL:0:6})
    cp -r "${CODE_DIR}" "${TMP_DIR}"

}
#配置文件
config_pro(){
    echo "add pro config"
    /bin/cp "${CONFIG_DIR}"/*  "${TMP_DIR}"/demo/
    TAR_VER="${API_VER}"_"$CTIME"
    cd ${TMP_DIR} && mv demo pro_demo_"${TAR_VER}"
}
#打包
tar_pro(){
    echo "tar pro"
    cd ${TMP_DIR} && tar czf pro_demo_"${TAR_VER}".tar.gz pro_demo_"${TAR_VER}"
    echo "tar end pro_demo_"${TAR_VER}".tar.gz"

}
#拷贝到对应服务器对应目录
scp_pro(){
#模拟远程scp
    echo "begin copy"
    /bin/cp ${TMP_DIR}/pro_demo_"${TAR_VER}".tar.gz /tmp/testgit
}


#部署节点
deploy_pro(){
    echo "begin deploy"
    cd /tmp/testgit && tar zxf pro_demo_"${TAR_VER}".tar.gz 
    rm -f /var/www/html/demo
    ln -s /tmp/pro_demo_"${TAR_VER}" /var/www/html/demo


}
#测试
test_pro(){
    echo "test begin"
    echo "test ok"
}

rollback_list(){
    ls -l /tmp/testgit/*.tar.gz

}

rollback_pro(){
    rm -f /var/www/html/demo
    ln -s /tmp/testgit/$1 /var/www/html/demo
}

main(){
    case $1 in
        deploy)
            git_pro;
            config_pro;
            tar_pro;
            scp_pro;
            deploy_pro;
            test_pro;
            ;;
        rollback-list)
            rollback_list;
            ;;
        rollback-pro)
            rollback_pro $2
            ;;
        *)
            usage;
        esac
}

main $1 $2

 

 

 

gitlab + jenkins +maven 查看文章:http://www.jianshu.com/p/3507d8b2ac87

jenkins 插件包:https://updates.jenkins-ci.org/download/plugins/

 

posted @ 2017-06-19 13:34  Nice_keep-going  阅读(547)  评论(0)    收藏  举报