git+jenkins
- 一. git
- 1.1 安装配置git
- 1.2 git初始化
- 1.3 git仓库文件介绍
- 1.4 git中文件的三种状态的变化
- 1.5 git常规使用
- 1.6 多人协同开发
- 1.6.1创建初始项目
- 1.6.2 由开发leader创建用于开发新功能的dev分支并推送到github
- 1.6.3 开发人员自己在github上注册账号
- 1.6.4 开发leader在github的组织中要求开发人员
- 1.6.5 开发人员接收到邀请邮件,同意
- 1.6.6 开发leader在github的组织的项目中再次邀请开发人员并授予该项目的写权限
- 1.6.7 开发人员在自己的电脑上git clone开发leader给的项目地址,然后从dev分支上新建一个自己开发的分支game分支,开发完提交到github上的game分支
- 1.6.8 设置提交到github要合入dev分支的分支的review机制
- 1.6.9 开发人员在github上提交将game分支merge合入dev分支的pull request
- 1.6.10 开发leader在github上review后
- 1.7 给其他开源软件贡献代码
- 1.8 三个配置文件
- 1.9 github免密登录
- 1.5 git分支代码合并
- 1.6 git分支代码合并冲突
- 1.7 git的tag标签
- 1.7 github
- 1.8 gitlab
- 二. jenkins
一. git
1.1 安装配置git
安装
yum install git
配置
# 配置git使用的用户
[root@rh2 ~]# git config --global user.name "tony"
#配置git使用的邮箱
[root@rh2 ~]# git config --global user.email "[email protected]"
#配置语法高亮
[root@rh2 ~]# git config --global color.ui true
查看配置
[root@rh2 ~]# git config --list
user.name=tony
[email protected]
color.ui=true
[root@rh2 ~]#
[root@rh2 ~]# cat .gitconfig
[user]
name = tony
email = [email protected]
[color]
ui = true
1.2 git初始化
初始化工作目录
[root@rh2 ~]# mkdir /gitdata
[root@rh2 ~]# cd /gitdata/
# 初始化
[root@rh2 gitdata]# git init
Initialized empty Git repository in /gitdata/.git/
# 查看工作区状态
[root@rh2 gitdata]# git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)
1.3 git仓库文件介绍
branches:分支目录
config:定义项目特有的配置选项
description:仅供git web程序使用
HEAD:指示当前的分支
hooks:包含git钩子文件
info:包含一个全局排除文件(exclude文件)
objects:存放所有数据内容,有info和pack两个子文件夹
refs:存放指向数据(分支)的提交对象的指针
index:保存暂存区信息,在执行git init时,这个文件还没有
1.4 git中文件的三种状态的变化
1. 红色:新值的文件/修改了已经commit的文件 --> git add 文件名
2. 绿色:文件已被暂存,已被git管理起来 --> git commit -m '描述信息'
3. 生成版本
1.5 git常规使用
1.5.1 git的本地三大区域
工作目录:执行git init的那个目录
暂存区域:工作目录中.git/index目录
本地仓库:工作目录中.git/objects目录
reset --hard: 会在重置 HEAD 和branch的同时,重置stage区和工作目录里的内容。当你在 reset 后面加了 --hard 参数时,你的stage区和工作目录里的内容会被完全重置为和HEAD的新位置相同的内容。换句话说,就是你的没有commit的修改会被全部擦掉。
reset --soft: 重置 HEAD 和branch,但保留工作区和暂存区的差异。
reset --mixed: 重置 HEAD 和branch,重置stage区内容,但保留工作区的差异。
git checkout -- <file> 拉取暂存区文件 并将其替换成工作区文件
git reset HEAD -- <file> 拉取最近一次提交到版本库的文件到暂存区 该操作不影响工作区
1.5.2 git的四种状态
1.5.3 git基础命令
1.5.3.1 第一阶段
- git init 初始化仓库
- git status 查看当前目录下文件的状态
新值的文件和修改后的文件是红色 - git add file 添加文件到暂存区
只是添加到暂存区的文件是没有被版本管理的,还需要commit到本地仓库 - git add .|* 添加所有文件到暂存区,但还没创建版本
- 在commit生成本地版本前要先配置用户名和邮箱,否则会报错
git config --global user.name ‘andy’
git config --global user.email ‘[email protected]’ - 生成本地版本git commit -m ‘描述信息’
- 查看本地版本信息git log
1.5.3.2 第二阶段开发新功能
- git add
- git commit -m ‘添加新功能’
1.5.3.3 第三阶段回滚至之前版本
- 查看本地版本 git log
- 回滚版本 git reset --hard 版本号
1.5.3.4 第四阶段回滚至之后版本
- 查看所有版本 git reflog
- 回滚版本 git reset --hard 版本号
1.5.3.5 第五阶段创建新分支来hotfix bug或开发新功能,之后再合并入master分支
- 查看分支 git branch
- 创建分支 git branch 分支名
- 切换分支 git checkout 分支名
- 合并分支(可能产生冲突)
git merge 要合并的分支 - 删除分支 git branch -d 分支名
1.5.3.6 有两个办公地点,家和公司,分别各有一台办公电脑,这时需要远程仓库的加入,在每一台办公电脑上写的代码都提交到远程仓库,再从另一台电脑来取到本地继续开发代码
- 在家里写完代码上传到远程仓库
1.1 给远程仓库起别名 git remote add origin 远程仓库地址
1.2 向远程仓库推送代码 git push -u origin 分支名
1.5.3.6 rebase
rebase的作用是使git记录变得简洁
1.5.3.6.1 第一种情况:将多个记录合并成一个记录
本地分支改名
git branch -m master local1
设置本地分支和远程仓库分支的跟踪信息:
设置本地分支与远程分支的追踪:
git branch --set-upstream-to=origin/远程分支名 本地分支名
//或
git branch --set-upstream 远程分支名
//或
git branch -u 远程分支名
- git rm --cached file 将文件从暂存区撤回到工作区
从暂存区撤回到工作区,然后在rm
[root@rh2 gitdata]# git rm --cached a
[root@rh2 gitdata]# rm -rf a
- 直接从暂存区和工作区删除文件
git rm -f 文件名
- git commit -m “messages” 将暂存区的文件提交到本地仓库
- 将已经commit到本地仓库的文件改名,方法一
四步:
a. mv b b.txt
b. git rm --cached b
c. git add b.txt
d. git commit -m “rename b b.txt”
[root@rh2 gitdata]# mv b b.txt
[root@rh2 gitdata]# ll
total 0
-rw-r--r-- 1 root root 0 Jun 21 15:32 b.txt
-rw-r--r-- 1 root root 0 Jun 21 15:32 c
[root@rh2 gitdata]# git status
On branch master
Changes not staged for commit:
(use "git add/rm <file>..." to update what will be committed)
(use "git restore <file>..." to discard changes in working directory)
deleted: b
Untracked files:
(use "git add <file>..." to include in what will be committed)
b.txt
no changes added to commit (use "git add" and/or "git commit -a")
[root@rh2 gitdata]# git rm --cached b
rm 'b'
[root@rh2 gitdata]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
deleted: b
Untracked files:
(use "git add <file>..." to include in what will be committed)
b.txt
[root@rh2 gitdata]# git add b.txt
[root@rh2 gitdata]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: b -> b.txt
[root@rh2 gitdata]# git commit -m "rename b b.txt"
[master 2ea7e4c] rename b b.txt
1 file changed, 0 insertions(+), 0 deletions(-)
rename b => b.txt (100%)
[root@rh2 gitdata]# git status
On branch master
nothing to commit, working tree clean
- 将已经commit到本地仓库的文件改名,方法二
两步:
a. git mv b.txt b
b. git commit -m “modify b.txt->b”
[root@rh2 gitdata]# git mv b.txt b
[root@rh2 gitdata]# git status
On branch master
Changes to be committed:
(use "git restore --staged <file>..." to unstage)
renamed: b.txt -> b
[root@rh2 gitdata]# git commit -m "modify b.txt->b"
[master 2c7e94d] modify b.txt->b
1 file changed, 0 insertions(+), 0 deletions(-)
rename b.txt => b (100%)
[root@rh2 gitdata]# git status
On branch master
nothing to commit, working tree clean
-
对比本地工作区和暂存区的不同
git diff -
对比暂存区和本地仓库的不同
git diff --cached -
修改完一个文件后,可以用一条命令提交到本地仓库
git commit -am “change c” -
git log:执行git commit就相当于虚拟机的镜像,任何操作都被做了一次快照,可以恢复到任意一个位置。git log查看历史的git commit快照操作
-
git log --oneline:一行显示commit信息
-
git log --oneline --decorate:一行显示commit信息加指针
-
git log -p: 加p参数会显示具体的变更信息
-
git log -1: 加参数数字,只显示最近的几条
-
git reflog:查看所有镜像
-
git reset --hard 0bb7100:将本地仓库中的代码回滚到某一个镜像
-
查看已经配置的远程仓库
-
删除已经配置的远程仓库
git remote remove 远程仓库名 -
添加一个远程仓库
git remote add 远程仓库名 远程仓库url
-
查看所有配置的远程仓库
-
给远程仓库重命名
git remote rename 原名 新名 -
将本地仓库某个branch的代码推送到远程仓库
git push -u 要推送到的远程仓库 推送哪个branch到远程仓库
1.6 多人协同开发
1.6.1创建初始项目
- 在github上创建一个组织
- 在组织中添加项目和邀请合作开发者
- 将初始项目版本push到github项目中
[root@rh2 ~]# mkdir /test
[root@rh2 ~]# cd /test/
[root@rh2 test]# git init
Initialized empty Git repository in /test/.git/
[root@rh2 test]# touch app.txt
[root@rh2 test]# git add .
[root@rh2 test]# git commit -m "第一版"
[master (root-commit) ccf0aec] 第一版
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 app.txt
[root@rh2 test]# git branch
* master
[root@rh2 test]# git remote add origin https://github.com/clearsight-org/test.git
[root@rh2 test]# git push -u origin master
Username for 'https://github.com': clearsight51
Password for 'https://[email protected]':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 215 bytes | 215.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/clearsight-org/test.git
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
[root@rh2 test]#
1.6.2 由开发leader创建用于开发新功能的dev分支并推送到github
[root@rh2 test]# git checkout -b dev
Switched to a new branch 'dev'
[root@rh2 test]# git push origin dev
Username for 'https://github.com': clearsight51
Password for 'https://[email protected]':
Total 0 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'dev' on GitHub by visiting:
remote: https://github.com/clearsight-org/test/pull/new/dev
remote:
To https://github.com/clearsight-org/test.git
* [new branch] dev -> dev
[root@rh2 test]#
1.6.3 开发人员自己在github上注册账号
1.6.4 开发leader在github的组织中要求开发人员
1.6.5 开发人员接收到邀请邮件,同意
1.6.6 开发leader在github的组织的项目中再次邀请开发人员并授予该项目的写权限
在组织中默认所有项目对所有邀请来的member给只读权限
所以需要在要让开发做开发的项目中再次邀请该开发人员并授予写权限
1.6.7 开发人员在自己的电脑上git clone开发leader给的项目地址,然后从dev分支上新建一个自己开发的分支game分支,开发完提交到github上的game分支
[root@rh2 ~]# mkdir /game
[root@rh2 ~]# cd /game/
[root@rh2 game]# git clone https://github.com/clearsight-org/test.git
Cloning into 'test'...
remote: Enumerating objects: 3, done.
remote: Counting objects: 100% (3/3), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 195 bytes | 195.00 KiB/s, done.
[root@rh2 game]# cd test/
[root@rh2 test]# git checkout dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
Switched to a new branch 'dev'
[root@rh2 test]# git checkout -b game
Switched to a new branch 'game'
[root@rh2 test]# touch game.py
[root@rh2 test]# git add .
[root@rh2 test]# git commit -m "游戏功能开发完毕"
[game 9467a0a] 游戏功能开发完毕
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 game.py
[root@rh2 test]# git push -u origin game
Username for 'https://github.com': clearsight51
Password for 'https://[email protected]':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (2/2), 272 bytes | 272.00 KiB/s, done.
Total 2 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'game' on GitHub by visiting:
remote: https://github.com/clearsight-org/test/pull/new/game
remote:
To https://github.com/clearsight-org/test.git
* [new branch] game -> game
Branch 'game' set up to track remote branch 'game' from 'origin'.
[root@rh2 test]#
1.6.8 设置提交到github要合入dev分支的分支的review机制
方法是在github上给分支dev设置merge request
1.6.9 开发人员在github上提交将game分支merge合入dev分支的pull request
1.6.10 开发leader在github上review后
1.7 给其他开源软件贡献代码
- 先fork源代码,这步操作相对于把别人的项目拷贝一份到自己仓库的项目中
- git clone自己仓库中该项目代码,然后修改代码后push提交到自己仓库
[root@rh2 test]# mkdir /fixbug
[root@rh2 test]# cd /fixbug/
[root@rh2 fixbug]# git clone https://github.com/clearsight51/tornado.git
Cloning into 'tornado'...
remote: Enumerating objects: 24144, done.
remote: Counting objects: 100% (95/95), done.
remote: Compressing objects: 100% (50/50), done.
remote: Total 24144 (delta 52), reused 76 (delta 45), pack-reused 24049
Receiving objects: 100% (24144/24144), 8.85 MiB | 2.33 MiB/s, done.
Resolving deltas: 100% (17811/17811), done.
[root@rh2 fixbug]# cd tornado/
[root@rh2 tornado]# touch bug.py
[root@rh2 tornado]# git add .
[root@rh2 tornado]# git commit -m "修复了一个bug"
[master 7b38cbfa] 修复了一个bug
1 file changed, 0 insertions(+), 0 deletions(-)
create mode 100644 bug.py
[root@rh2 tornado]# git push origin master
Username for 'https://github.com': clearsight51
Password for 'https://[email protected]':
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 286 bytes | 286.00 KiB/s, done.
Total 3 (delta 1), reused 1 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (1/1), completed with 1 local object.
To https://github.com/clearsight51/tornado.git
aa9d32d5..7b38cbfa master -> master
- 给源代码的作者提交修复bug的申请(pull request)
1.8 三个配置文件
1.8.1 项目配置文件
项目/.git/config
git config --local user.name andy
1.8.2 全局配置文件
~/.gitconfig
git config --global user.name andy
1.8.3 系统配置文件
/etc/.gitconfig
git config --system user.name andy
1.9 github免密登录
1.9.1. URL实现
git remote add时将url地址带上用户名和密码
原来的地址:https://github.com/clearsight51/test.git
修改的地址:https://用户名:密码@github.com/clearsight51/test.git
git remote add origin https://用户名:密码@github.com/clearsight51/test.git
git push orgin master
1.9.2 SSH实现
拷贝公钥的内容到github中
1.9.3 git自动管理凭证
1.5 git分支代码合并
分支是平行空间,当需要研发一个新功能时,先在自己本地创建一个分支,别人看不到,等在这个新功能完成再与原来的主分支合并
一般实际项目开发中我们尽量保证master分支是稳定的,仅用于发布新版本,而工作时可以建立不同的工作分支,等工作完成后再合并到master分支上面。
master分支:用于发布新版本
热修复分支:用于修复线上版本的bug
dev分支:用于新功能的开发
- 创建分支 git branch 分支名
[root@rh2 gitdata]# git branch dev
- 查看分支 git branch
星号在哪个分支上就说明当前的操作在哪个分支上
[root@rh2 gitdata]# git branch
dev
* master
-
查看全部分支要带参数a
-
切换分支 git checkout 分支名
[root@rh2 gitdata]# git checkout dev
Switched to branch 'dev'
- 新建并切换到新建的分支 git checkout -b 分支名
[root@rh2 gitdata]# git checkout -b test
Switched to a new branch 'test'
- 删除分支 git branch -d 分支名
[root@rh2 gitdata]# git branch -d dev
Deleted branch dev (was 0bb7100).
- 将一个分支的代码merge到master分支 git merge 分支名
git merge dev
分支使用实战:在master分支commit aaa,bbb,ccc三个文件,然后创建分支dev,然后在dev分支commit dev-ddd文件,在master分支创建master-eee文件。最后需要把dev分支合并到master分支让master分支也有文件dev-ddd
# 将aaa,bbb,ccc三个文件commit
touch aaa bbb ccc
git add aaa
git commit -m "add aaa"
git add bbb
git commit -m "add bbb"
git add ccc
git commit -m "add ccc"
# 新建并切换到dev分支
git checkout -b dev
# 将文件dev-ddd commit到dev分支
touch dev-ddd
git add dev-ddd
git commit -m "add newfile dev-ddd"
# 将文件master-eee commit到master分支
git checkout master
touch master-eee
git add master-eee
git commit -m "add newfile master-eee"
# 合并dev到master
git merge dev
# 删除dev分支
git branch -d dev
1.6 git分支代码合并冲突
当要合并的分支上的文件内容和本分支上的不一致时,合并后有冲突,需要手动修改一下文件后再次commit -am一次
代码合并冲突实例:
创建空文件1.txt,然后创建一个分支dev,然后在master分支上编辑1.txt内容为master,在dev分支上编辑1.txt内容为dev,然后将dev分支合并到master分支,提示有冲突后,手动修改1.txt后再次git commit -am
[root@rh2 gitdata]# touch 1.txt
[root@rh2 gitdata]# git add .
[root@rh2 gitdata]# git commit -m "add empty 1.txt"
[master c475848] add empty 1.txt
[root@rh2 gitdata]# git branch dev
[root@rh2 gitdata]# echo master >> 1.txt
[root@rh2 gitdata]# git commit -am "modifide 1.txt add master"
[root@rh2 gitdata]# git checkout dev
[root@rh2 gitdata]# echo dev >> 1.txt
[root@rh2 gitdata]# git commit -am "modify 1.txt add dev"
[root@rh2 gitdata]# cat 1.txt
dev
[root@rh2 gitdata]# git checkout master
Switched to branch 'master'
[root@rh2 gitdata]# git merge dev
Auto-merging 1.txt
CONFLICT (content): Merge conflict in 1.txt
Automatic merge failed; fix conflicts and then commit the result.
[root@rh2 gitdata]# cat 1.txt
<<<<<<< HEAD
master
=======
dev
>>>>>>> dev
[root@rh2 gitdata]# git commit -am "merge dev"
[master 3e7d579] merge dev
[root@rh2 gitdata]# git status
On branch master
nothing to commit, working tree clean
1.7 git的tag标签
对于一个里程碑意义的大版本可以打tag,打了tag就可以直接回滚到tag版本
- 给当前的版本打tag,-a后接tag名,-m后接信息
[root@rh2 gitdata]# git tag -a v1.0 -m "create v1.0"
[root@rh2 gitdata]# git log --oneline --decorate
3e7d579 (HEAD -> master, tag: v1.0) merge dev
79ce3c2 (dev) modify 1.txt add dev
1a70c1a modifide 1.txt add master
c475848 add empty 1.txt
b76ac37 rm files
ac09b98 Merge branch 'dev'
b6ed65e add newfile master-eee
13183f1 add newfile dev-ddd
74a92d2 add ccc
47bc2bb add bbb
9cf4de2 add aaa
0bb7100 add b c
[root@rh2 gitdata]# git tag
v1.0
- 在某一版本打tag,在-a后面的版本名后加上要在哪个版本上打tag
[root@rh2 gitdata]# git tag -a v2.0 0bb7100 -m "v2.0"
[root@rh2 gitdata]# git tag
v1.0
v2.0
[root@rh2 gitdata]# git log --oneline --decorate
3e7d579 (HEAD -> master, tag: v1.0) merge dev
79ce3c2 (dev) modify 1.txt add dev
1a70c1a modifide 1.txt add master
c475848 add empty 1.txt
b76ac37 rm files
ac09b98 Merge branch 'dev'
b6ed65e add newfile master-eee
13183f1 add newfile dev-ddd
74a92d2 add ccc
47bc2bb add bbb
9cf4de2 add aaa
0bb7100 (tag: v2.0) add b c
- 查看某个tag的详细信息 git show tag名
[root@rh2 gitdata]# git show v1.0
tag v1.0
Tagger: tony <[email protected]>
Date: Tue Jun 22 14:02:39 2021 +0800
create v1.0
commit 3e7d5797a9a14818b2653ffa8402b0641694e3a6 (HEAD -> master, tag: v1.0)
Merge: 1a70c1a 79ce3c2
Author: tony <[email protected]>
Date: Tue Jun 22 11:48:38 2021 +0800
merge dev
diff --cc 1.txt
index 1f7391f,38f8e88..0010ca6
--- a/1.txt
+++ b/1.txt
@@@ -1,1 -1,1 +1,5 @@@
++<<<<<<< HEAD
+master
++=======
+ dev
++>>>>>>> dev
- 回滚到某一tag版本 git reset --hard tag名
[root@rh2 gitdata]# git reset --hard v1.0
HEAD is now at 3e7d579 merge dev
- 删除某一tag git tag -d tag名
[root@rh2 gitdata]# git tag -d v1.0
Deleted tag 'v1.0' (was b53a8e8)
1.7 github
1.7.1 建立仓库
1.7.2 上传ssh公钥
1.7.3 将本地代码提交远程仓库
[root@rh2 gitdata]# mkdir /perform
[root@rh2 gitdata]# cd /perform/
[root@rh2 perform]# git init
Initialized empty Git repository in /perform/.git/
[root@rh2 perform]# git add .
[root@rh2 perform]# git commit -m "first commit"
[master (root-commit) ef7cf7a] first commit
14 files changed, 3860 insertions(+)
create mode 100644 .idea/misc.xml
create mode 100644 .idea/modules.xml
create mode 100644 .idea/workspace.xml
create mode 100644 ".idea/\345\207\206\345\205\245\346\216\247\345\210\266\347\253\257\345\256\242\346\210\267\347\253\257\350\257\267\346\261\202\346\200\247\350\203\275\346\265\213\350\257\225.iml"
create mode 100644 111.py
create mode 100644 client_version.sh
create mode 100644 db.sh
create mode 100644 newdb.sh
create mode 100644 params.csv
create mode 100644 performance_test.jmx
create mode 100644 terminal.csv
create mode 100644 terminal.csv.beijing
create mode 100644 terminal_performance_test.py
create mode 100644 test.log
[root@rh2 perform]# git branch -M main
[root@rh2 perform]# git remote add origin [email protected]:clearsight51/performance_test.git
[root@rh2 perform]# git push -u origin main
Warning: Permanently added the RSA host key for IP address '13.229.188.59' to the list of known hosts.
Enumerating objects: 17, done.
Counting objects: 100% (17/17), done.
Delta compression using up to 8 threads
Compressing objects: 100% (17/17), done.
Writing objects: 100% (17/17), 41.16 KiB | 4.12 MiB/s, done.
Total 17 (delta 2), reused 0 (delta 0), pack-reused 0
remote: Resolving deltas: 100% (2/2), done.
To github.com:clearsight51/performance_test.git
* [new branch] main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.
1.8 gitlab
1.8.1 gitlab安装配置
官网安装包地址:https://about.gitlab.com/install/
- 安装依赖包
dnf install -y curl policycoreutils openssh-server perl
- 下载gitlab源并安装
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.rpm.sh | sudo bash
dnf install -y gitlab-ee
- 配置gitlab
# 更改url为本机ip地址
vim /etc/gitlab/gitlab.rb
gitlab-ctl reconfigure
- 查看gitlab所有服务的状态
[root@rh3 ~]# gitlab-ctl status
run: alertmanager: (pid 8141) 37s; run: log: (pid 7359) 184s
run: gitaly: (pid 8031) 40s; run: log: (pid 6714) 433s
run: gitlab-exporter: (pid 8023) 40s; run: log: (pid 7273) 204s
run: gitlab-workhorse: (pid 7988) 41s; run: log: (pid 7165) 229s
run: grafana: (pid 8164) 36s; run: log: (pid 7846) 89s
run: logrotate: (pid 6629) 452s; run: log: (pid 6637) 451s
run: nginx: (pid 8294) 1s; run: log: (pid 7201) 221s
run: node-exporter: (pid 8004) 41s; run: log: (pid 7242) 212s
run: postgres-exporter: (pid 8154) 37s; run: log: (pid 7407) 174s
run: postgresql: (pid 6856) 419s; run: log: (pid 6872) 415s
run: prometheus: (pid 8041) 40s; run: log: (pid 7327) 191s
run: puma: (pid 7102) 242s; run: log: (pid 7109) 241s
run: redis: (pid 6664) 441s; run: log: (pid 6672) 440s
run: redis-exporter: (pid 8025) 40s; run: log: (pid 7289) 200s
run: sidekiq: (pid 7123) 236s; run: log: (pid 7135) 235s
-
停止gitlab服务
gitlab-ctl stop -
停止gitlab中的某个服务
gitlab-ctl stop nginx -
查看所有服务的日志
gitlab-ctl tail -
gitlab数据仓库存放位置
/var/opt/gitlab/git-data
1.8.2 更换登录界面的描述和logo
在Admin Area->Appearance页面修改
1.8.3 新部署的gitlab创建资源的顺序是:组->项目->用户
- 先创建组
- 再创建项目属于组
- 再创建用户属于组
- 该组中的用户就能访问该组中的项目了
1.8.4 创建组
Admin Area->Overview->Groups
1.8.5 创建项目
一个项目就是一个远程的代码仓库
Admin Area->Overview->Projects
1.8.6 在客户端linux生成ssh密钥对
[root@rh2 ~]# ssh-keygen -t rsa
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:
SHA256:DCxCOrXdBYI9vZB1UvLzqML6V6AXbHN+N+uxQJ0X8vU root@rh2
The key's randomart image is:
+---[RSA 2048]----+
| oo.+=o+ |
| +.o=+.* |
|o o o++.o . . .|
| . . .Bo.+ . + o.|
| o *S o o o E|
| .. ..o.. o. |
| o... ....o |
| . .. ..o |
| .... .o |
+----[SHA256]-----+
[root@rh2 ~]# cat .ssh/
id_rsa id_rsa.pub known_hosts
[root@rh2 ~]# cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDHUCtGx8QkTMrMlbiW/x78UafbHf0MfPnWmdEt4ZaOfdZZ9mRFg76IV6DMhzZvCqQdTqgmw5yF7nFRoQjkrz5pD67dGJDsABx33XRRj3BoUpSAuyzLLQBBhLhrvuhK1I5/xON2QqBpYXHd5bvR87rrGTHaaj0j99XQjGaH/6qedDwxskzj/QKuI7Gz5D+TwzXCsa5kEFc9E20U3BvStUKtzTcDg4/PjuzDtp+VCJxSQ0U45J9oHePog4k0BLi3nPyqqjsmsp6o2+rYqUKHg4uNjpUpMmzA05d97yScw0UsXGmHEL1z07OhOja6aaxZ3qdFzUvDW249IARPPAhfPMSf root@rh2
1.8.7 将客户端linux的ssh公钥上传gitlab的项目
1.8.8 将本地仓库中的代码推送到gitlab远程仓库
git remote add gitlab_performance [email protected]:tester/tstc.git
git push -u gitlab_performance master
1.8.9 创建用户
创建新用户andy
1.8.10 将新用户andy加入tester组
1.8.11 用新客户端clone代码修改并提交到远程仓库
git clone [email protected]:tester/tstc.git
cd tstc/
vim test.log
git add .
git commit -m "change test.log, add test1.log"
git push -u origin master
1.8.12 设置master分支保护,禁止直接修改master分支的代码
- 用admin账号登录gitlab
- 进入项目
- 选settings->repository->protected branches
1.8.13 修改gitlab上代码流程
- clone master分支代码到本地仓库
[root@rh2 ~]# mkdir /test
[root@rh2 ~]# cd /test/
[root@rh2 test]# git clone [email protected]:tester/tstc.git
Cloning into 'tstc'...
remote: Enumerating objects: 12, done.
remote: Counting objects: 100% (12/12), done.
remote: Compressing objects: 100% (12/12), done.
remote: Total 40 (delta 2), reused 0 (delta 0), pack-reused 28
Receiving objects: 100% (40/40), 38.97 KiB | 1.69 MiB/s, done.
Resolving deltas: 100% (9/9), done.
- 在本地从master分支生成dev分支,并切换到dev分支
[root@rh2 tstc]# git branch dev
[root@rh2 tstc]# git checkout dev
Switched to branch 'dev'
- 修改本地工作目录中的代码文件后提交到本地dev分支
[root@rh2 tstc]# vim test.log
[root@rh2 tstc]# git add .
[root@rh2 tstc]# git commit -m "change test.log"
[dev c8af44d] change test.log
1 file changed, 6 insertions(+), 1957 deletions(-)
rewrite test.log (100%)
- 将本地dev分支push到远程仓库dev分支
[root@rh2 tstc]# git remote
origin
[root@rh2 tstc]# git push -u origin dev
Enumerating objects: 5, done.
Counting objects: 100% (5/5), done.
Delta compression using up to 8 threads
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 273 bytes | 273.00 KiB/s, done.
Total 3 (delta 1), reused 0 (delta 0), pack-reused 0
remote:
remote: To create a merge request for dev, visit:
remote: http://192.168.30.3/tester/tstc/-/merge_requests/new?merge_request%5Bsource_branch%5D=dev
remote:
To 192.168.30.3:tester/tstc.git
* [new branch] dev -> dev
Branch 'dev' set up to track remote branch 'dev' from 'origin'.
-
用普通账号登录gitlab页面,然后发送dev分支合并入master分支的请求
-
用管理端登录gitlab页面,然后将dev分支合并到master分支
二. jenkins
2.1 安装
-
需要两台服务器
一台jenkins 192.168.30.2
一台nexus 192.168.30.4 -
安装jdk和jenkins
rpm -ivh jdk-8u181-linux-x64.rpm
rpm -ivh jenkins-2.99-1.1.noarch.rpm
2.2 配置jenkins
jenkins主要目录
/usr/lib/jenkins/: jenkins安装目录,WAR包会放在这里
/etc/sysconfig/jenkins: jenkins配置文件,“端口”,“JENKINS_HOME”等都在这里配置
/var/lib/jenkins/: 默认的JENKINS_HOME
/var/log/jenkins/jenkins.log: jenkins日志文件
2.3 创建使用gitlab作为代码源的新项目
build时jenkins192.168.30.2从gitlab192.168.30.3的项目上git拉取最新代码到jenkins本地工作目录/var/lib/jenkins/workspace/web;
然后通过在jenkins项目上配置的ssh脚本将工作目录/var/lib/jenkins/workspace/web中的代码打包成1.tar.gz, 然后通过免密登录scp到线上web服务器192.168.30.7的相应站点目录中
- 需要事先生成jenkins这台服务器的jenkins的公钥并上传到gitlab的dev用户的ssh免秘钥
[root@rh2 tstc]# su -s /bin/bash jenkins
bash-4.4$ cd ~
bash-4.4$ pwd
/var/lib/jenkins
bash-4.4$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/var/lib/jenkins/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /var/lib/jenkins/.ssh/id_rsa.
Your public key has been saved in /var/lib/jenkins/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:0A240sxCJbnSStYH7LmrsDlrd1mmmN4PrRiB22OL590 jenkins@rh2
The key's randomart image is:
+---[RSA 2048]----+
| ..o... |
| =... o |
| = B... . |
| = O *. |
| + + = S |
| + o .o |
|.. =oo=. |
|.=o=O++ |
|=+**.+.E |
+----[SHA256]-----+
bash-4.4$ cat id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC9Vl+zcRdOq9DvqNIMRuulDD/X/yDEeKYZZI7+jL+IgG1CBXzQD0Bez669mOIynhQSxzn3FMTIPPpIOXNNPtluvo+kPuSsiJqTlKj0/eeJbp1KZaN/kNzF08g1NMZ7tWCSit6ysFmdz0zZfKXZkg9O5GzG89sYeI5d/Ayo+YhQDERyXP8O9zNA0OVExf30zgeendRHt54edk2aJ1auuczqbKNXcHa16elrNlppd1nummUK5XlqoTjDv7KtDkZzN676WDrLu3DpYvsDCWJqVq6LrgVkEtYCoO1Z6kYXuZgz+ZhqZ8ZUw/iao70tJQeawoSQ+8W+O/5pXEjiRrewNh7l jenkins@rh2
- 在jenkins上创建新项目并使用gitlab作为代码源
- 在jenkins上配置对目标线上站点192.168.30.7的ssh免密登录
由于jenkins的进程用户是jenkins,所以需要 把jenkins的公钥上传到web服务器
- 在jenkins的项目中配置build的shell脚本将项目工作目录中的最新代码打包上传到线上web服务器目录发布
- 验证上线成功
- 开发人员从gitlab下载master分支上的最新代码到本地,然后新建dev分支去修改代码,修改完代码将dev分支提交到gitlab,并发起dev分支代码合并入master分支的请求
- gitlab管理员的web管理页面同意分支合并请求
- 在jenkins上重新构建,以下载最新代码并推送到web服务器
- 查看效果
2.4 配置jenkins项目的构建触发器,使得gitlab上相应项目的master分支在merge或push完后自动触发jenkins构建下载最新代码并上传线上服务器
2.4.1 在jenkins的项目中的build trigger中设置当change被push到gitlab时build
- 在项目配置的Build Triggers选项中勾选启用Build when a change is pushed to GitLab. GitLab webhook URL: http://192.168.30.2:8080/project/web
- 在Enabled GitLab triggers中勾选Push Events和Opened Merge Request Events两个子选项
- 在高级选项中可以过滤允许触发jenkins构建的分支名,如只允许master分支的变化触发构建
- 在高级选项中生成一个用于gitlab给jenkins发送post构建请求时验证用的token,然后保存配置
2.4.2 在gitlab的项目中的settings的integrations中设置当发生push或merge事件时向哪个url发送带哪个token的http post请求,该请求用于触发jenkins构建
- 进入gitlab的项目中的settings的Integrations的webbook页面
- 在url中输入jenkins对应项目的url地址,在token中输入从jenkins生成的token,勾选push events和merge requests event两个触发事件 ,勾选启用ssl,然后Add Webhook
- 如果出现错误
Url is blocked: Requests to the local network are not allowed
,需要配置Admin area => Settings => Network=>Outbound requests
- 配置Admin area => Settings => Networkk=>Outbound requests
- 测试web hook
- 测试时出现Hook executed successfully but returned HTTP 403的解决方法
原因:由于Jenkins的安全策略配置了CSRF跨站点保护。
解决方案:进入Jenkins,系统管理-->全局安全配置,勾选匿名用户具有可读权限和去掉CSRF防止跨站点请求伪造:
2.5 配置jenkins将构建的结果发送给gitlab显示
- gitlab: 先在gitlab上建立一个access token。jenkins给gitlab发送结果时需要用这个token
2.在jenkins中先用从gitlab中创建的access token创建一个访问gitlab用的api token;然后用这个token配置和gitlab的连接
Jenkins: Manage Jenkins->Configure System
3. jenkins: 在项目的Post-build Actions中将构建结果发送到gitlab