tnblog
首页
视频
资源
登录

Gitlab 基本实操

7539人阅读 2020/8/27 9:52 总访问:3656321 评论:0 收藏:1 手机
分类: git

Gitlab

Gitlab 基本实操

Gitlab简括

Gitlab 本身是一个代码托管的工具。
特点如下:

  • 免费、开源
  • 功能强大
  • 分布式
  • Git flow
  • Git CI

安装参考

https://docs.gitlab.com/omnibus/docker/

请提前为 $GITLAB_HOME 环境变量提供路径

  1. docker run --detach \
  2. --hostname localhost \
  3. --publish 8929:8929 --publish 2222:22 \
  4. --name gitlab \
  5. --restart always \
  6. --volume $GITLAB_HOME/config:/etc/gitlab \
  7. --volume $GITLAB_HOME/logs:/var/log/gitlab \
  8. --volume $GITLAB_HOME/data:/var/opt/gitlab \
  9. gitlab/gitlab-ce:latest

  1. sudo docker run --detach \
  2. --hostname 127.0.0.1 \
  3. --publish 8929:8929 --publish 2222:22 \
  4. --name gitlab \
  5. --restart always \
  6. --volume /srv/gitlab/config:/etc/gitlab \
  7. --volume /srv/gitlab/logs:/var/log/gitlab \
  8. --volume /srv/gitlab/data:/var/opt/gitlab \
  9. gitlab/gitlab-ce:latest

进入容器内部

  1. sudo docker exec -it gitlab /bin/bash

/etc/gitlab/gitlab.rb用您的编辑器打开并设置external_url

  1. # For HTTP
  2. external_url "http://gitlab.example.com:8929"
  3. or
  4. # For HTTPS (notice the https)
  5. external_url "https://gitlab.example.com:8929"

设置gitlab_shell_ssh_port

  1. gitlab_rails['gitlab_shell_ssh_port'] = 2222

最后,重新配置GitLab:

  1. gitlab-ctl reconfigure

注意运行内存8个g,如果需要对资源进行限制,可以参考这篇文章:https://www.cnblogs.com/zhuochong/p/9728383.html

gitlab 安装目录

目录 描述
/etc/gitlab 配置文件目录
/run/gitlab 运行pid目录
/opt/gitlab 安装目录
/var/opt/gitlab 数据目录
/var/log/gitlab 日志目录

gitlab 命令

  1. # gitlab-ctl #客户端命令行操作行
  2. # gitlab-ctl reconfigure #重新加载配置
  3. # gitlab-ctl stop #停止gitlab
  4. # gitlab-ctl start #启动gitlab
  5. # gitlab-ctl restart #重启gitlab
  6. # gitlab-ctl status #查看组件运行状态
  7. # gitlab-ctl tail nginx #查看某个组件的日志

GitLab的基本操作

创建用户

在这里可以创建项目、用户以及组,我们先来创建用户

接下来修改密码

以后还要修改可以在Dashboard下面找到该用户。

关闭注册页面

我们发现在登录的时候有注册页面,导致任何人都可以注册,所以我们可以关闭掉注册页面。

再次访问就没有注册页面了

创建项目组

创建项目

GitFlow的三种流程

最早期分支流程

早期

就只在两个人开发的情况下,就三条分支: Master 、 Lei 、 Jesse ;负责对不同的需求进行开发,当 Jesse 提交代码到 Master 分支上时,Lei 需要对每一次 Master 的更新进行拉取一次然后再提交代码。


问题有如下两点:

  • 当 Jesse 代码有问题时,需要等待 Jesse 在本地修改完成后,Lei 才可以再次拉取与提交代码,会造成 Master 分支拥堵。
  • 测试直接影响 Master 分支对线上项目有一定影响


第二种分支流程

第二种分支流程

当 Lei 与 Jesse 开发不同功能时,从分支上看到 Lei 先完成分支上的内容并提交到 Release 分支上,Jesse 完成对不同功能的需求开发,只需要从 Release 分支拉取到本地再次提交代码即可。假如这个时候刚好就是要上线的1.0版本,我们可以对这1.0版本进行测试如果有bug,再次让开发人员进行修改与提交。测试好1.0版本后将更新代码到 Master 主分支并且发布1.0版本的产品。如果在这当中 Master 分支出现问题,将会同步到 HotFix 分支,由开发人员修复后更新到 Master 分支与 Release 分支上


问题:

  • 这种开发模式只适合一个开发团队,不适合多个团队同时开发

第三种分支流程

当我们有两个或多个团队时,且分别开发不同的功能,我们可以分为两个 feature 分支两个团队进行开发,当开发完成后更新到 Dev 分支上,最后提交到 Release 分支上进行测试,测试成功后发布到 Master 分支上。当发布后,有团队做完不同的功能将会更新到 Dev 分支上。如果中途在 Release 分支上测试失败,可以在 Dev 分支或feature分支上进行修改并在 Release 分支上再次测试。

GitLab CI

GitLab CI

上面画了一个简易的图,画的不好,so sorry! Runner是GitLab CI的重要组件之一,它可以部署在独立的服务器上,不影响GitLab服务器。首先我们对Runner经过不同的生成方式(shell,Docker,SSH,Kubernetes)去生成从GitLab Server拉取下来的代码,然后把其中生成的以不同方式进行存储,这里我们采用Docker镜像仓库的形式进行存储。最后在不同的环境下进行测试。

GitLab CI 支持多平台(Windows、OSX、Unix) 多语言(Java、Php、Ruby等),这其中自然也包括C#。它还有以下几个特性:

  • 分布式运行:多服务器、并行
  • 可以运行在本地、Docker容器、SSH Remote等
  • 支持批处理:windows、Power Shell (这让我们用msbuild 编译上一代的.net程序有了可能)

