gitLab是一个版本控制系统。
配置group名称最好与项目组有关的,例如业务的简称等等
。项目组的类型分为 Private、Internal、Public三种类型。
-
Private 私有类型(当group为私有类型,后面组下面的项目都是私有类型)
-
Public 公开类型
创建group,这个group就是仓库的组,下面就是如何创建group
创建好组之后,组里面可以有N多子项目。
项目组创建好之后,要添加members,也就是用户,Jenkins会去gitlab上面下载代码,一般都会使用一个统一的账号,这个时候需要在gitlab里面创建普通的用户,给一个reporter的权限,只能下载代码,后续Jenkins里面就可以去配置这个用户了专门下载代码。
开发者权限可以提交代码。
现在在这个组里去创建项目。
选择项目属于的组,因为组是私有的,所以项目也是私有的。
项目已经创建好了,要将本地代码提交上去。
下载代码库,并在代码库中创建文件提交。
### 下载项目
# git clone http://192.168.1.200/devops/demo-hello-service.git
Cloning into 'demo-hello-service'...
Username for 'http://192.168.1.200': root
Password for 'http://root@192.168.1.200':
warning: You appear to have cloned an empty repository.
### 查看项目
# ls | grep demo
demo-hello-service
demo-java-service
microservicecicd-demo-service
spinnaker-canary-demo
### 进入项目中
#### 创建文件
# cd demo-hello-service/
# echo devopsdevops >> jenkins.txt
jenkins.txt
### 提交文件到远程仓库
# git add jenkins.txt
# git commit -m "add jenkins.txt "
[master (root-commit) d74d541] add jenkins.txt
1 file changed, 1 insertion(+)
create mode 100644 jenkins.txt
[root@zeyang-nuc-service demo-hello-service]# git push origin master
Username for 'http://192.168.1.200': root
Password for 'http://root@192.168.1.200':
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 221 bytes | 221.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To http://192.168.1.200/devops/demo-hello-service.git
* [new branch] master -> master
扩展:将本地已存在的代码提交到远程仓库
[root@jenkins-master devops-maven-service-master]# git init
Initialized empty Git repository in /root/devops-maven-service-master/.git/
[root@jenkins-master devops-maven-service-master]# git remote add origin http://139.198.166.235:81/devops/devops-hello-service.git
[root@jenkins-master devops-maven-service-master]# git add .
[root@jenkins-master devops-maven-service-master]# git commit -m "Initial commit"
*** Please tell me who you are.
git config --global user.email "you@example.com"
git config --global user.name "Your Name"
to set your account's default identity.
Omit --global to set the identity only in this repository.
fatal: unable to auto-detect email address (got 'root@jenkins-master.(none)')
[root@jenkins-master devops-maven-service-master]# git config --global user.email "1239683670@qq.com"
[root@jenkins-master devops-maven-service-master]# git config --global user.name "lulei"
[root@jenkins-master devops-maven-service-master]# git commit -m "Initial commit"
[master (root-commit) 23db57e] Initial commit
11 files changed, 816 insertions(+)
create mode 100644 .gitignore
create mode 100644 .mvn/wrapper/MavenWrapperDownloader.java
create mode 100644 .mvn/wrapper/maven-wrapper.jar
create mode 100644 .mvn/wrapper/maven-wrapper.properties
create mode 100644 Jenkinsfile
create mode 100755 mvnw
create mode 100644 mvnw.cmd
create mode 100644 pom.xml
create mode 100644 src/main/java/com/example/demo/DemoApplication.java
create mode 100644 src/main/resources/application.properties
create mode 100644 src/test/java/com/example/demo/DemoApplicationTests.java
[root@jenkins-master devops-maven-service-master]# git push -u origin main
error: src refspec main does not match any.
error: failed to push some refs to 'http://139.198.166.235:81/devops/devops-hello-service.git'
[root@jenkins-master devops-maven-service-master]# git push -u origin master
Username for 'http://139.198.166.235:81': root
Password for 'http://root@139.198.166.235:81':
Counting objects: 27, done.
Compressing objects: 100% (17/17), done.
Writing objects: 100% (27/27), 53.44 KiB | 0 bytes/s, done.
Total 27 (delta 0), reused 0 (delta 0)
To http://139.198.166.235:81/devops/devops-hello-service.git
* [new branch] master -> master
Branch master set up to track remote branch master from origin.
创建一个分支
主干开发,一切都是master分支,不管后面来了多少个特性,提交代码都是提交到主干分支上面。
特性分支开发:来了一些需求,这就需要基于master分支创建feature特性分支。这些新的需求代码都在特性分支,特性分支开发完了,将代码提交上去了,然后触发流水线,这些流水线就是来验证特性分支的,验证没有问题,那么特性分支就需要做另外的操作,就需要将代码合并到master分支了,然后发版了。
特性分支开发
-
基于master主干分支创建版本分支(release-1.1.1)
-
基于master分支创建特性分支(feature-1, feature-2....)
-
特性分支开发完成后,将特性分支合并到版本分支
-
基于版本分支进行发布(dev环境,本地验证,UAT,预生产,生产)
-
发生产了也没问题,那么将版本分支合并到主干分支
-
基于master主干分支创建一个标签tag
拉取特性分支
为什么要拉取分支? 一个分支不够吗?
一般我们使用
master
主干分支存放最新的能够发布生产的代码,而单独创建一些特性分支来做项目需求任务的开发分支。 这样的好处是防止主干分支污染,对分支起到了保护的作用。
下面进入
demo-hello-service
项目主页,然后基于主干分支master,创建特性分支feature-1-DEV。操作如下:
查看当前本地分支,发现没有刚刚远程创建的
feature-1-DEV
分支。
[root@zeyang-nuc-service demo-hello-service]# git branch -a
* master
remotes/origin/master
`git pull` 同步远程仓库所做的更新到本地, 这样远程的
feature-1-DEV
分支就同步到了本地。然后我们使用
git checkout feature-1-DEV
切换到特性分支。
root@zeyang-nuc-service demo-hello-service]# git pull
Username for 'http://192.168.1.200': root
Password for 'http://root@192.168.1.200':
From http://192.168.1.200/devops/demo-hello-service
* [new branch] feature-1-DEV -> origin/feature-1-DEV
Already up to date.
[root@zeyang-nuc-service demo-hello-service]# git branch -a
* master
remotes/origin/feature-1-DEV
remotes/origin/master
[root@zeyang-nuc-service demo-hello-service]# git checkout feature-1-DEV
Branch 'feature-1-DEV' set up to track remote branch 'feature-1-DEV' from 'origin'.
Switched to a new branch 'feature-1-DEV'
[root@zeyang-nuc-service demo-hello-service]# git branch -a
* feature-1-DEV
master
remotes/origin/feature-1-DEV
remotes/origin/master
我们更改了Jenkins.txt文件内容,并创建一个新的version文件,然后将更改内容提交到远程仓库。
### 更改文件内容
[root@zeyang-nuc-service demo-hello-service]# ls
jenkins.txt
[root@zeyang-nuc-service demo-hello-service]# vi jenkins.txt
[root@zeyang-nuc-service demo-hello-service]# cat jenkins.txt
pipeline {
agent { label "master"}
stages{
stage("Build"){
steps {
script {
echo "hello"
[root@zeyang-nuc-service demo-hello-service]# echo 1.1.1 >version
[root@zeyang-nuc-service demo-hello-service]# ls
jenkins.txt version
### 提交到远程仓库分支
[root@zeyang-nuc-service demo-hello-service]# git add jenkins.txt version
[root@zeyang-nuc-service demo-hello-service]# git commit -m "add pipeline "
[feature-1-DEV 97ae23e] add pipeline
2 files changed, 14 insertions(+), 1 deletion(-)
create mode 100644 version
[root@zeyang-nuc-service demo-hello-service]# git push origin feature-1-DEV
Username for 'http://192.168.1.200': root
Password for 'http://root@192.168.1.200':
Enumerating objects: 6, done.
Counting objects: 100% (6/6), done.
Delta compression using up to 8 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (4/4), 380 bytes | 380.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
remote:
remote: To create a merge request for feature-1-DEV, visit:
remote: http://192.168.1.200/devops/demo-hello-service/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature-1-DEV
remote:
To http://192.168.1.200/devops/demo-hello-service.git
d74d541..97ae23e feature-1-DEV -> feature-1-DEV
这样我们就把本地的
特性分支开发的代码提交到了远程特性分支中了, 接下来对应该对该特性分支进行测试验证,没问题后合并到主干分支。
特性分支合并操作
将特性分支
feature-1-DEV
代码合并到主干分支
master
Merge Request。
在这个页面,选择源分支和目标分支。
在这个页面:
-
1 指定合并请求的标题
-
2 描述信息,一般都是变更信息
-
3 指定主管进行审核(最终该用户决定是否合并)
-
4 指定进行代码审查的同事
-
5 合并成功后删除源分支(最后很定要删除源分支,可以先保留一个版本后再删除,此处最好取消勾选)
提交合并后,由管理员审查进行合并。
到此一个基本的项目开发提交代码过程就已经完成了。(多熟悉一下这个过程)
set $destination "http://127.0.0.1:8888";
if ($arg_go-get = "1") {
set $destination "http://127.0.0.1:8008";
client_max_body_size 0;
gzip off;
## https://
git
hub.com/
gitlab
hq/
gitlab
hq/issues/694
## Some requests take more than 30 seconds.
proxy_read_timeout 300;
proxy_connect_timeout 300;
proxy_redirect off;
作为一个码农,对于
Git
肯定是再熟悉不过了,它的版本管理功能就是我们的时光机,开发历史节点随时切换回滚,不在话下。
Git
功能虽然很好,但是当项目团队壮大了之前,开发组成员之间的协调,权限管理,仓库保护等
Git
就显得有些有点功能不足了。我们的开发小组在不断壮大的过程中,发现
Git
的功能越来越不能满足我们的需求。后来我们引入了
Gitlab
,一个页面类似
Git
Hub的
代码
仓库管理工具。它可以建立开发小组...
从远处仓库获取所有分支
git
branch -r | grep -v '\->' | while read remote; do
git
branch --track "${remote#origin/}".
文章目录目录本节实践实验环境实验软件1、
GitLab
开发工作流1.
创建
项目组
2.
创建
项目3.将
代码
导入项目
4.拉取特性分支5.特性分支开发与提交6.特性分支合并操作2、
Jenkins
提交流水线1.触发器配置1、
Jenkins
开启trigger2、配置
GitLab
WebHook3、Webhook问题排查调试2.提交流水线优化1.过滤新建分支和tag的触发2.如何支持多个分支触发构建?3.其他集成1.
代码
下载部分2.解析WebhookData3.邮件通知反馈3、
GitLab
CI提交流水线1.流水线优化.
git
remote add origin http://xxxx@code.xxxx.com/xxxx/demo.
git
若是出错的话,很可能是本地没有权限访问
gitlab
,可以先本地生成key,传到
gitlab
上。
四、正常提交
git
add .
如果提示: warning: LF will be replaced by CRLF in
windows中的换行符为 CR
3 设置组的资料
如下,设置组名为demo,描述简要描述组的用途等,访问级别根据实际情况填写,比如公司内部可以设置为私有,如果开源的可以设置为public等,这里设置为public,然后可以设置哪些角色可以
创建
项目或者继续
创建
子分组等
这里可以设置是否需要二次手机验证,然后点击
创建
即可
5 此时已经
创建
成功
6 为组增加维护者角色的用户
如下,选择用户,然后
在组织中保持
gitlab
项目设置的一致性可能是一个挑战。
Gitlab
组管理器使团队能够定义组中所有项目的通用设置和文件。
GGM可以在可以运行docker的任何位置运行,但是非常适合在
gitlab
CI作业中运行。
您只需要一个.ggm.yaml配置文件,即可识别要管理的组以及要应用于该组中项目的设置/文件。
注意:有关完整示例,请参见 。
ggm配置文件示例
groups:
- name: Example Group
excluded_subgroups:
- 'SubGroup 1'
archived: false
files:
- path: .
gitlab
/merge_request_templates/Default.md
commit_suffix: ' [skip ci]
gitlab
-group parameters [--delete] name
parameters :
--prefix http://your.
gitlab
.instance.com
--token YOUT_
GITLAB
_INSTANCE_PRIVATE_TOKEN
获取(或
创建
,如果不存在)
gitlab
组
gitlab
-group --prefix "https://
gitlab
.com" --token "43hTY34c3428f47FRD890d" my_new_group
我会像这样返回seomthing
"visibility" : "public",
"lfs_enabled" : true,