git

第1章 版本控制系统

版本: 文件的不同版本

控制: 管理文本的版本信息:自动备份,帮助我们管理备份,还原备份

系统:

 

生产环境的应用: 管理开发的代码

1.1 开发常用工具

开发都有自己专属开发工具

运维 -- vim

python -- pycharm

java -- eclipse、myeclipse

 

1.2 常见版本管理工具

1.2.1 SVN

集中式的版本控制系统,只有一个中央数据仓库,如果中央数据仓库挂了或者不可访问,所有的使用者无法使用SVN,无法进行提交或备份文件。

1.2.2 Git

分布式的版本控制系统,在每个使用者电脑上就有一个完整的数据仓库,没有网络依然可以使用Git。当然为了习惯及团队协作,会将本地数据同步到Git服务器或者GitHub等代码仓库。

第2章 2.单机版Git使用

2.1 2.1 环境准备

Git分布式版本控制系统最佳实践 - http://blog.oldboyedu.com/git/

系统环境

CentOS7.2 防火墙和selinux关闭

 

[root@CentOS7 ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@CentOS7 ~]# uname -r

3.10.0-327.el7.x86_64

[root@CentOS7 ~]# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

[root@CentOS7 ~]# getenforce

Disabled

[root@CentOS7 ~]# hostname -I

10.0.0.201 172.16.1.201 192.168.122.1

 

 

2.2 2.2 安装Git

yum -y install git

 

[root@CentOS7 ~]# rpm -qa git

git-1.8.3.1-5.el7.x86_64

 

2.3 2.3 Git全局配置

git config --global user.name "zy"  #配置git使用用户

git config --global user.email "zhangyao@oldboyedu.com"  #配置git使用邮箱

git config --global color.ui true  #语法高亮

git config --list # 查看全局配置

 

2.4 2.4 初始化Git工作目录

工作目录:用于存放我们需要进行版本控制的文件

普通的Linux目录==git init==在此目录下生成了一个.git的目录==变成Git的工作目录==》一旦删掉.git目录==》又变成普通目录

 

.git目录作用:存储所有版本记录等相关信息,注意所有版本文件已加密的方式存储

 

mkdir git_data

cd git_data/

# 初始化

git init

# 查看工作区状态

git status

 

2.5 本地连接远程仓库

Admin@PV-X00135945 MINGW64 /f/22

$ git clone git@192.168.0.3:test.git

Cloning into 'test'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), done.

 

Admin@PV-X00135945 MINGW64 /f/22

 

Admin@PV-X00135945 MINGW64 /f/new

$ git clone ssh://git@111.198.29.223:223/home/git/test.git

Cloning into 'test'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), done.

Admin@PV-X00135945 MINGW64 /f/new

$ git clone ssh://git@111.198.29.223:223/home/git/huiban-ios.git

Cloning into 'huiban-ios'...

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Receiving objects: 100% (3/3), done.

 

2.6 2.5 git命令

 

运维必须掌握的Git命令:

git clone   本地没有代码,从网上克隆代码

git pull    本地已经有了代码,但需要更新  == 代码上线

git log     查看版本的日志信息  ====查看代码回滚需要的版本号

git reset   回滚到指定版本  ====代码回滚

 

 

==========次常用==============

git push    本地代码更新,推送代码

 

常用Git命令

 

2.6.1 创建文件-提交文件

git add   将当前目录的文件提交到暂存区域

git commit  将暂存区域的所有数据提交到Git数据库   -m 后面接上注释信息,内容关于本次提交的说明,方便自己或他人查看

 

暂存区域的作用:

①如果直接提交到git数据库,一提交就不能再后悔了。有了暂存区域,给你留一个后悔的余地

②将所有零散的需要提交文件合并在一块然后一次性提交,减少git数据库的压力

 

示例:

[root@CentOS7 git_data]# touch README

[root@CentOS7 git_data]# git status

# 位于分支 master

#

# 初始提交

#

# 未跟踪的文件:

#   (使用 "git add <file>..." 以包含要提交的内容)

#

#  README

提交为空,但是存在尚未跟踪的文件(使用 "git add" 建立跟踪)

[root@CentOS7 git_data]# git add README

[root@CentOS7 git_data]# git status

# 位于分支 master

#

# 初始提交

#

# 要提交的变更:

#   (使用 "git rm --cached <file>..." 撤出暂存区)

#

#  新文件:    README

#

[root@CentOS7 git_data]# git commit -m "first commit"

[master(根提交) 5c8e503] first commit

 1 file changed, 0 insertions(+), 0 deletions(-)

 create mode 100644 README

 

2.6.2 提交文件完整步骤

不管是新建还是修改等变动都需要经历下面步骤

①创建文件

②git add 到暂存区域

③git commit 提交到git数据库

 

特例:修改的文件有一个便捷方法:

git commit -a  -m "注释信息"

-a 表示直接提交

 

Tell the command to automatically stage files that have been modified and deleted, but new files you have not told Git about are not affected.

告诉命令,自动将已修改和删除的文件暂存,但您没有告诉git的新文件不受影响。

 

[root@CentOS7 git_data]# git commit -a -m "second commit"

[master b7b2a54] second commit

 1 file changed, 1 insertion(+)

 

git clone https://github.com/51reboot/xly1.git
cd xly1/lesson01/
mkdir monkey                            # 添加自已名称目录, 用拼音表示
echo "print("hello world")" >> monkey/zuoye.py
git add monkey/zuoye.py
git status     # 查看当前github作业提交状态
git commit -m "add monkey/zuoye.py"     # 提交代码到本地仓库
git pull                    # 防止冲突,每次push之前先pull
git push -u origin master               # 提交代码到远程仓库

# 后面写好作业后,只需要下面三行即可
git add .
git commit -m "modify monkey/zuoye.py"    # 引号内为本次提交的描述,请自行更改
git pull                    # 防止冲突,每次push之前先pull
git push 

 

2.6.3 删除暂存区数据

①没有添加到暂存区的数据直接rm删除即可。

②已经添加到暂存区数据:

git rm --cached data    #→将data这个文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

git rm -f data          #→将文件数据从git暂存区和工作目录一起删除

 

示例:

[root@centos7 git_data]# touch {1..3}

[root@centos7 git]# git add -A

[root@centos7 git]# git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#  new file:   1

#  new file:   2

#  new file:   3

#

[root@centos7 git]# rm 3

rm: remove regular empty file ‘3’? y

[root@centos7 git]# git status

# On branch master

# Changes to be committed:

#   (use "git reset HEAD <file>..." to unstage)

#

#  new file:   1

#  new file:   2

#  new file:   3

#

# Changes not staged for commit:

