Linux操作文档——git及相关应用
| git相关概念 | 说明 |
|---|---|
| git | 是一种版本控制系统,是一个命令,是一种工具 |
| gitlib | 是用于实现 git 功能的开发库 |
| github | 是一个基于 git 实现的在线代码托管仓库,包含一个网站界面,向互联网开放 |
| gitlab | 是一个基于 git 实现的在线代码仓库托管软件,一般用于在企业内部网络搭建 git 私服 |
注: gitlab-ce 社区版 ; gitlab-ee 是企业版,收费
一、git基础
1、git安装
[root@git ~]# yum -y install git
[root@git ~]# git config --global user.name "zhangsan" //声明自己的名字
[root@git ~]# git config --global user.email "zhangsan@163.com" //声明自己的邮箱
[root@git ~]# mkdir /data //创建版本库目录
[root@git ~]# cd /data
[root@git data]# git init //初始化当前目录为版本库
初始化空的 Git 版本库于 /data/.git/
[root@git data]# ls .git/
branches config description HEAD hooks info objects refs
| 文件夹 | 说明 | 文件夹 | 说明 |
|---|---|---|---|
| branches | 分支目录 | config | 定义目录特有的配置选项 |
| description | 仅供git web使用 | HEAD | 指定当前的分支 |
| hooks | git钩子文件 | info | 包含一个全局排除文件(exclude) |
| objects | 存放所有的数据内容 | refs | 指针文件 |
| index | 暂存区文件 |
2、上传代码步骤
[root@git data]# vim readme.txt //创建文件,模拟代码
123456789
[root@git data]# git add readme.txt //单个文件上传
[root@git data]# git status //查看暂存区
# 位于分支 master
#
# 初始提交
#
# 要提交的变更:
# (使用 "git rm --cached <file>..." 撤出暂存区)
#
# 新文件: readme.txt
#
[root@git data]# git rm --cached readme.txt //把文件从暂存区撤销
rm 'readme.txt'
[root@git data]# git add . //当前目录所有文件上传
[root@git data]# git commit -m "add readme.txt file" //上传到版本库
[master(根提交) 0f7f688] add readme.txt file
1 file changed, 1 insertion(+)
create mode 100644 readme.txt
[root@git data]# vim readme.txt //修改readme.txt内容
123456789
111111111
[root@git data]# git add . //当前目录所有文件上传
[root@git data]# git diff readme.txt //查看异同
[root@git data]# git commit -m "add readme.txt file" //上传到版本库
[master 0282ca1] add readme.txt file
1 file changed, 1 insertion(+)
[root@git data]# git status //查看版本状态
[root@git data]# git log //显示历史记录详细信息
commit 0282ca17c98007d872f7c57f22d9ca1ffc60b8bb
Author: zhangsan <zhangsan@163.com>
Date: Mon Jul 20 17:00:28 2020 +0800
add readme.txt file
commit 0f7f6884ce95c8b577ac40bfd399cb5efdc95d62
Author: zhangsan <zhangsan@163.com>
Date: Mon Jul 20 16:59:14 2020 +0800
add readme.txt file
[root@git data]# git log --oneline //显示历史记录摘要信息
0282ca1 add readme.txt file
0f7f688 add readme.txt file
[root@git data]# git reset --hard HEAD^ //回滚到上个版本,HEAD^^上上版本,HEAD~10回滚到上10个版本
HEAD 现在位于 0f7f688 add readme.txt file
[root@git data]# git reset --hard 0f7f688 //通告git log 的版本号码回滚,仅写前7位就可
HEAD 现在位于 0f7f688 add readme.txt file
[root@git data]# git reflog //回滚动作命令日志
0f7f688 HEAD@{0}: reset: moving to HEAD^
0282ca1 HEAD@{1}: commit: add readme.txt file
0f7f688 HEAD@{2}: commit (initial): add readme.txt file
3、分支操作
[root@git data]# git branch //查看分支
* master
[root@git data]# git branch ops //创建分支
[root@git data]# git checkout ops //切换分支
切换到分支 'ops'
[root@git data]# git checkout -b dev //创建并切换到新的分支
切换到一个新分支 'dev'
[root@git data]# git checkout master //切换到主分支
切换到分支 'master'
[root@git data]# git merge dev //合并分支(先切回master)
Already up-to-date.
[root@git data]# git branch -d dev //删除分支
已删除分支 dev(曾为 0f7f688)。
二、gitlab配置
1、安装程序
[root@git ~]# yum -y install curl policycoreutils openssh-server openssh-clients postfix //安装前提软件
[root@git ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm //下载清华gitlab安装包
[root@git ~]# yum -y install gitlab-ce-10.2.3-ce.0.el7.x86_64.rpm //yum安装
[root@git ~]# vim /etc/gitlab/gitlab.rb //修改配置文件,指定ip地址
external_url 'http://192.168.1.10'
[root@git ~]# gitlab-ctl reconfigure //配置启动 gitlab
[root@git ~]# gitlab-ctl status //查看状态
[root@git ~]# gitlab-ctl start/stop/restart //gitlab服务管理命令(开启/关闭/重启)
也可以yum源安装
[root@git ~]# vim /etc/yum.repo.d/gitlab_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
[root@git ~]# yum -y install gitlab-ce
报错 502原因:未关闭防火墙,内存太小(建议4G以上)
2、登录gitlab

1、取消注册功能
登录gitlab–admin area(顶部菜单栏小扳手图标)–左侧面板settings–Sign-up Restrictions–去除勾选sign-up enabled

2、修改登录欢迎界面
登录gitlab–admin area–Appearance–填写管理员联系方式和logo–save


3、gitlab汉化
[root@git ~]# cat /opt/gitlab/embedded/service/gitlab-rails/VERSION //查看版本
10.2.3
[root@git ~]# gitlab-ctl stop
[root@git ~]# git clone https://gitlab.com/xhang/gitlab.git
[root@git ~]# cat /root/gitlab/VERSION //查看该汉化补丁的版本
[root@git ~]# tar zxf gitlab-patch-zh.tat.gz //本地上传操作
[root@git ~]# cd gitlab/
[root@git gitlab]# git diff v10.2.3 v10.2.3-zh > ../10.2.3-zh.diff
[root@git gitlab]# patch -d /opt/gitlab/embedded/service/gitlab-rails -p1 < /root/10.2.3-zh.diff
[root@git gitlab]# gitlab-ctl restart
4、项目创建流程
1、创建group
登录gitlab–admin area–new group

| 访问权限 | 说明 |
|---|---|
| Private | 只有组成员才能看到 |
| Internal | 只要登录的用户就能看到 |
| Public | 所有人都能看到 |
2、创建用户
登录gitlab–admin area–new user–添加用户名、邮箱–create–edit–修改密码



3、创建项目
登录gitlab–admin area–new project–注意选择组



4、将成员添加进组


| 用户权限 | 说明 |
|---|---|
| Guest | 可以创建issue、发表评论,不能读写版本库 |
| Reporter | 可以克隆代码,不能提交,测试、产品经理可以赋予这个权限 |
| Developer | 可以克隆代码、开发、提交、push,开发人员可以赋予这个权限 |
| Master | 可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限 |
| Owner | 可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限 |

4、核心开发人员更新代码流程(管理员)
[root@git ~]# ssh-keygen -t rsa //本地用户创建秘钥
[root@git ~]# cat /root/.ssh/id_rsa.pub //复制公钥内容
[root@git ~]# git clone git@192.168.1.10:dev/web.git //克隆下载项目
[root@git ~]# cd web/
[root@git web]# echo 123456 > new.txt //修改文件内容
[root@git web]# git add .
[root@git web]# git commit -m "add new.txt"
[master a71ba98] add new.txt
1 file changed, 1 insertion(+)
create mode 100644 new.txt
[root@git web]# git push -u origin master //推送上传代码
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 274 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To git@192.168.1.10:dev/web.git
a7461dc..a71ba98 master -> master
分支 master 设置为跟踪来自 origin 的远程分支 master。
复制公钥内容黏贴到web界面:右上角–用户–settings–SSH Keys


5、普通开发人员更新代码流程
[root@client ~]# ssh-keygen -t rsa //本地用户创建秘钥
[root@client ~]# cat /root/.ssh/id_rsa.pub //复制公钥内容
[root@client ~]# mkdir /data //关联远程仓库
[root@client ~]# cd /data/
[root@client data]# git init
初始化空的 Git 版本库于 /data/.git/
[root@client data]# git remote add origin git@192.168.1.10:dev/web.git
[root@client data]# git pull origin master //下载同步代码
[root@client data]# git config --global user.email "dev01@qq.com" //创建分支
[root@client data]# git config --global user.name "dev01"
[root@client data]# git checkout -b ops
切换到一个新分支 'ops'
[root@client data]# echo 6666666 > new111.txt //修改代码
[root@client data]# git add .
[root@client data]# git commit -m "add new111.txt"
[ops 5a120b6] add new111.txt
1 file changed, 1 insertion(+)
create mode 100644 new111.txt
[root@client data]# git push -u origin ops //推送dev分支(普通用户无权推送master)
Counting objects: 4, done.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 296 bytes | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for ops, visit:
remote: http://192.168.1.10/dev/web/merge_requests/new?merge_request%5Bsource_branch%5D=ops
remote:
To git@192.168.1.10:dev/web.git
* [new branch] ops -> ops
分支 ops 设置为跟踪来自 origin 的远程分支 ops。
在web界面创建merge请求


同意merge请求



三、GitLab与Jenkins持续集成平台使用方法
1、安装Jenkins
[root@git ~]# yum -y install java
[root@git ~]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.222-1.1.noarch.rpm
[root@git ~]# yum -y install jenkins-2.222-1.1.noarch.rpm
[root@git ~]# vim /etc/sysconfig/jenkins
JENKINS_USER="root"
JENKINS_PORT="8081" //新版GitLab的服务端口为8080,避免和GitLab的服务端口相冲突
[root@git ~]# systemctl start jenkins
[root@git ~]# systemctl enable jenkins
jenkins.service is not a native service, redirecting to /sbin/chkconfig.
Executing /sbin/chkconfig jenkins on
[root@git ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
5e254b49f833401384b33d3bb4cdae8a //把密码输入以下页面
最新版安装方法
[root@git ~]# cd /etc/yum.repos.d/
[root@git yum.repos.d]# wget http://pkg.jenkins.io/redhat/jenkins.repo
[root@git yum.repos.d]# rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
[root@git yum.repos.d]# yum -y install jenkins
注意:如果安装jenkins后没有修改配置为root,脚本执行如果有权限问题,解决方法
[root@git ~]# vim /etc/passwd //修改jenkins登录shell为/bin/bash
jenkins:x:990:985:Jenkins Automation Server:/var/lib/jenkins:/bin/bash
[root@git ~]# vim /root/.bash_profile //修改jenkins服务器的本地profile
export PS1='[\u@\h \W]\$'
[root@git ~]# source /root/.bash_profile
[root@git ~]# isudo //赋予jenkins用户sudo权限
jenkins ALL=(ALL) NOPASSWD: ALL

2、复制插件包到服务器
插件下载地址:http://updates.jenkins-ci.org/download/plugins/ ,在有网的环境下,把自己需要的插件下载好,然后再从本地上传。
[root@git ~]# tar zxf jenkins-plugins.tar.gz
[root@git ~]# cp plugins/* /var/lib/jenkins/plugins/
[root@git plugins]# systemctl restart jenkins


3、设置中文
搜索关键词Localization,装完这个插件无需设置重启后即可以了,首选这种插件


4、修改admin用户密码
右上角–admin点击下拉三角–Configure–Password字段–修改密码–save保存


5、关联gitlab
点击左上角logo–回到主页面–选择新项目“New Item”–填写项目名–选择项目类型“Freestyle project”–save保存


配置项目–源代码管理–git–填写存储库网址(git@IP:dev/web.git)–报红字错误,则需要添加私钥认证–如果认证成功–save保存

选择项目–左侧选择“build now”–下面构建历史出现蓝色标志–选择蓝色标志下拉列表–console output–输出执行过程

jenkins服务器上查看代码
[root@git ~]# cd /var/lib/jenkins/workspace
[root@git workspace]# ls
web
[root@git workspace]# cd web/
[root@git web]# ls
new111.txt new.txt README.md
四、jenkins关联gitlab,实现自动构建上传代码
1、在gitlab服务器上部署项目代码
在gitlab服务器上增加gitlab主机和jenkins的SSH秘钥

[root@gitlab ~]# cd /root
[root@gitlab ~]# git clone https://gitee.com/kangjie1209/monitor.git //在gitee码云上下载项目代码
[root@gitlab ~]# mkdir /web //gitlab服务器创建本地代码库
[root@gitlab ~]# cd /web
[root@gitlab web]# cp -rp /root/monitor/* /web
[root@gitlab web]# git init //在gitlab本地服务器上传代码到gitlab
初始化空的 Git 版本库于 /web/.git/
[root@gitlab web]# git config --global user.name "zhangsan"
[root@gitlab web]# git config --global user.email zhangsan@163.com
[root@gitlab web]# git remote add origin git@192.168.1.10:dev/web.git
[root@gitlab web]# git add .
[root@gitlab web]# git commit -m "Initial commit"
[root@gitlab web]# git push -u origin master
登录gitlab,创建新的web项目

登录jenkins,新建自由项目web


build now:手动同步测试

开启一台主机,安装nginx
[root@nginx ~]# yum -y install epel-release
[root@nginx ~]# yum -y install nginx
[root@nginx ~]# systemctl start nginx
2、jenkins实现脚本上传网站代码
[root@jenkins ~]# mkdir /scripts
[root@jenkins ~]# vim /scripts/web.sh //在jenkins上编写上传nginx的脚本
#!/bin/sh
#/var/lib/jenkins/workspace/web/目录在手动同步测试后才会出现
CODE_DIR=/var/lib/jenkins/workspace/web/
WEB_DIR=/usr/share/nginx
IP=192.168.1.30
TIME=`date +%F-%H-%M-%S`
cd $CODE_DIR && tar zcf /tmp/web-${TIME}.tar.gz ./*
scp /tmp/web-${TIME}.tar.gz $IP:$WEB_DIR
ssh root@$IP "cd $WEB_DIR && mkdir web-$TIME"
ssh root@$IP "cd $WEB_DIR && tar xf web-${TIME}.tar.gz -C web-$TIME && rm -rf web-${TIME}.tar.gz"
ssh root@$IP "cd $WEB_DIR && rm -rf html && ln -s web-$TIME html"
[root@jenkins ~]# ssh-copy-id root@192.168.1.30 //jenkins传输公钥到nginx
[root@jenkins ~]# sh /scripts/web.sh //执行脚本
手动构建,关联脚本,自动上传
项目web – configure – build – Execute shell – sh /scripts/web.sh

3、jenkins关联gitlab,实现自动构建上传代码
web项目-- configure – build triggers – 勾选最长选项 – 点击高级advanced
– 选择Filter branches by name --在include填写master – 点击generate生成令牌 – 复制令牌和触发器顶部url路径 – save保存



更新push代码,测试自动构建上传
[root@gitlab web]# vim index.html
[root@gitlab web]# git add .
[root@gitlab web]# git commit -m "modify index.html"
[root@gitlab web]# git push -u origin master

浙公网安备 33010602011771号