在使用也就是执行阶段,GitLab Runner 给我们提供了以下7种执行方式。官方称之为 executors。

  • Shell
  • Docker
  • Docker Machine
  • Parallels
  • VirtualBox
  • SSH
  • Kubernetes

在注册Runner阶段,我们就需要选择executor,我们今天将选择使用本地Shell这种大家最熟悉的方式来执行作业Job。

GitLab Runner注册和安装

下载安装包

  1. wget -O /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-linux-amd64

赋予执行权限

  1. chmod +x /usr/local/bin/gitlab-runner

注册Runner


1.输入以下命令启动注册

  1. gitlab-runner register

2.在GitLab Server上找到相关信息(从首页的Gitlab config中去设置)

相关信息

3.注册相关信息

4.查看CI

添加SSH Keys


1.从本地路径找到C:\Users\{用户名}}\.ssh\id_rsa.pub显示SSH的key


2.添加 SSH-Key

添加SSH-Key

创建项目


1.创建项目地址

2.编写.gitlab-ci.yml

  1. rtest:
  2. script:
  3. - cd User.API
  4. - docker-compose up -d --build --force-recreate
  5. - docker rmi $(docker images | grep "none" | awk '{print $3}')

Gitlab CI 官方配置文件参数说明(中文)
快速入门 https://docs.gitlab.com.cn/ce/ci/quick_start/README.html
配置文档讲解 https://docs.gitlab.com.cn/ce/ci/yaml/

3.按照项目提示的方式提交代码

  1. git init
  2. git remote add origin ssh://git@127.0.0.1:2222/root/beta2.git
  3. git add .
  4. git commit -m "Initial commit"
  5. git push -u origin master

上传完代码后CI会自动跑起来


解决Docker非服务启动问题

解决方案(1)

1、启动docker服务

  1. service docker start

2、生成自启动服务

  1. systemctl enable docker.service

3、查看服务状态,Active状态为:active(running)

  1. systemctl status docker.service

解决方案(2)

添加gitlab-runner用户到docker

  1. sudo usermod -aG docker gitlab-runner

到这里测试环境部署算是完成了,接下来该把生成的镜像进行上传到私有仓库中去。并搭建正式环境。

私有仓库的搭建

Docker registry介绍

用于存储和分发Docker映像的Docker Registry 2.0实现。

如果要执行以下操作,则应使用registry介绍:

  • 严格控制图像的存储位置
  • 完全拥有您的图像分发管道
  • 将图像存储和分发紧密集成到您的内部开发工作流程中


运用Docker registry


  1. docker run -d -p 311:5000 --name registry registry:2

我们可以通过 http://{IP}:311/v2/ 访问当前仓库的镜像有哪些

这里我们通过如下命令对alpine打一个本地的包进行测试

  1. docker tag alpine localhost:311/alpine:local
  2. docker images

最后进行推送

  1. docker push localhost:311/alpine:local

通过 http://localhost:311/v2/alpine/tags/list 进行查看 alpine 本地镜像的 Tag ,以及http://localhost:311/v2/_catalog。更多请参考:https://docs.docker.com/registry/spec/api/#listing-image-tags

运用Docker registry UI(docker-registry-frontend)

在我们进行操作Api的时候是很不方便的,所以我们可以通过(docker-registry-frontend)来进行管理进行可视化管理。

  1. docker run -d --name registry-web --link registry:registry -e ENV_DOCKER_REGISTRY_HOST=registry -e ENV_DOCKER_REGISTRY_PORT=5000 -p 312:80 konradkleine/docker-registry-frontend:v2

其中 ENV_DOCKER_REGISTRY_HOST 环境变量表示仓库域名或地址 ENV_DOCKER_REGISTRY_PORT 环境变量表示仓库的端口 执行完命令后访问 127.0.0.1:312

现在我们可以看到刚刚我们提交上去的alpine镜像。但我们会发现有一个缺点,就是在我们进行访问的时候并没有进行权限验证。

Docker registry本地基本身份验证


实现访问限制的最简单方法是通过基本身份验证(这与其他Web服务器的基本身份验证机制非常相似)。本示例使用本机基本身份验证htpasswd来存储机密。

警告:不能将身份验证与将凭据作为明文发送的身份验证方案一起使用。您必须先 配置TLS,身份验证才能正常工作。

1.创建一个密码文件,为用户提供一个条目testuser,密码为 testpassword

  1. mkdir auth
  2. yum -y install httpd
  3. htpasswd -Bbn testuser testpassword > auth/htpasswd

  1. docker run \
  2. --entrypoint htpasswd \
  3. registry:2 -Bbn testuser testpassword > auth/htpasswd

2.如果使用的是第二种方式注意停止registry。

  1. docker container stop registry

3.使用基本身份验证启动注册表。

  1. docker run -d \
  2. --restart=always \
  3. --name registry \
  4. -v `pwd`/auth:/auth \
  5. -e "REGISTRY_AUTH=htpasswd" \
  6. -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \
  7. -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \
  8. -v `pwd`/cert:/certs \
  9. -v /root/docker/registry:/var/lib/registry\
  10. -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \
  11. -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/xxxx.crt \
  12. -e REGISTRY_HTTP_TLS_KEY=/certs/xxxx.key \
  13. -p 443:443 \
  14. registry:2

随后当再次提交到 你的域名时 会进行身份验证。

未完待续…..


欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价
这一世以无限游戏为使命!
排名
2
文章
657
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术