#   (use "git add/rm <file>..." to update what will be committed)

#   (use "git checkout -- <file>..." to discard changes in working directory)

#

#  deleted:    3

#

[root@CentOS7 git_data]# git status

# 位于分支 master

# 要提交的变更:

#   (使用 "git reset HEAD <file>..." 撤出暂存区)

#

#  新文件:    1

#  新文件:    2

#  新文件:    3

#

# 尚未暂存以备提交的变更:

#   (使用 "git add/rm <file>..." 更新要提交的内容)

#   (使用 "git checkout -- <file>..." 丢弃工作区的改动)

#

#  删除:      3

#

[root@CentOS7 git_data]# git rm 3

rm '3'

[root@CentOS7 git_data]# git status

# 位于分支 master

# 要提交的变更:

#   (使用 "git reset HEAD <file>..." 撤出暂存区)

#

#  新文件:    1

#  新文件:    2

#

[root@CentOS7 git_data]# git rm --cached 1

rm '1'

[root@CentOS7 git_data]# ls

1  2  README

[root@CentOS7 git_data]# git status

# 位于分支 master

# 要提交的变更:

#   (使用 "git reset HEAD <file>..." 撤出暂存区)

#

#  新文件:    2

#

# 未跟踪的文件:

#   (使用 "git add <file>..." 以包含要提交的内容)

#

#  1

[root@CentOS7 git_data]# git rm -f 2

rm '2'

[root@CentOS7 git_data]# ls

1  README

 

2.6.4 重命名暂存区数据

没有添加到暂存区的数据直接move改名即可。

已经添加到暂存区数据:

git mv README NOTICE

 

案例:

[root@CentOS7 git_data]# ls

1  README

[root@CentOS7 git_data]# git status

# 位于分支 master

# 要提交的变更:

#   (使用 "git reset HEAD <file>..." 撤出暂存区)

#

#  新文件:    1

#

[root@CentOS7 git_data]# git mv 1 notice

[root@CentOS7 git_data]# ls

notice  README

[root@CentOS7 git_data]# git status

# 位于分支 master

# 要提交的变更:

#   (使用 "git reset HEAD <file>..." 撤出暂存区)

#

#  新文件:    notice

 

2.6.5 查看历史记录

git log   #→查看提交历史记录

git log -2   #→查看最近几条记录

git log -p -1  #→-p显示每次提交的内容差异,例如仅查看最近一次差异

git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

git log --pretty=oneline  #→--pretty根据不同的格式展示提交的历史信息

git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录

git log --pretty=fomat:“%h %cn”  #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名,其他格式见备注。

 

 

#→还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:

%s  提交说明。

%cd 提交日期。

%an 作者的名字。

%cn 提交者的姓名。

%ce 提交者的电子邮件。

%H  提交对象的完整SHA-1哈希字串。

%h  提交对象的简短SHA-1哈希字串。

%T  树对象的完整SHA-1哈希字串。

%t  树对象的简短SHA-1哈希字串。

%P  父对象的完整SHA-1哈希字串。

%p  父对象的简短SHA-1哈希字串。

%ad 作者的修订时间。

 

 

 

案例:

[root@CentOS7 git_data]# git log

commit b7b2a54698122ffecdeefad3ba616712ba5cecff    ===》提交的版本号,唯一

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 10:07:10 2017 +0800

 

    second commit

 

commit 5c8e503afd2ebc9b24090e763bf70cffb17c4699

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 09:46:39 2017 +0800

 

    first commit

 

2.6.6 还原历史数据

Git服务程序中有一个叫做HEAD的版本指针,当用户申请还原数据时,其实就是将HEAD指针指向到某个特定的提交版本,但是因为Git是分布式版本控制系统,为了避免历史记录冲突,故使用了SHA-1计算出十六进制的哈希字串来区分每个提交版本,另外默认的HEAD版本指针会指向到最近的一次提交版本记录,而上一个提交版本会叫HEAD^,上上一个版本则会叫做HEAD^^,当然一般会用HEAD~5来表示往上数第五个提交版本。

 

 

git reset --hard HEAD^  #→还原历史提交版本上一次

git reset --hard 3de15d4 #→找到历史还原点的SHA-1值后,就可以还原(值不写全,系统会自动匹配)

 

 

案例:

[root@CentOS7 git_data]# git reset --hard b7b2

HEAD 现在位于 b7b2a54 second commit

[root@CentOS7 git_data]# git log

commit b7b2a54698122ffecdeefad3ba616712ba5cecff

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 10:07:10 2017 +0800

 

    second commit

 

commit 5c8e503afd2ebc9b24090e763bf70cffb17c4699

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 09:46:39 2017 +0800

 

    first commit

[root@CentOS7 git_data]# cat README

123456

 

2.6.7 还原未来数据

什么是未来数据?就是你还原到历史数据了,但是你后悔了,想撤销更改,但是git log已经找不到这个版本了。

git reflog  #→查看未来历史更新点

 

 

案例:

[root@CentOS7 git_data]# git reflog

b7b2a54 HEAD@{0}: reset: moving to b7b2

09615a5 HEAD@{1}: commit: error commit

fd53f2d HEAD@{2}: commit: third commit

b7b2a54 HEAD@{3}: commit: second commit

5c8e503 HEAD@{4}: commit (initial): first commit

[root@CentOS7 git_data]# git reset --hard 09615a5

HEAD 现在位于 09615a5 error commit

[root@CentOS7 git_data]# cat README

123456

error

 

2.6.8 给版本打个标签--快速回滚

前面回滚使用的是一串字符串,又长又难记。

git tag v1.0   #→当前提交内容打一个标签(方便快速回滚),每次提交都可以打个tag。

git tag          #→查看当前所有的标签

git show v1.0   #→查看当前1.0版本的详细信息

git tag v1.2 -m "version 1.2 release is test"  #→创建带有说明的标签,-a指定标签名字,-m指定说明文字

git tag -d v1.0   #→我们为同一个提交版本设置了两次标签,删除之前的v1.0

 

 

案例:

[root@CentOS7 git_data]# git tag v20170807

[root@CentOS7 git_data]# git reset --hard b7b2

HEAD 现在位于 b7b2a54 second commit

[root@CentOS7 git_data]# git log -1

commit b7b2a54698122ffecdeefad3ba616712ba5cecff

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 10:07:10 2017 +0800

 

    second commit

[root@CentOS7 git_data]# git reset --hard v20170807

HEAD 现在位于 09615a5 error commit

[root@CentOS7 git_data]# git log -1

commit 09615a56322cf3f65bc859081b093d803ed83c3c

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 10:41:05 2017 +0800

 

    error commit

 

2.6.9 对比数据

