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
暂存区域的作用:
- 如果直接提交到git数据库, 一提交就不能再后悔了.有了暂存区域,给自己留一个后悔的余地
- 将所有零散的需要提交的文件合并在一块然后一次性提交, 减少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 分支结构
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
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 解锁登录
浏览器打开页面操作
#查看密码, 把密码串填上去
[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界面

浙公网安备 33010602011771号