Gitlab 基本实操 电脑版发表于:2020/8/27 9:52  >#Gitlab 基本实操 [TOC] Gitlab简括 ------------ >Gitlab 本身是一个代码托管的工具。 >特点如下: - 免费、开源 - 功能强大 - 分布式 - Git flow - Git CI 安装参考 ------------ https://docs.gitlab.com/omnibus/docker/ >请提前为 `$GITLAB_HOME` 环境变量提供路径 ```bash docker run --detach \ --hostname localhost \ --publish 8929:8929 --publish 2222:22 \ --name gitlab \ --restart always \ --volume $GITLAB_HOME/config:/etc/gitlab \ --volume $GITLAB_HOME/logs:/var/log/gitlab \ --volume $GITLAB_HOME/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest ``` 或 ```bash sudo docker run --detach \ --hostname 127.0.0.1 \ --publish 8929:8929 --publish 2222:22 \ --name gitlab \ --restart always \ --volume /srv/gitlab/config:/etc/gitlab \ --volume /srv/gitlab/logs:/var/log/gitlab \ --volume /srv/gitlab/data:/var/opt/gitlab \ gitlab/gitlab-ce:latest ``` >进入容器内部 ```bash sudo docker exec -it gitlab /bin/bash ``` >`/etc/gitlab/gitlab.rb`用您的编辑器打开并设置`external_url`: ```bash # For HTTP external_url "http://gitlab.example.com:8929" or # For HTTPS (notice the https) external_url "https://gitlab.example.com:8929" ``` >设置`gitlab_shell_ssh_port`: ```bash gitlab_rails['gitlab_shell_ssh_port'] = 2222 ``` >最后,重新配置GitLab: ```bash 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 命令 ```bash # gitlab-ctl #客户端命令行操作行 # gitlab-ctl reconfigure #重新加载配置 # gitlab-ctl stop #停止gitlab # gitlab-ctl start #启动gitlab # gitlab-ctl restart #重启gitlab # gitlab-ctl status #查看组件运行状态 # gitlab-ctl tail nginx #查看某个组件的日志 ```  GitLab的基本操作 ------------ >### 创建用户  tn>在这里可以创建项目、用户以及组,我们先来创建用户   tn>接下来修改密码  tn>以后还要修改可以在Dashboard下面找到该用户。  >### 关闭注册页面  tn>我们发现在登录的时候有注册页面,导致任何人都可以注册,所以我们可以关闭掉注册页面。   tn>再次访问就没有注册页面了  >### 创建项目组    >### 创建项目   GitFlow的三种流程 ------------ >###最早期分支流程  tn>就只在两个人开发的情况下,就三条分支: Master 、 Lei 、 Jesse ;负责对不同的需求进行开发,当 Jesse 提交代码到 Master 分支上时,Lei 需要对每一次 Master 的更新进行拉取一次然后再提交代码。 <br/> >问题有如下两点: - 当 Jesse 代码有问题时,需要等待 Jesse 在本地修改完成后,Lei 才可以再次拉取与提交代码,会造成 Master 分支拥堵。 - 测试直接影响 Master 分支对线上项目有一定影响 <br/> >###第二种分支流程  tn>当 Lei 与 Jesse 开发不同功能时,从分支上看到 Lei 先完成分支上的内容并提交到 Release 分支上,Jesse 完成对不同功能的需求开发,只需要从 Release 分支拉取到本地再次提交代码即可。假如这个时候刚好就是要上线的1.0版本,我们可以对这1.0版本进行测试如果有bug,再次让开发人员进行修改与提交。测试好1.0版本后将更新代码到 Master 主分支并且发布1.0版本的产品。如果在这当中 Master 分支出现问题,将会同步到 HotFix 分支,由开发人员修复后更新到 Master 分支与 Release 分支上 <br/> >问题: - 这种开发模式只适合一个开发团队,不适合多个团队同时开发 >###第三种分支流程  tn>当我们有两个或多个团队时,且分别开发不同的功能,我们可以分为两个 feature 分支两个团队进行开发,当开发完成后更新到 Dev 分支上,最后提交到 Release 分支上进行测试,测试成功后发布到 Master 分支上。当发布后,有团队做完不同的功能将会更新到 Dev 分支上。如果中途在 Release 分支上测试失败,可以在 Dev 分支或feature分支上进行修改并在 Release 分支上再次测试。 GitLab CI ------------  tn>上面画了一个简易的图,画的不好,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注册和安装 ------------ >###下载安装包 ```bash wget -O /usr/local/bin/gitlab-runner https://gitlab-ci-multi-runner-downloads.s3.amazonaws.com/latest/binaries/gitlab-ci-multi-runner-linux-amd64 ``` >赋予执行权限 ```bash chmod +x /usr/local/bin/gitlab-runner ``` >###注册Runner <br/> >1.输入以下命令启动注册 ```bash gitlab-runner register ``` >2.在GitLab Server上找到相关信息(从首页的Gitlab config中去设置)  >3.注册相关信息  >4.查看CI  >###添加SSH Keys <br/> >1.从本地路径找到`C:\Users\{用户名}}\.ssh\id_rsa.pub`显示SSH的key <br/> >2.添加 SSH-Key  >###创建项目 <br/> >1.创建项目地址  >2.编写`.gitlab-ci.yml` ```bash rtest: script: - cd User.API - docker-compose up -d --build --force-recreate - docker rmi $(docker images | grep "none" | awk '{print $3}') ``` tn>Gitlab CI 官方配置文件参数说明(中文) 快速入门 https://docs.gitlab.com.cn/ce/ci/quick_start/README.html 配置文档讲解 https://docs.gitlab.com.cn/ce/ci/yaml/ >3.按照项目提示的方式提交代码 ```bash git init git remote add origin ssh://git@127.0.0.1:2222/root/beta2.git git add . git commit -m "Initial commit" git push -u origin master ``` tn>上传完代码后CI会自动跑起来 <br/> >###解决Docker非服务启动问题  >解决方案(1) tn>1、启动docker服务 ```bash service docker start ``` tn>2、生成自启动服务 ```bash systemctl enable docker.service ``` tn>3、查看服务状态,Active状态为:active(running) ```bash systemctl status docker.service ``` >解决方案(2) tn>添加`gitlab-runner`用户到`docker` ```bash sudo usermod -aG docker gitlab-runner ``` tn>到这里测试环境部署算是完成了,接下来该把生成的镜像进行上传到私有仓库中去。并搭建正式环境。  私有仓库的搭建 ------------ >###Docker registry介绍 tn>用于存储和分发Docker映像的Docker Registry 2.0实现。 >如果要执行以下操作,则应使用registry介绍: - 严格控制图像的存储位置 - 完全拥有您的图像分发管道 - 将图像存储和分发紧密集成到您的内部开发工作流程中 <br/> >###运用Docker registry <br/> ```bash docker run -d -p 311:5000 --name registry registry:2 ```  tn>我们可以通过 `http://{IP}:311/v2/` 访问当前仓库的镜像有哪些  tn>这里我们通过如下命令对`alpine`打一个本地的包进行测试 ```bash docker tag alpine localhost:311/alpine:local docker images ```  tn>最后进行推送 ```bash docker push localhost:311/alpine:local ```  tn>通过 `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) tn>在我们进行操作Api的时候是很不方便的,所以我们可以通过(docker-registry-frontend)来进行管理进行可视化管理。 ```bash 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 ``` tn>其中 `ENV_DOCKER_REGISTRY_HOST` 环境变量表示**仓库域名或地址** `ENV_DOCKER_REGISTRY_PORT` 环境变量表示**仓库的端口** 执行完命令后访问 `127.0.0.1:312`    tn>现在我们可以看到刚刚我们提交上去的`alpine`镜像。但我们会发现有一个缺点,就是在我们进行访问的时候并没有进行权限验证。 >###Docker registry本地基本身份验证 <br/> >实现访问限制的最简单方法是通过基本身份验证(这与其他Web服务器的基本身份验证机制非常相似)。本示例使用本机基本身份验证htpasswd来存储机密。 tn>警告:不能将身份验证与将凭据作为明文发送的身份验证方案一起使用。您必须先 配置TLS,身份验证才能正常工作。 >1.创建一个密码文件,为用户提供一个条目`testuser`,密码为 `testpassword`: ```bash mkdir auth yum -y install httpd htpasswd -Bbn testuser testpassword > auth/htpasswd ``` 或 ```bash docker run \ --entrypoint htpasswd \ registry:2 -Bbn testuser testpassword > auth/htpasswd ``` >2.如果使用的是第二种方式注意停止registry。 ```bash docker container stop registry ``` >3.使用基本身份验证启动注册表。 ```bash docker run -d \ --restart=always \ --name registry \ -v `pwd`/auth:/auth \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e "REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd" \ -v `pwd`/cert:/certs \ -v /root/docker/registry:/var/lib/registry\ -e REGISTRY_HTTP_ADDR=0.0.0.0:443 \ -e REGISTRY_HTTP_TLS_CERTIFICATE=/certs/xxxx.crt \ -e REGISTRY_HTTP_TLS_KEY=/certs/xxxx.key \ -p 443:443 \ registry:2 ``` tn>随后当再次提交到 **你的域名时** 会进行身份验证。 未完待续.....