git diff可以对比当前文件与仓库已保存文件的区别,知道了对README作了什么修改后,再把它提交到仓库就放⼼多了。

 

git diff README

 

2.7 2.6 分支结构

场景:公司有贱贱和强强,

 

新的一天开始了,从git代码仓库克隆到本地(自己电脑)

接下来两个人各自在自己的电脑上撸代码

下班了,直接回家?==》最后这个2个开发成立两家公司==不是一个合理的开发流程

 

合理的开发流程:每天写完代码就将代码上传到git代码仓库。第二天,2人又再次从git代码仓库pull更新代码即可,接下来两人又可以愉快的撸一天了。

 

上面的流程需要用到技术叫做分支结构。

 

master 主分支,稳定的代码,对外提供下载或者线上需要部署代码

dev    开发分支,所有测试环节都是在此分支进行,只有当测试无误后,将dev分支的代码 合并 到master主分支

 

dev-jianjian  贱贱就在这上面撸代码 ,一天后合并到dev分支,可能有冲突,也可能没有冲突,合并完后删掉这个分支

 

dev-qiangqiang  强强就在这上面撸代码,一天后合并到dev分支,可能有冲突,也可能没有冲突,合并完后删掉这个分支

 

开发人员能够直接在dev分支修改吗?假如两人同时改一个文件,冲突

 

 

 

迭代升级代码

 

2.7.1 创建分支

git branch 查看当前所有分支

git branch linux  ==》linux分支名称,可以任意命名,分支创建的过程是给当前的Git版本做一个快照

 

案例:

[root@CentOS7 git_data]# git branch linux

[root@CentOS7 git_data]# git branch

  linux

* master   ===》谁有*谁就是当前的分支

 

[root@CentOS7 git_data]# git checkout linux

切换到分支 'linux'

[root@CentOS7 git_data]# ls

notice  README

 

# 开发代码,提交代码

[root@CentOS7 git_data]# echo "linux branch code" >>README  

[root@CentOS7 git_data]# git commit -a -m "linux brach commit"

[linux 38b560e] linux brach commit

 1 file changed, 1 insertion(+)

 

 

# linux分支合并代码到master分支

# 先切换到主分支

[root@CentOS7 git_data]# git checkout master

切换到分支 'master'

[root@CentOS7 git_data]# git log -1

commit 09615a56322cf3f65bc859081b093d803ed83c3c

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 10:41:05 2017 +0800

 

    error commit

 

[root@CentOS7 git_data]# git merge linux

更新 09615a5..38b560e

Fast-forward

 README | 1 +

 1 file changed, 1 insertion(+)

[root@CentOS7 git_data]# git log -1

commit 38b560e7f67f6d27aa1a1f51ee733a3b53179e83

Author: zy <zhangyao@oldboyedu.com>

Date:   Mon Aug 7 11:52:10 2017 +0800

 

    linux brach commit

 

2.7.2 分支冲突

同时修改master和linux分支同一个文件同一行并提交,最后merge。

 

模拟冲突环境:

第一步:在master分支操作

 

vim README  # 改文件第3行

 

[root@CentOS7 git_data]# git commit -a -m "master branch commit"  # 提交修改

[master 04e28f6] master branch commit

 1 file changed, 1 insertion(+), 1 deletion(-)

 

第二步:切换到linux操作

 

[root@CentOS7 git_data]# git checkout linux

切换到分支 'linux'

[root@CentOS7 git_data]# cat README   ==》注意:分支的文件内容是和最初创建分支的那一刻同步的

123456

error

linux branch code

 

vim README  # 改文件第3行

 

[root@CentOS7 git_data]# git commit -a -m "linux branch commit 2"

[linux 6f0ee71] linux branch commit 2

 1 file changed, 1 insertion(+), 1 deletion(-)

 

第三步:切换回到master分支合并代码

[root@CentOS7 git_data]# git checkout master

切换到分支 'master'

[root@CentOS7 git_data]# git merge linux

自动合并 README

冲突(内容):合并冲突于 README

自动合并失败,修正冲突然后提交修正的结果。

 

[root@CentOS7 git_data]# cat README   # 修改文件保留需要的内容

123456

error

<<<<<<< HEAD

linux branch code mastermastermaster

=======

linux branch code lixnubarchlixnubarchlixnubarch

>>>>>>> linux

 

[root@CentOS7 git_data]# git commit -a -m "master branch commit 2"

[master 3f37090] master branch commit 2

 

 

2.7.3 删除分支

git branch -d linux #→确认合并完成后,可以放心地删除Linux分支。

 

[root@CentOS7 git_data]# git branch -d linux

已删除分支 linux(曾为 6f0ee71)。

 

今日总结:

1. SVN和Git的区别:集中式和分布式,Git人人都是中心

2. 一系列的git命令:clone pull log reset

3. 分支结构

 

devops

 

明日课程:

1. 在windows上使用git(Git-2.10.0-64-bit.exe在windows上装了linux系统,然后用git命令)

2. Gitlab安装及使用

3. 联网版Github

4. 代码上线

5. shell复习前面的内容

 

第3章 git随手记

3.1 安装及配置

[root@Centos7 ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@Centos7 ~]# uname -r

3.10.0-327.el7.x86_64

[root@Centos7 ~]# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

[root@Centos7 ~]# getenforce

Disabled

[root@Centos7 ~]# hostname -I

10.0.0.201 172.16.1.201 192.168.122.1

 

http://blog.oldboyedu.com/git/

 

一般默认自带git  没有就yum install git -y

[root@Centos7 kvm_data]# rpm -qa git

git-1.8.3.1-5.el7.x86_64

 

 

[root@Centos7 ~]# git config --global user.name "wu"

[root@Centos7 ~]# git config --global user.email "792997798@qq.com"

[root@Centos7 ~]# git config --global color.ui true

[root@Centos7 ~]# git config --list

 

 

工作目录: 用于存放我们需要进行版本控制的文件

 

普通的linunx目录===git init===在此目录下生成了一个.git的目录==> 一旦删掉.git目录===> 又变成普通目录

.git目录作用:存储所有版本记录的信息

 

 

一系列的git命令

必会:

git clone  本地没有代码, 从网上克隆代码

git pull   本地已经有了代码, 但需要更新=== 代码上线

git push   本地代码

 

常用:

 

3.2 创建数据-提交数据

 

git add 将当前目录的文件提交到暂存区

git commit -m

 

暂存区域的作用:

  1. 如果直接提交到git数据库, 一提交就不能再后悔了.有了暂存区域,给自己留一个后悔的余地
  2. 将所有零散的需要提交的文件合并在一块然后一次性提交, 减少git数据库的压力

 

提交文件完整步骤

