首页 > 代码库 > 【持续集成】GIT+jenkins+snoar——GIT
【持续集成】GIT+jenkins+snoar——GIT
一.GIT基础
1.1 git简介
- linux用C语言编写
- 2005年诞生
- 分布式管理系统
- 速度快、适合大规模、跨地区多人协同开发
1.2 本地管理、集中式、分布式
1.3 git安装
1 #CentOS上安装 2 [root@linux-node1 ~]# yum -y install git 3 #Ubuntu上安装 4 [root@linux-node1 ~]# apt-get install git
注:生产环境中,不建议这么安装,yum装的git版本是1.8,推荐使用2.7版本
编译安装:
1 #安装依赖包 2 [root@linux-node1 ~]# yum install -y curl-devel expat-devel gettext-devel openssl-devel zlib-devel gcc perl-ExtUtils-MakeMaker 3 #下载安装包 4 [root@linux-node1 ~]# wget https://github.com/git/git/archive/v2.7.4.zip 5 #解压 6 [root@linux-node1 ~]# unzip git-2.7.4/ 7 #进入git目录 8 [root@linux-node1 ~]# cd git-2.7.4/ 9 #编译 10 [root@linux-node1 git-2.7.4]# make prefix=/usr/local/git all 11 #安装 12 [root@linux-node1 git-2.7.4]# make prefix=/usr/local/git install 13 #删除原有git命令 14 [root@linux-node1 git-2.7.4]# rm -rf /usr/bin/git 15 #软连接编译安装git命令 16 [root@linux-node1 git-2.7.4]# ln -s /usr/local/git/bin/git /usr/bin/git 17 #查看git版本 18 [root@linux-node1 git-2.7.4]# git --version 19 git version 2.7.4
1.4 git初始化
1 #创建gittest目录 2 [root@linux-node1 ~]# mkdir gittest 3 #进入目录 4 [root@linux-node1 ~]# cd gittest 5 #初始化git仓库 6 [root@linux-node1 gittest]# git init 7 Initialized empty Git repository in /root/gittest/.git/ 8 #配置基础用户信息 9 [root@linux-node1 gittest]# git config --global user.name "goodcook" 10 #配置基础用户邮件信息 11 [root@linux-node1 gittest]# git config --global user.email "goodcook@qq.com"
1.5 查看基本信息
1 #查看基本信息 2 [root@linux-node1 gittest]# git config --list 3 user.name=goodcook 4 user.email=goodcook@qq.com 5 core.repositoryformatversion=0 6 core.filemode=true 7 core.bare=false 8 core.logallrefupdates=true
1.6 git区域
-
远程仓库
-
本地仓库
-
暂存区域
-
工作目录
1.7 四种状态
git如何进行版本管理的呢?它对管理的文件,会打上一个标识,这个标识,就分为四种状态。
- untracked(未被追踪的文件)
第一次放到库中的文件,文件与库没有任何的关联,还没有纳入系统管理版本的序列中。使用 git add将该类文件推送到暂存区,状态就变成了staged。
- unmodified(未被修改的文件)
未被修改的文件,增加新代码(修改)之后,会重新拉倒工作目录中。
- modified(修改后的文件)
修改之后,将该文件git add加入到暂存区,再通过commit放入本地库中。
- staged(暂存区的文件)
使用git commit将该类文件提交,变成unmodified(未被修改的文件),从暂存区,将文件放到本地仓库中。
流程:
1.新文件,放到git目录中(untracked 未被追踪的文件)
2.使用git add将未被追踪的文件推送到暂存区(staged 暂存区文件)
3.使用git commit将暂存区文件提交到本地仓库中(unmodified 未被修改的文件)
4.此时如果修改文件(modified 修改的文件),然后再用git add将修改后的文件加入到暂存区(staged)
5.然后再提交git commit到本地仓库变成(unmodified 未被修改的文件)...周而复始
1.8 git常用命令
git add 加入暂存区(索引区)
git status 查看状态
git status -s 状态概览
git diff 尚未暂存的文件
git diff --staged 暂存区文件
git commit 提交更新
git reset 回滚
git rm 从版本库中移除
git rm --cached 从暂存区中移除
git mv 相当于mv 、git rm 、git add三个命令
1 #创建一个文件 2 [root@linux-node1 gittest]# touch index.html 3 #编辑index.html 4 [root@linux-node1 gittest]# vim index.html 5 <h1> welcome to my index </h1> 6 #使用git status查看该文件状态 7 [root@linux-node1 gittest]# git status
On branch master
Initial commit
Untracked files: #此时状态为未被追踪的文件
(use "git add <file>..." to include in what will be committed)
index.html
nothing added to commit but untracked files present (use "git add" to track) 8 #加入代码库 9 [root@linux-node1 gittest]# git add index.html 10 #再次查看状态 11 [root@linux-node1 gittest]# git status
On branch master
Initial commit
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: index.html 12 #提交 13 [root@linux-node1 gittest]# git commit -m "first commit" 14 [master (root-commit) 6f3aca3] first commit 15 1 file changed, 1 insertion(+) 16 create mode 100644 index.html 17 #再次查看状态 18 [root@linux-node1 gittest]# git status
On branch master
nothing to commit, working directory clean #此时的状态是工作目录中没有还没有提交的文件了
二.分支管理
2.1 创建一个分支
1 #创建一个分支 2 [root@linux-node1 gittest]# git branch about 3 #查看状态 4 [root@linux-node1 gittest]# git status 5 On branch master #还是在master上 6 #切换分支 7 [root@linux-node1 gittest]# git checkout about 8 Switched to branch ‘about‘ 9 #查看状态 10 [root@linux-node1 gittest]# git status 11 On branch about
2.2 分支命令
git branch 查看分支
git branch -v 详细查看
git branch --merged 查看哪些分支已经被融合
git branch --no-merged 查看哪些分支还没有被融合
git branch -d 删除分支
git checkout 切换分支
git merge 融合分支(将分支代码融合到主干)
git log 查看提交事件
git stash 暂存区
git tag 打标签
三.远程仓库
3.1 将github上的代码拉到本地
1 #拉代码 2 [root@linux-node1 ~]# git clone https://github.com/zzgxgit/saltstack-apache.git 3 Cloning into ‘saltstack-apache‘... 4 remote: Counting objects: 20, done. 5 remote: Total 20 (delta 0), reused 0 (delta 0), pack-reused 20 6 Unpacking objects: 100% (20/20), done. 7 Checking connectivity... done. 8 #进入库目录 9 [root@linux-node1 ~]# cd saltstack-apache/ 10 #查看状态 11 [root@linux-node1 saltstack-apache]# git status 12 On branch master 13 Your branch is up-to-date with ‘origin/master‘. 14 nothing to commit, working directory clean
3.2 修改文件并push
1 #查看目录内容 2 [root@linux-node1 saltstack-apache]# ll 3 total 4 4 drwxr-xr-x 3 root root 18 May 4 17:57 modules 5 -rw-r--r-- 1 root root 18 May 4 17:57 README.md 6 #编辑README.md 7 [root@linux-node1 saltstack-apache]# vim README.m 8 #增加一行内容 9 test git push 10 #添加到staged 11 [root@linux-node1 saltstack-apache]# git add . 12 #提交 13 [root@linux-node1 saltstack-apache]# git commit -m "edit README.md" 14 [master 6370f89] edit README.md 15 1 file changed, 1 insertion(+) 16 #远程库 17 [root@linux-node1 saltstack-apache]# git remote 18 origin 19 #查看详细信息 20 [root@linux-node1 saltstack-apache]# git remote -v 21 origin https://github.com/zzgxgit/saltstack-apache.git (fetch) 22 origin https://github.com/zzgxgit/saltstack-apache.git (push) 23 #推送到远程库 24 [root@linux-node1 saltstack-apache]# git push origin master 25 #输入账号 26 Username for ‘https://github.com‘: zzgxgit 27 #输入密码 28 Password for ‘https://zzgxgit@github.com‘: 29 Counting objects: 3, done. 30 Compressing objects: 100% (2/2), done. 31 Writing objects: 100% (3/3), 309 bytes | 0 bytes/s, done. 32 Total 3 (delta 0), reused 0 (delta 0) 33 To https://github.com/zzgxgit/saltstack-apache.git 34 a6443a5..6370f89 master -> master
3.3 给本地库添加远程信息
1 #进入之前初始化的本地库 2 [root@linux-node1 ~]# cd gittest/ 3 #查看远程信息(没有任何信息) 4 [root@linux-node1 gittest]# git remote 5 [root@linux-node1 gittest]# git remote -v 6 #添加远程库信息 7 [root@linux-node1 gittest]# git remote add origin http://192.168.100.1/goodcook.git 8 #查看信息 9 [root@linux-node1 gittest]# git remote 10 origin 11 [root@linux-node1 gittest]# git remote -v 12 origin http://192.168.100.1/goodcook.git (fetch) 13 origin http://192.168.100.1/goodcook.git (push) 14 #可以添加多个远程库 15 [root@linux-node1 gittest]# git remote add gitlab http://192.168.100.2/goodcook.git 16 #查看信息 17 [root@linux-node1 gittest]# git remote 18 gitlab 19 origin 20 [root@linux-node1 gittest]# git remote -v 21 gitlab http://192.168.100.2/goodcook.git (fetch) 22 gitlab http://192.168.100.2/goodcook.git (push) 23 origin http://192.168.100.1/goodcook.git (fetch) 24 origin http://192.168.100.1/goodcook.git (push)
3.4 手动打标签
1 #查看标签(为空) 2 [root@linux-node1 gittest]# git tag 3 #查看一下提交信息 4 [root@linux-node1 gittest]# git log 5 commit 6f3aca32bfe6caeb69be9c8b4caa856eedd495ed 6 Author: goodcook <goodcook@qq.com> 7 Date: Thu May 4 14:22:51 2017 +0800 8 9 first commit 10 #打标签(添加一个1.0的版本信息) 11 [root@linux-node1 gittest]# git tag -a v1.0 -m "version" 12 #查看标签 13 [root@linux-node1 gittest]# git tag 14 v1.0
四. gitlab安装配置
4.1 安装gitlalb
1 #安装依赖 2 [root@linux-node1 ~]# yum -y install curl policycoreutils openssh-server openssh-clients 3 #sshd开机自启 4 [root@linux-node1 ~]# systemctl enable sshd 5 #启动sshd 6 [root@linux-node1 ~]# systemctl start sshd 7 #安装postfix 8 [root@linux-node1 ~]# yum install postfix 9 #设置开机自启 10 [root@linux-node1 ~]# systemctl enable postfix 11 #启动 12 [root@linux-node1 ~]# systemctl start postfix 13 #安装gitlab8.9.5 14 [root@linux-node1 ~]# rpm -ivh gitlab-ce-8.9.5-ce.0.el7.x86_64.rpm
Preparing... ################################# [100%]
Updating / installing...
1:gitlab-ce-8.9.5-ce.0.el7 ################################# [100%]
4.2 配置文件
1 #编辑配置文件 2 [root@linux-node1 ~]# vim /etc/gitlab/gitlab.rb 3 #修改URL(没有域名就用IP) 4 external_url ‘http://192.168.56.11‘ 5 #自动化配置 6 [root@linux-node1 ~]# gitlab-ctl reconfigure
4.3 访问gitlab
打开浏览器,输入刚才配置的URL:192.168.56.11
设置一个密码,不能太短:ABCD1234
【登录】
用户名:root
密码:ABCD1234
至此,gitlab就安装完成了。
4.4 gitlab常用命令
gitlab-ctl status 查看各组件状态
gitlab-ctl start 开启服务
gitlab-ctl stop 停止服务
gitlab-ctl restart 重启服务
gitlab-ctl tail <service> 查看某一组件日志 例:gitlab-ctl tail nginx
4.5 gitlab组件介绍
nginx 静态web服务器
gitlab-shell 用于处理git命令和修改authorized keys列表
logrotate 日志文件管理工具
gitlab-workhorse 轻量级的反向代理服务器
postgresql 数据库
redis 缓存
sidekiq 用于在后台执行队列任务(异步执行)
unicorn gitlab rails应用是托管在这个服务器上面的
4.6 gitlab常用目录介绍
/var/opt/gitlab/git-data/repositories/root/ 库默认存储目录
/opt/gitlab/ 应用代码和相应的依赖程序
/var/opt/gitlab/ 使用gitlab-ctl reconfigure命令编译后的应用数据和配置文件,不需要人为修改配置
/etc/gitlab/ 配置文件目录
/var/log/gitlab/ 存放各个组件的日志目录
/var/opt/gitlab/backups/ 备份文件生成的目录
五.gitlab管理操作
5.1创建工程
单击右上角的扳手图标
单击new group 创建一个组
创建组
创建用户
按要求创建用户按照此法 创建 dev1和dev2用户
单机进去,查看用户
回到组的页面
给 pm 用户授权为 master
进入项目页面
创建一个java1的项目
设置权限
配置ssh-key
1 #创建一个秘钥对 2 [root@linux-node1 .ssh]# ssh-keygen 3 #查看公钥并拷贝 4 [root@linux-node1 .ssh]# cat id_rsa.pub
将公钥加入后点击Add key
六. gitlab备份和恢复
6.1 配置文件
1 #编辑配置文件 2 [root@linux-node1 ~]# vim /etc/gitlab/gitlab.rb 3 #备份目录 4 201 gitlab_rails[‘backup_path‘] = "/data/backups/gitlab" 5 #备份保留7天 6 204 gitlab_rails[‘backup_keep_time‘] = 604800 7 #创建备份目录 8 [root@linux-node1 ~]# mkdir -p /data/backups/gitlab 9 #改完配置重新自动化生成 10 [root@linux-node1 ~]# gitlab-ctl reconfigure 11 #重启服务 12 [root@linux-node1 ~]# gitlab-ctl restart 13 #授权 14 [root@linux-node1 ~]# chown -R git:git /data/backups/gitlab/ 15 #添加定时任务 16 [root@linux-node1 ~]# crontab -e 17 #每天2点全备一次 18 0 2 * * * /usr/bin/gitlab-rake gitlab:backup:create &>/dev/null
6.2 备份测试
1 #手动执行一次 2 [root@linux-node1 ~]# gitlab-rake gitlab:backup:create 3 #查看备份 4 [root@linux-node1 ~]# ll /data/backups/gitlab/
total 40
-rw------- 1 git git 40960 May 5 03:37 1493926679_gitlab_backup.tar
6.3 恢复数据
6.3.1删除项目
6.3.2 恢复操作
1 #要停两个服务 2 [root@linux-node1 ~]# gitlab-ctl stop unicorn 3 ok: down: unicorn: 0s, normally up 4 [root@linux-node1 ~]# gitlab-ctl stop sidekiq 5 ok: down: sidekiq: 1s, normally up 6 #恢复备份 7 [root@linux-node1 ~]# gitlab-rake gitlab:backup:restore BACKUP=1493926679 8 #备份完,启动服务 9 [root@linux-node1 ~]# gitlab-ctl start unicorn 10 ok: run: unicorn: (pid 84833) 1s 11 [root@linux-node1 ~]# gitlab-ctl start sidekiq 12 ok: run: sidekiq: (pid 84865) 0s
打开页面:
注:恢复操作中的 “BACKUP=1493926679” 是备份时候生成的备份文件名前面的时间戳。
七. gitlab邮件配置
7.1 配置文件
1 #编辑配置文件 2 [root@linux-node1 ~]# vim /etc/gitlab/gitlab.rb 3 21 gitlab_rails[‘time_zone‘] = ‘Asia/Shanghai‘ 4 22 gitlab_rails[‘gitlab_email_enabled‘] = true 5 23 gitlab_rails[‘gitlab_email_from‘] = ‘goodcook@126.com‘ 6 24 gitlab_rails[‘gitlab_email_display_name‘] = ‘gitlab‘ 7 306 gitlab_rails[‘smtp_enable‘] = true 8 307 gitlab_rails[‘smtp_address‘] = "smtp.126.com" 9 308 gitlab_rails[‘smtp_port‘] = 25 10 309 gitlab_rails[‘smtp_user_name‘] = "goodcook" 11 310 gitlab_rails[‘smtp_password‘] = "your_password" 12 311 gitlab_rails[‘smtp_domain‘] = "126.com" 13 312 gitlab_rails[‘smtp_authentication‘] = "login"
【开源是一种精神,分享是一种美德】
— By GoodCook
— 笔者QQ:253097001
— 欢迎大家随时来交流
—原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 、作者信息和本声明。否则将追究法律责任。
【持续集成】GIT+jenkins+snoar——GIT