(3)创建项目
登录gitlab→admin area→new project→注意选择组。
(4)用户加入到组里
登录gitlab→admin area→Groups→组名→添加用户→添加权限→Add。
4. Gitlab用户在组中有五种权限:
Guest:可以创建issue、发表评论,不能读写版本库
Reporter:可以克隆代码,不能提交,测试、产品经理可以赋予这个权限
Developer:可以克隆代码、开发、提交、push,开发人员可以赋予这个权限
Master:可以创建项目、添加tag、保护分支、添加项目成员、编辑项目,核心RD负责人可以赋予这个权限
Owner:可以设置项目访问权限 - Visibility Level、删除项目、迁移项目、管理组成员,开发组leader可以赋予这个权限
Gitlab中的组和项目有三种访问权限:
Private:只有组成员才能看到
Internal:只要登录的用户就能看到
Public:所有人都能看到
5. 上传ssh-key
本地用户创建秘钥:ssh-keygen -t rsa //保持密码为空即可,按三次回车
复制公钥内容:cat /root/.ssh/id_rsa.pub
粘贴到web界面:右上角→用户→settings→SSH Keys。
6. 克隆下载项目
点击README编辑修改文件模拟代码,编辑后保存该文件。
回到项目首页复制该链接,通过执行命令链接web项目的文件。
[root@git data]# git clone git@192.168.1.4:dev/web.git
执行成功后下面有一个web目录,进入里面就可以看到README文件内容了。
7. 修改文件内容,再推送上传代码(管理员身份)。
1. [root@git web]# vim README.md //加两行内容 2. aaaa 3. bbbb 4. cccc 5. dddd 6. [root@git web]# git add . 7. [root@git web]# git commit -m "add read v1" 8. [master dd32a4b] add read v1 9. 1 file changed, 3 insertions(+), 1 deletion(-) 10. [root@git web]# git push -u origin master
master上传下载相对简单,下面就可以看到修改后的版本已经上传成功。如普通开发人员更新代码还需要看下面的相关配置。
8. 在客户机,普通开发人员更新代码流程(普通用户身份)。
(1)上传ssh秘钥
本地用户创建秘钥:[root@node ~]# ssh-keygen -t rsa
复制公钥内容:[root@node ~]# cat /root/.ssh/id_rsa.pub
声明客户端姓名:[root@node ~]# git config --global user.name user1
声明客户端邮箱:[root@node ~]# git config --global user.email user1@qq.com
使用客户端登录,初次登录需要填写原始密码以及两次新密码。实验环境中还是设置12345678即可(输入三次12345678),而后输入用户名密码登录。
使用user1登录:右上角→用户→settings→SSH Keys。
(2)关联远程仓库
1. [root@node ~]# mkdir /data 2. 3. [root@node ~]# cd /data 4. 5. [root@node data]# git init 6. 7. 初始化空的 Git 版本库于 /data/.git/ 8. 9. [root@node data]# git remote add origin git@192.168.1.4:dev/web.git
(3)下载同步代码
[root@node data]# git pull origin master
(4)创建分支,修改代码
1. [root@node data]# git checkout -b ops 2. 切换到一个新分支 'ops' 3. [root@node data]# vim README.md 4. aaaa 5. bbbb 6. 111111 7. 333333 8. [root@node data]# git add . 9. [root@node data]# git commit -m "read v2" 10. [ops 0eceec4] read v2 11. 1 file changed, 2 insertions(+), 2 deletions(-)
(5)推送ops分支(普通用户无权推送master)
[root@node data]# git push -u origin ops
(6)dev在web界面创建merge请求
完成请求后可以看到ops到master的请求已经发送页面。
(7)切换到管理员登录,进入项目,同意merge请求。
左侧面板→merge requests→版本名→merge(Remove source branch)。注:勾选Remove source branch表示同意请求后删除原文件。
git常用命令
git remote add [remote] [url] #添加(关联)远程库
git remote set-url [remote] [url] #修改远程仓库
git clone [url] #克隆远程仓库项目
git remote #查看指定远程仓库命名简写
git remote –v #查看远程仓库详细信息以及名称对应URL
git push -u remote master #第一次推送master分支的所有内容
git fetch remote [branch/tag] #下载远程仓库的所有变动
git pull remote [branch/tag] #拉取主分支最新版本(可以拉取其他分支)
git push remote [branch/tag] --force #强行推送当前分支至远程分支,及时冲突
git push remote [branch/tag] --all #推送所有分支到远程仓库
git remote rename [oldname] [newname] #修改远程仓库名称
git remote remove [name] #删除远程仓库名称以及URL地址
1. git clone 与 git pull 相同点
相同点:都是从远程服务器拉取代码到本地
2. git clone 与 git pull 不同点
git clone:是在本地没有版本库的时候,从远程服务器克隆整个版本库到本地,是一个本地从无到有的过程。
git pull:在本地有版本库的情况下,从远程库获取最新commit 数据(如果有的话),并merge(合并)到本地。
git pull = git fetch + git merge
CI&CD
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。
持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。
持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
Jenkins
Jenkins是开源CI&CD软件领导者, 提供超过1000个插件来支持构建、部署、自动化, 满足任何项目的需要。
官方文档:
https://www.jenkins.io/zh/doc/
下载jenkiins:
https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/jenkins-2.222-1.1.noarch.rpm
安装Jenkins
1. 下载并安装jenkins包
[root@jenkins ~]# rpm -ivh /media/jenkins-2.222-1.1.noarch.rpm
2. 修改配置文件(默认jenkins端口为8080,如果同gitlab一起安装,需要修改端口)。
1. [root@jenkins ~]# vim /etc/sysconfig/jenkins 2. 3. JENKINS_USER="root" 4. 5. JENKINS_PORT="8081" 6. 7. [root@jenkins ~]# systemctl start jenkins 8. 9. [root@jenkins ~]# systemctl enable jenkins
3. 加快更新
1. [root@jenkins ~]# vim /var/lib/jenkins/hudson.model.UpdateCenter.xml 2. 3. //修改内容 4. 5. 更改:<url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url> 6. 7. [root@jenkins ~]# vim /var/lib/jenkins/updates/default.json 8. 9. 更改第一行:把www.google.com改成www.baidu.com
4. 重启jenkins
[root@jenkins ~]# systemctl restart jenkins