不管是新建还是修改等变动都需要经历下面步骤

 

 

3.3 删除数据

 

 

git rm --cached database 

#→将文件从git暂存区域的追踪列表移除(并不会删除当前工作目录内的数据文件)

git rm -f database

 #→将文件数据从git暂存区和工作目录一起删除

 

3.4 重命名

 

 

3.5 查看历史记录

 

 

git log   #→查看提交历史记录

git log -2   #→查看最近几条记录

git log -p -1  #→-p显示每次提交的内容差异,例如仅查看最近一次差异

git log --stat -2 #→--stat简要显示数据增改行数,这样能够看到提交中修改过的内容,对文件添加或移动的行数,并在最后列出所有增减行的概要信息

git log --pretty=oneline  #→--pretty根据不同的格式展示提交的历史信息

git log --pretty=fuller -2 #→以更详细的模式输出提交的历史记录

git log --pretty=fomat:“%h %cn”  #→查看当前所有提交记录的简短SHA-1哈希字串与提交着的姓名,其他格式见备注。

 

 

#→还可以使用format参数来指定具体的输出格式,这样非常便于后期编程的提取分析哦,常用的格式有:

%s  提交说明。

%cd 提交日期。

%an 作者的名字。

%cn 提交者的姓名。

%ce 提交者的电子邮件。

%H  提交对象的完整SHA-1哈希字串。

%h  提交对象的简短SHA-1哈希字串。

%T  树对象的完整SHA-1哈希字串。

%t  树对象的简短SHA-1哈希字串。

%P  父对象的完整SHA-1哈希字串。

%p  父对象的简短SHA-1哈希字串。

%ad 作者的修订时间。

3.6 还原数据

 

 

 

 

3.7 标签使用

git tag v20170807

可以按天(时间)打标签, 方便记忆就行

 

 

 

 

3.8 私有仓库

https://about.gitlab.com/downloads/#centos7

 

 

 

 

 

444  git checkout -b develop master

  445  git stuats

  446  git status

  447  echo "hehehe" > 1.txt

  448  git add 1.txt

  449  git commit -m "1.txt"

  450  git push

  451  git push --set-upstream origin develop

  452  git push

 

 

 

 

3.9 分支结构

https://www.ibm.com/developerworks/cn/java/j-lo-git-mange/index.html?ca=drs-&utm_source=tuicool&utm_medium=referral 

 

 

git branch 查看当前分支

git branch linux  ===>linux 分支名   可以任意命名, 分支创建的过程是给当前的git版本做一个快照

 

 

 

 

第4章 Gitlab

4.1 介绍

GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。可以把Gitlab理解为一个开源的Github,你可以在企业中使用Gitlab部署一个企业自己的“Github”。

它拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

 

 

 

 

git : 每个人都有一套完整的版本库

现状: 我们是一个社会动物

团队协作开发代码, 需要让每个人的git版本数据进行交流,同步,保持一致,需要中心服务器.

 

 

 

yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm

gitlab-ctl reconfigure  #→初始化,就执行一次

gitlab-ctl status/stop/start

 

服务名

gitlab-runsvdir.service

 

 

 

 

ssh-keygen

cat  /root/.ssh/id_rsa.pub

 

 

 

 

 

http://www.zyops.com/markdown-syntax

https://github.com/zhangyao8/zabbix-community-repos

 

https://monitoringartist.github.io/zabbix-searcher/

 

 

 

 

4.2 1. 在windows上使用git

(Git-2.10.0-64-bit.exe在windows上装了linux系统,然后用git命令)

 

git是适配linux内核

 

折中方法:在windows中安装迷你版的linux系统

 

4.3 2. 下载安装

git:每个人都有一套完整的版本库

现状:我们是一个社会动物

团队协作开发代码,需要让每个人的git版本数据进行交流,同步,保持一致,需要中心服务器.

git的中心服务器只是用于代码协作,同步,一旦挂了,所有的开发者依然可以开发代码,使用git.

svn的中心服务器管理所有代码的,也有代码协作功能,一旦挂了,所有的开发者都用不了.

 

公共代码仓库:github 码云 用起来方便,只需要注册一个账号即可,但是不太安全,曾经出现过代码丢失

私有代码仓库:gitlab 安全,数据只要你备份做好

 

4.3.1 从网上下载安装

机器内存给大点,此台机器环境要纯净,不要有nginx/redis等

安装gitlab-ce最快速的解决方案是使用GitLab CE Omnibus package这个包,可以一站式的解决安装、配置、管理备份等需求.安装文档  https://about.gitlab.com/downloads/#centos7

注:由于网络问题,国内用户,建议使用清华大学的镜像源进行安装,详情可以在这里找到:https://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/

清华镜像仓库   https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/

先安装依赖包  

yum install  curl policycoreutils-python openssh-server openssh-clients postfix

看postfix状态要开启   

systemctl status postfix.service

systemctl enable postfix

rpm -ivh https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-11.1.2-ce.0.el7.x86_64.rpm

或者使用YUM源安装:

[root@linux-node2 ~]# vim /etc/yum.repos.d/gitlab-ce.repo

[gitlab-ce]

name=Gitlab CE Repository

baseurl=https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el$releasever/

gpgcheck=0

enabled=1

[root@linux-node2 ~]# yum makecache

[root@linux-node2 ~]# yum install gitlab-ce -y

 

4.3.2 从本地安装下载好的rpm包

yum localinstall gitlab-ce-9.1.4-ce.0.el7.x86_64.rpm

4.4 配置启动

首先我们干的第一件事情就是给gitlab设置一个域名,当然你也可以后期再设置,但是需要重启。

[root@linux-node2 ~]# vim /etc/gitlab/gitlab.rb

external_url 'http://git.example.com'

在生产环境,你就需要设置你的DNS,设置A记录,在实验环境,可以通过hosts文件自己绑定一个:C:\Windows\System32\drivers\etc\hosts

 

配置Gitlab并启动

[root@linux-node2 ~]# gitlab-ctl reconfigure

[root@linux-node2 ~]# gitlab-ctl start

 

可以使用gitlab-ctl管理gitlab:

  • 查看gitlab状态:[root@linux-node2 ~]# gitlab-ctl start
  • 关闭gitlab:    [root@linux-node2 ~]# gitlab-ctl stop
  • 启动gitlab:    [root@linux-node2 ~]# gitlab-ctl start
  • 重启gitlab:    [root@linux-node2 ~]# gitlab-ctl restart

 

 

gitlab-ctl reconfigure  #→初始化,就执行一次

gitlab-ctl status/stop/start

 

 

4.5 gitlab使用

通过浏览器访问页面,设置初始密码,其他操作类似GitHUB。

账户:root  密码自己设置为12345678

4.5.1 登录gitlab

第一次登录gitlab,需要为root用户修改密码,root用户也是gitlab的超级管理员。

 

 

4.5.2 管理gitlab

使用root用户和刚才设置的密码登录后,你就可以探索gitlab的奥秘了,可以点击图中红框的按钮进入管理区域,探索Gitlab的奥秘。

 

在生产使用中,对于Gitlab的账号管理一般有两种模式:

n  关闭注册功能,管理员在后台给企业用户增加账号。

n  集成企业内部使用LDAP

如果你想关闭注册的功能,请在管理区域的Settings进行设置:

 

取消Sign-up enabled 的选项,并保存。

 

 

4.5.3 汉化

获取gitlab汉化包(部署非汉化版,直接跳过)

说明:gitlab中文社区版的项目,v7-v8.8是由Larry Li发起的“GitLab 中文社区版项目”(https://gitlab.com/larryli/gitlab),从 v8.9 之后,@xhang 开始继续该汉化项目(https://gitlab.com/xhang/gitlab)

git clone https://github.com/larryli/gitlabhq.git

安装git

yum install -y git

克隆获取汉化版本库

下载最新的汉化包

git clone https://gitlab.com/xhang/gitlab.git

如果是要下载老版本的汉化包,需要加上老版本的分支,比如今天已经是10.0.4,我依旧想下载10.0.2,可以运行下面的语句

git clone https://gitlab.com/xhang/gitlab.git -b v10.0.2-zh

覆盖汉化包

root@linux-node1 ~]# cp -r /opt/gitlab/embedded/service/gitlab-rails{,.ori}

[root@linux-node1 ~]# gitlab-ctl stop

ok: down: gitlab-workhorse: 1s, normally up

ok: down: logrotate: 0s, normally up

ok: down: nginx: 0s, normally up

ok: down: postgresql: 1s, normally up

ok: down: redis: 0s, normally up

ok: down: sidekiq: 0s, normally up

ok: down: unicorn: 0s, normally up

[root@linux-node1 ~]# \cp -rf /root/gitlabhq/* /opt/gitlab/embedded/service/gitlab-rails/

cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/log’ with directory ‘/root/gitlabhq/log’

cp: cannot overwrite non-directory ‘/opt/gitlab/embedded/service/gitlab-rails/tmp’ with directory ‘/root/gitlabhq/tmp’

#这里的错误,忽略,因为之前已经设置gitlab的root密码了

[root@linux-node1 ~]# gitlab-ctl start

ok: run: gitlab-workhorse: (pid 25910) 0s

ok: run: logrotate: (pid 25914) 0s

ok: run: nginx: (pid 25920) 1s

ok: run: postgresql: (pid 25925) 0s

ok: run: redis: (pid 25933) 1s

ok: run: sidekiq: (pid 25937) 0s

ok: run: unicorn: (pid 25941) 0s

 

 

停止gitlab服务

gitlab-ctl stop

切换到gitlab汉化包所在的目录(即步骤二获取的汉化版gitlab)

cd /root/gitlab

[root@centos7 gitlab]# cat VERSION

11.1.2

比较汉化标签和原标签,导出 patch 用的 diff 文件到/root下

git diff v10.0.2 v10.0.2-zh > ../10.0.2-zh.diff

回到/root目录

将10.0.2-zh.diff作为补丁更新到gitlab中

yum install patch -y

patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < 10.0.2-zh.diff

 

重新配置gitlab

gitlab-ctl reconfigure

启动gitlab

gitlab-ctl restart

 

4.5.4 往Gitlab推拉代码的两种方法

①通过http协议,加上用户名密码认证

②通过ssh协议搭配免密钥认证(企业常用)

 

4.5.5 2.1免密钥认证

[root@CentOS7 ~]# ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/root/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /root/.ssh/id_rsa.

Your public key has been saved in /root/.ssh/id_rsa.pub.

The key fingerprint is:

92:c8:59:f2:d0:5d:59:de:db:d6:57:29:47:cd:de:de root@CentOS7

The key's randomart image is:

+--[ RSA 2048]----+

|          .o.  o.|

|     . . ... .. +|

|    o o .   ...+o|

|   . B .      oo=|

|    + + S     ..*|

|       .       .E|

|                 |

|                 |

|                 |

+-----------------+

[root@CentOS7 ~]# cat  /root/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDifL5xViTGgQxat7nxenep7wXUTuzYMyJh8lRSCRXwKSUc6e+G0cVyuIzG9CAfjGyp9R2rlONLb00+Hr2EK/vGHYNE1HZCJAfrFWN+IphSZiyOgiwQ7QKNvf2nqcqmFQaHUTqNeHj+HHLzW3KqC03uIWREhjszs8laj60JFh22tmnQ8x7zkWqwuKBax8aCodpjw4MuTtSKimWkB9Q2PnDVSYqbEoIrM+PRQRiQJvO6XTTLGtsNF2yS7fxX922U2rgJGcmSrCWbGgVWXkZwA9cvUbpeUizwQ5afq1I4obXfXXrGpgGLysd0NHGrJo1pfqSyh2LAi0MtKpkIKeBhiQZF root@CentOS7

 

4.5.6 2.2从公网上克隆一个仓库

git clone git@CentOS7:root/36team.git  # 这条命令会顺带帮我们创建一个目录

cd 36team

touch README.md

git add README.md

git commit -m "add README"  # 到此为止,只是把数据提交到本地的版本库

git push -u origin master   # 将本地的版本库数据同步推送到git远程仓库

 

拉取代码:

[root@CentOS7 36team]# git pull

remote: Counting objects: 3, done.

remote: Total 3 (delta 0), reused 0 (delta 0)

Unpacking objects: 100% (3/3), done.

来自 CentOS7:root/36team

   bcb4b1f..11026c5  master     -> origin/master

更新 bcb4b1f..11026c5

Fast-forward

 README.md | 2 ++

 1 file changed, 2 insertions(+)

 

 

git push和pull都是针对于版本数据库的,如果数据没有提交到本地的版本数据库,那么这个新增加的数据不会推送

 

 

echo 11111 >> README.md

git add

git commit

git push

 

 

=========参考命令=============================

 

Command line instructions

 

 

Git global setup  全局配置命令

 

git config --global user.name "Administrator"

git config --global user.email "admin@example.com"

 

 

 

Create a new repository  克隆新的仓库命令

 

git clone git@CentOS7:root/36team.git

cd 36team

touch README.md

git add README.md

git commit -m "add README"

git push -u origin master

 

Existing folder  已经存在的普通目录然后需要关联远程仓库

 

cd existing_folder

git init

git remote add origin git@CentOS7:root/36team.git

git add .

git commit

git push -u origin master

 

Existing Git repository  已经存在的git工作目录直接关联远程仓库

 

cd existing_repo

git remote add origin git@CentOS7:root/36team.git

git push -u origin --all

git push -u origin --tags

 

======================================

 

 

第5章 Github

https://github.com/

 

http://blog.oldboyedu.com/git/     18. GitHub托管服务

 

 

运维操作流程:

 

git clone https://github.com/zhangyao8/ZYFileExplorer.git  # 从GitHub找到下载地址

git pull

 

正规流程:

开发在开发工具开发完代码,他有权限push推送代码到代码仓库。

运维只能使用git pull拉取代码,不能push,因此运维对代码仓库只读。

 

第6章 4. 代码上线

代码上线:代码下载下来,分发代码,

 

 

6.1 规范合理的步骤:

①代码需要经过测试,开发人员需在个人电脑搭建LNMP环境测试开发好的网站代码,并且在办公室或IDC机房的测试环境测试通过,最好有专职测试人员。

②规定好上线代码时间及周期,不要想上就上。程序代码上线规定时间,例如:三天上线一次,如网站需经常更新可每天下午17 点上线,这个看网站业务性质而定,原则就是影响用户体验最小。

③上线时间选择在流量低峰期,具体业务具体分析,从你的流量图找到流量的低谷

④代码上线之前需备份,网站程序出了问题方便回退,另外,从上线技巧上讲,上传代码时尽可能先传到服务器网站临时目录,传完整后,将老代码目录改个名备份,将新代码目录mv到站点目录过去,或者通过ln做软链接。

 

 

rm -f nginx   # 删除软链接目录是千万不要带上/

rm -f nginx/  # 会将目录下的内容全部删除

 

 

代码回滚(秒级回滚):代码上线出现问题,删掉连接到最新版本程序目录的软链接文件,重新创建软连接到老版本程序目录

 

 

 

[root@CentOS7 ~]# mkdir -p /var/www/html

[root@CentOS7 ~]# cd /var/www/html/

[root@CentOS7 html]# ls

[root@CentOS7 html]# ln -s /root/ZYFileExplorer /var/www/html/FileExplorer

[root@CentOS7 html]# ll -h

总用量 0

lrwxrwxrwx 1 root root 20 8月   8 11:40 FileExplorer -> /root/ZYFileExplorer

[root@CentOS7 html]# rm -f FileExplorer

[root@CentOS7 html]# ln -s /root/git_data /var/www/html/FileExplorer

[root@CentOS7 html]# ll -h

总用量 0

lrwxrwxrwx 1 root root 14 8月   8 11:41 FileExplorer -> /root/git_data

 

 

 

如何写一个代码上线,代码回滚脚本?

①手动代码上线,代码回滚的步骤你要精通

②将手动步骤改写成Shell脚本或者其他语言脚本

 

 

人肉运维:手动管理操作所有代码

自动运维:统一管理平台:jenkins,是一个空壳,框架,第一步你需要将人工操作的步骤写成脚本,然后导入jenkins,随后jenkins根据你的脚本自动下载代码--部署代码--运行--测试

 

类似kickstart,需要ks文件

 

 

正式环境代码上线

①将代码分发到所有web节点:ansible

②将每个节点代码使用软连接或者是mv方式上线

③需要重启服务的机器就重启,php不需要,tomcat需要

 

 

tomcat 代码上线千万不要一次性批量代码更新,重启服务,这种做法会导致宕机一段时间。

 

建议采用AB分组上线:首先从负载均衡器上摘掉一半的服务器,发布代码后,重启服务器测试,没问题后,挂载上线完成的一半,再卸载另外一半,操作和前面一样。

 

 

灰度发布:只对某一地区的用户进行代码更新,即使代码出现问题,也只是影响这个地区的用户,其他地域不受影响。

 

只对天津的用户更新代码

 

其他地区的用户访问的还是老代码

 

如果是天津的用户 就访问A集群

其他地区用户 就访问B集群

 

 

粗略的判断用户地区--通过用户的dns配置

localdns  223.5.5.5  == 北京

 

 

精确的判断用户地区== 通过用户的ip地址

 

你要收集到所有的ip地址对应的地理位置

 

 

6.2 注意事项

你的测试环境要和生产环境高度一致, 上线的流程里:办公测试环境→IDC测试环境→正式生产环境,所有环境中的所有软件均应版本统一,其次, 尽量单一,否则将后患无穷(开发测试成功,IDC测试就可能有问题)。例如: 操作系统、web服务器、jdk、php、tomcat等版本)

 

代码升级采用全量升级。永远将git仓库的代码目录覆盖现有站点目录

 

增量升级:将不同的,增加的文件复制到站点目录。缺点是:

①git仓库的代码不是最新的,而是你的站点目录是最新,最完整的

②代码回滚非常麻烦:你需要找到所有变动的文件

 

今日总结:

1. Gitlab及GitHub使用

2. 代码上线解决方案:AB分组,灰度发布

3. http://dwz.cn/6j9fHv

 

第7章 持续集成及交付

7.1 开发代码的演变

开发越来越多,代码文件越来越多。每天下班前合并代码时,发现很多合并失败的文件。最后每天加班3小时人工合并代码。

解决方法:将合并代码的周期缩短,以前一天,现在一小时,半小时

随时随地将代码合并,这种方法叫做持续集成。

7.2 持续集成CI

持续集成( Continuous Integration,简称CI). 持续集成指的是,频繁地(一天多次)将代码集成到主干。

它的好处主要有两个。

(1)快速发现错误。每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易。

(2)防止分支人幅偏离主干。如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

7.3 测试代码演变

借助一个自动化的部署工具,叫做JENKINS

开发上传自己的代码到gitlab,gitlab发消息通知JENKINS,随后jenkins从仓库拉取代码最后全自动部署到测试服务器进行相关测试,并将测试结果通知运维和开发。

还有偷懒的法,直接把这个工具交给开发使用,从此就可以高枕无忧了。

这种自动测试的方法叫做持续交付。

7.4 持续交付CD

持续交付(Continuous Delivery)指的是,频繁地将软件的新版本,交付给质量团队或者用户,以供评审。如果评审通过,代鵂就进入生产阶段。

持续交付可以看作持续集成的下一步。它强调的是,不管怎么更新,软件是随时随地可以交付的。

7.5 上线代码的演变

代码测试通过了,该到生产环境部署了,运维又该干活了.其实这是一锤了买卖了,要么成功,要么失败回滚。
可以使用自动部署工具,但是很多公司还是相信人工上线。
但是我们还有偷懒法,比如ANSIBLE,SALTSTACK
这里也有个方法论叫做持续部署。

7.6 持续部署

持续部署(Continuous Deployment)是持续交付的下一步,指的是代码通过评审以后,自动部署到生产环境。

持续部署的目标是,代码在任何时刻都是可部署的,可以进入生产阶段。

 

 

 

第8章 jenkins+gitlab

http://www.cnblogs.com/can-H/articles/7346724.html

https://www.abcdocker.com/abcdocker/2041

8.1 jenkins简介

Jenkins是一个用JAVA编写的开源的持续集成工具。在与ORACLE发生争执后,项目从HUDSONIIJI目独立出来。

Jenkins提供了软件开发的持续集成服务。它运行在SERVLET容器中(例如APACHE TOMCAT)。它支持软件配置管理(SCM)工具(包括ACCUREV SCM、CVS、SUBVERSION、TOMCAT, GIT、PERFORCE、CLEARCASE,和RTC),可以执行基于APACHE ANT和APACHE MAVEN的项目,以及任意的SHELL脚本和WINDOWS批处理命令。Jenkins的主要开发者是川口耕介。

Jenkins是在MIT许可证下发布的自由软件。

8.2 Jenkins特点

Jenkins 是 Continous Integration Server(持续集成服务),是 Hadson 的继续。 类似的产品: CruiseControl,BuildBot,TeamCity,BuildForge 等。

Jenkins 的突出特点:

开源免费;

跨平台,支持所有的平台;

master/slave 支持分布式的 build;

web 形式的可视化的管理页面;

安装配置超级简单;

tips 及时快速的帮助;

已有的 200 多个插件;

 

8.3 安装jenkins

8.3.1 环境准备

l. 准备2台安装好Centos7.2系统的机器,内存1G以上

2.所有虚拟机的防火墙和SElinux关闭

3.主机名及IP地址关系如下:

Jenkins  10.0.0.100   不需要安装软件

Gitlab   10.0.O.101   安装好gitlab

4.Linux中能发邮件的账号

 

[root@jenkins ~]# cat /etc/redhat-release

CentOS Linux release 7.2.1511 (Core)

[root@jenkins ~]# systemctl status firewalld.service

● firewalld.service - firewalld - dynamic firewall daemon

   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)

   Active: inactive (dead)

 

10月 11 22:50:55 gitlab systemd[1]: Starting firewalld - dynamic firewall daemon...

10月 11 14:58:27 gitlab systemd[1]: Started firewalld - dynamic firewall daemon.

10月 11 15:08:16 jenkins systemd[1]: Stopping firewalld - dynamic firewall daemon...

10月 11 15:08:16 jenkins systemd[1]: Stopped firewalld - dynamic firewall daemon.

[root@jenkins ~]# getenforce

Disabled

8.3.2 下载安装

8.3.2.1 内网仓库

此处是用的内网仓库, 自己在网上下载

echo "192.168.21.200 mirrors.aliyun.com" >>/etc/hosts

wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo

 

yum -y install java-1.8.0-openjdk java-1.8.0-openjdk-devel

 

rpm -ivh jenkins-2.73.1-1.1.noarch.rpm

/etc/init.d/jenkins start

8.3.2.2 常规下载

rpm包下载地址

https://pkg.jenkins.io/redhat-stable/

或者直接用清华源

安装jdk:

yum install java-1.8.0_openjdk java-1.8.0-openjdk-devel

安装rpm包

rpm -ivh jenkins-2.73.3-1.1.noarch.rpm

启动

/etc/init.d/jenkins start

 

[root@centos7 ~]# netstat -lntp|grep java

tcp6       0      0 :::8080                 :::*                    LISTEN      3292/java          

[root@centos7 ~]# ps aux|grep java

jenkins    3292  6.6 13.1 2600888 245160 ?      Ssl  19:54   0:25 /etc/alternatives/java -Dcom.sun.akuma.Daemon=daemonized -Djava.awt.headless=true -DJENKINS_HOME=/var/lib/jenkins -jar /usr/lib/jenkins/jenkins.war --logfile=/var/log/jenkins/jenkins.log --webroot=/var/cache/jenkins/war --daemon --httpPort=8080 --debug=5 --handlerCountMax=100 --handlerCountMaxIdle=20

root       3417  0.0  0.0 112644   948 pts/0    R+   20:01   0:00 grep --color=auto java

8.4 jenkins配置

8.4.1 解锁登录

浏览器打开页面操作

http://10.0.0.202:8080

 

#查看密码, 把密码串填上去

[root@centos7 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

07302833122f408fa63db16e4bc480e4

8.4.2 安装插件(根据需求选择)

8.4.2.1 用离线插件包(张耀)

 

 

 

安装离线插件包

tar xfP jenkins_plugins.tar.gz

ls /var/lib/jenkins/plugins/     #jenkins插件目录

/etc/init.d/jenkins restart      #重启

 

##### 附加:

tar的参数      -P   不要从文件名中清除引导符 /

打压缩包时就用P的话   解压时也加P,那么不管在什么路径都是直接解压在包里的路径里

 

用户名admin

密码从文件读取

[root@jenkins ~]# cat /var/lib/jenkins/secrets/initialAdminPassword

5412aeebd3764896ba75c290567818de

 

8.4.2.2 在线安装插件

自定义选择安装插件界面选择

插件管理:   系统管理è 管理插件  ##更新升级或者补装

 

8.4.3 jenkins目录结构

[root@jenkins ~]# rpm -ql jenkins    # 查看rpm安装的目录

/etc/init.d/jenkins       # 启动文件

/etc/logrotate.d/jenkins  # 日志轮询配置文件

/etc/sysconfig/jenkins    # jenkins启动配置文件

/usr/lib/jenkins

/usr/lib/jenkins/jenkins.war # 站点war包       

/usr/sbin/rcjenkins

/var/cache/jenkins    # war包解压路径,jenkins web程序存放目录 类似Tomcat的webapps

/var/lib/jenkins      # Jenkins工作目录

/var/log/jenkins      # 日志目录

 

8.4.4 修改登录密码

系统管理è 管理用户è 选择用户è 设置修改è Save保存

[root@centos7 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword  ### 此文件只是显示初始密码,修改密码后文件内容不变

07302833122f408fa63db16e4bc480e4

 

8.4.5 配置并发执行任务数量

系统管理è 系统设置è 执行者数量

 

 

8.4.6 配置邮件地址

系统管理è 系统设置è 下拉修改配置è 测试通过后è 保存

 

 

 

 

第9章 创建常规测试项目

9.1 创建新项目及文件 ##在gitlab上操作

 

 

http://www.zyops.com/markdown-syntax   ### Markdown 语法使用详解

 

 

 

9.2 创建新的kenjins任务

 

 

 

 

9.3 生成秘钥对

[root@jenkins ~]# ssh-keygen

生成公共/私有rsa密钥对。

输入保存密钥的文件(/root/.ssh/id_rsa):

输入密码(空为无密码):

再次输入相同的密码:

您的身份已保存在/root/.ssh/id_rsa中。

您的公钥保存在/root/.ssh/id_rs .pub中。

[root@centos7 ~]# cat /root/.ssh/id_rsa.pub

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDNGYMy0LOp0ce23HCOmbAnMfYM5GzY7cv0sJGNjTg/bJfM8lA1dbgvxuofxQaiG2DFddB+IS/5hW0TOH2AfCja2NSVkxlVmtfEBBnDKe9f5rkblcJm7KQiyTHNHdN9DWud2+eUJjUQWH84KpASEUjaCRrceDJH4vZArqOheK9/q2qi+/16o0p1+eGgQmNwYpw/DxKtKUC0u7su1NI9KzHmKNDpvDowyrbySXcQozot+Yw+5SpjbmtAI7oqwIgoWadp3PHpIjbqrbDmkZxCPADZnymAjI0wFF10z91Ye3PtVnKiox50hhQJT1u1btsBfnqIkXjC7qvoFX1J4Gzsa4BV root@centos7

9.4 添加公钥 ##gitlab上

 

 

9.5 添加私钥 ##jenkins上

 

[root@centos7 ~]# cat /root/.ssh/id_rsa    ####查看私钥

 

选择刚刚添加的认证证书 git

 

检查gitlab上登录信息文件,可以看到谁登录过

[root@centos7 ~]# tailf /var/log/secure

Aug  5 18:31:16 centos7 sshd[16356]: Disconnected from 10.0.0.8 port 43186

Aug  5 18:31:16 centos7 sshd[16349]: pam_unix(sshd:session): session closed for user git

Aug  5 18:31:41 centos7 sshd[16400]: Failed password for git from 10.0.0.8 port 43187 ssh2

Aug  5 18:31:41 centos7 sshd[16400]: Failed password for git from 10.0.0.8 port 43187 ssh2

Aug  5 18:31:41 centos7 sshd[16400]: Connection closed by 10.0.0.8 port 43187 [preauth]

Aug  5 18:31:46 centos7 sshd[16408]: Accepted publickey for git from 10.0.0.8 port 43188 ssh2: RSA SHA256:j1eFt3Le8G+FCafF0JqHrmFmo0ejiBUAPE8CTi+8CgA

Aug  5 18:31:46 centos7 sshd[16408]: pam_unix(sshd:session): session opened for user git by (uid=0)

Aug  5 18:31:47 centos7 sshd[16412]: Received disconnect from 10.0.0.8 port 43188:11: disconnected by user

Aug  5 18:31:47 centos7 sshd[16412]: Disconnected from 10.0.0.8 port 43188

Aug  5 18:31:47 centos7 sshd[16408]: pam_unix(sshd:session): session closed for user git

9.6 当信息不正确时删除更新认证信息

jenkinsè 凭证è 选择

 

 

9.7 配置构建步骤

 

 

因为程序执行用户是jenkins, 所以把代码目录改为jenkins权限

[root@centos7 ~]# mkdir -p /data/www

[root@centos7 ~]# ll /data/www -d

drwxr-xr-x 2 root root 6 Aug 27 11:52 /data/www

[root@centos7 ~]# chown -R jenkins.jenkins /data/www

[root@centos7 ~]# ll /data/www -d

drwxr-xr-x 2 jenkins jenkins 6 Aug 27 11:52 /data/www

9.7.1 代码目录需要jenkins有对应权限

方法一:将目录权限改为jenkins

方法二:使用sudo授权

方法三:不建议使用,将jenkins的执行用户改为root  ### vim /etc/sysconfig/jenkins

         JENKINS_USER="jenkins"  ###改为root

###### cp -a * /data/www

 

9.7.2 构建后操作

 

构建任务出错会发邮件通知,例如代码目录权限不对时,构建里的操作执行不了.

 

保存后构建,刷新下构建历史

 

点#1进去看一下,如果构建失败,邮件就发送下面的信息

 

[root@centos7 ~]# ll /data/www/

-rw-r--r-- 1 jenkins jenkins 44 Aug 27 12:39 README.md

[root@centos7 ~]# cat /data/www/README.md

 

 

代码修改后就可以直接运行这个任务了

 

 

[root@centos7 ~]# ll /data/www/

total 8

-rw-r--r-- 1 jenkins jenkins 41 Aug 27 13:02 new.py

-rw-r--r-- 1 jenkins jenkins 44 Aug 27 12:39 README.md

[root@centos7 ~]# python /data/www/new.py      ###这个也可以直接放在构建操作里面

hello world

点击任务历史,查看控制信息是否成功

 

9.7.3 jenkins构建工作的目录

构建任务查看  #### jenkins 构建工作的目录  /var/lib/jenkins/workspace/  每一个项目任务都有一个工作目录

[root@centos7 ~]# ll /var/lib/jenkins/workspace/

drwxr-xr-x 3 jenkins jenkins 33 Aug 27 12:39 php deploy

drwxr-xr-x 2 jenkins jenkins  6 Aug 27 12:42 php deploy@tmp

[root@centos7 ~]# cd /var/lib/jenkins/workspace/php\ deploy

[root@centos7 php deploy]# ll

total 8

-rw-r--r-- 1 jenkins jenkins 43 Aug 27 13:04 new.py

-rw-r--r-- 1 jenkins jenkins 44 Aug 27 12:39 README.md

构建操作就是在这个目录里  例如刚才构建操作里的  cp -a * /data/www

第10章 gitlab自动触发jenkins项目

10.1 下载安装插件

gitlab plugin

gitlab hook plugin

jenkinsè系统管理è管理插件è安装更新

 

10.2 配置gitlab认证

jenkinsèCredentials凭据èsystem系统èglobal credentials全局凭据 (unrestricted)èAdd credentials添加凭据

1、Kind选Gitlab API token

2、其中API token填gitlab中拥有库权限的账号令牌settingsèaccountèPrivateToken

3、ID填写用户账号

 

 

### API令牌信息在gitlab上找

 

10.3 系统设置gitlab选项

系统管理è 系统设置è下拉到Gitlab选项填写

 

10.4 配置项目任务

 

 

 

点击高级后 点击生成

 

把生成的信息填写到gitlab上面

 

#### 新版gitlab界面

 

posted @ 2019-05-31 14:57  mingetty  阅读(229)  评论(0)    收藏  举报