平时一直是用git来管理代码仓库,也用过一段时间github,但是github免费版不能建私有仓库。后来转到了bitbucket,后来被atlassian收购后有点不适应,而且在国内访问经常连不上。还是gitlab比较好用,因为公司也是用gitlab,所以上手很快,新增的构建功能非常方便。

1. GitLab.com

gitlab是开源项目,官网也提供了社区版安装包,如果有自己服务器的话可以私有化部署一个,安装教程参考官网,只需要简单几步就能运行,地址https://about.gitlab.com/installation/。

但是对于个人开发者来说要求的服务器配置有点高,1核1G的服务器也只能勉强跑起来。另一种选择就是使用GitLab.com,这是官方提供的免费平台,功能和社区版一样,有人在维护、更新,新功能会比较多,缺点就是偶尔抽风。地址https://gitlab.com/users/sign_in > GitLab.com offers free unlimited (private) repositories and unlimited collaborators.

这是官方的宣传语,提供无限的免费的私人的仓库,无限制的协作者,条件非常诱人。

注册流程比较简单,填一下username和email就差不多了,这也将是git空间的标记,名字不要取得太随意就行了。

2. 创建项目

登录后点击右上角的加号(New project)。

  • Project path:如果你属于group的话可以选group名字,这样项目就会放在对应group下,一般团队项目比较好用。
  • Project name:你的项目名字
  • Import project from:可以从多个github、bitbucket等主流托管平台导入项目。
  • Project description:项目描述,可选
  • Visibility Level:项目可见级别
    • Private:私有项目,需要授权才能访问,适合个人、团队开发。
    • Internal:内部项目,注意只要登录账号就能访问,适合开源贡献代码。
    • Public:公开项目,不用登录就能访问,适合分享项目。

点击create,创建项目,进入空项目,会出现初始化步骤,可以用ssh和https方式来上传代码,推荐ssh,比较安全。

3. 配置ssh(可选)

如果本地没有ssh key,用ssh-keygen初始化一个,可以参考我之前写的github教程git初始化那部分https://wuyuans.com/2012/05/github-simple-tutorial/#toc-3

有ssh key后添加到后台,点击右侧头像,下拉菜单里选settings,在顶部的tab里点击SSH Keys,或者直接访问https://gitlab.com/profile/keys。

Key就是.ssh/id_rsa.pub文件内容,title填自己知道的就行,尽量语义化点。

Add key,完成。

4. 上传项目

回到我们创建的空项目页面,在项目名称下面选择传输协议,ssh或者https,下面教程里的url会跟着变。

之后按照下面的教程来做就行了,最后push

  1. git push -u origin master

完成,这时项目页面应该就有东西了,后面就可以用正常的git命令来维护代码仓库了。

5. 配置CI(持续集成)

如果只是要一个git代码托管的话上面几步已经足够了,现在开始介绍gitlab提供的持续集成功能,这对于需要打包、发布的人来说非常方便。

5.1 Pipelines

一个pipeline就是一次持续集成任务,一般由一次push触发,在网页上对项目的修改、merge也会触发pipline。pipline由Runner执行,Runner有两种:

  • Specific Runners:私有runner,部署和执行在自己服务器上,优点是安全、速度快,缺点是需要提供服务器,部署教程https://docs.gitlab.com/runner/install/linux-repository.html
  • Shared Runners:共享runner,官方提供的runner,优点是免费,缺点是会偶尔抽风、或者速度慢

5.2 Jobs

pipline由多个job组成,一个job会发给一个runner来执行,所以各个job之间的数据不是共享的,除非使用cache。所以尽量把一些有依赖的步骤放到一个job里,或者把一些通用步骤放到before_script里,这个后面会提到。

5.3 stages

stage是对job的分组,同一个stage里的job是并行的,两个stage之间是串行的

5.4 .gitlab-ci.yml

要想配置上面说的这些,需要在项目根目录新建.gitlab-ci.yml文件,文件格式为yaml,教程https://docs.gitlab.com/ee/ci/yaml/README.html。举个例子,这是我www工程配置文件的简化版,使用golang编译:

  1. image: golang:latest
  2. before_script:
  3. - ln -s /builds/wuyuans/www /go/src/www
  4. - cd /go/src/www
  5. - mkdir bin
  6. stages:
  7. - build
  8. - deploy
  9. build_web:
  10. stage: build
  11. script:
  12. - go build -v -o bin/web www/web
  13. except:
  14. - release
  15. build_service:
  16. stage: build
  17. script:
  18. - go build -v -o bin/service www/service
  19. except:
  20. - release
  21. deploy_web:
  22. stage: deploy
  23. script:
  24. - go build -v -o bin/web www/web
  25. - scp bin/web root@${HOST_1}:/bin/
  26. environment:
  27. name: www/web
  28. url: http://$CI_ENVIRONMENT_SLUG.wuyuans.com
  29. when: manual
  30. only:
  31. - release

5.4.1 image

编译使用的docker镜像,如果是golang的话可以用golang:latest,使用最新版golang,其他可以在docker hub查https://hub.docker.com/_/golang/

5.4.2 before_script

每个job执行前都会执行before_script里的步骤,主要是做一些环节初始化,比如我这里把工程目录链到了GOPATH下,这样方便使用go命令。也可以在这里做一些go get工作

5.4.3 stages

我分了两个stage,build和deploy。build里有build_web、build_service,deploy里的是deploy_web,名字可以随便,主要是job里的stage字段需要和stages里定义的对应上。

5.4.4 build_web、build_service

script里的是执行的命令,做go build的工作,except表示这个job不能在release分支执行。

5.4.5 deploy_web

script和前面一样。environment用来标记发布的名字,我们可以用environment来管理发布版本、回滚等。when表示执行时间,默认是always每次都会执行,manual表示需要在后台手动执行,这样在不需要所有deploy job都执行的时候手动deploy项目。only表示只在release分支执行。

5.5 Environments

在.gitlab-ci.yml里配置了environment后,job执行完后会在项目页面里的Pipelines->Environments下看到这次job,他会按照配置里的name来合并,每次job都可以重做,也就是可以用来做项目的重发和回滚,右边有相对于的按钮,很方便。

6. 总结

gitlab有很多功能非常实用,比如上面讲到的Pipelines、Environments等,还有像Graph(以前叫network)可以显示所有分支的树状结构,这对于在多个分支里来回切换、分不清在哪个分支提交的人来说很直观。而且gitlab对于权限控制提供了很多的选项,很适合团队合作。然而缺点也还是有的,因为是官方托管的平台,日常维护、偶尔抽风什么的,还有被墙的风险什么的。。。如果是个人用户应该关系不大,如果是团队的话还是自建gitlab社区版,功能应该差不多,毕竟安全和稳定对团队来说是比较重要的。

作者:wuyuan 本文来自Wuyuan's Blog 转载请注明,谢谢! 文章地址: https://wuyuans.com/2017/05/gitlab-simple-tutorial

gitlab简单使用教程【转】的更多相关文章

  1. 【git】git简单使用教程

    git的简单使用教程: 1.安装git bash客户端 2.打开git bash,cd到需要存储代码的路径下, 执行:git clone -b deploy ssh://git@gitlab.xxxx ...

  2. OpenMP的简单使用教程

    转自:http://binglispace.com/2015/01/09/openmp-intro/ OpenMP的简单使用教程 今天有幸参加了一个XSEDE OpenMP的workshop讲座,真是 ...

  3. 程序员,一起玩转GitHub版本控制,超简单入门教程 干货2

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub,进行版本控制.帮助大家摆脱命令行工具,简单快速的使用GitHub. 做全栈攻城狮-写代码也要读书,爱全栈,更爱生活. 更多原创教程请关注 ...

  4. knockout简单实用教程3

    在之前的文章里面介绍了一些KO的基本用法.包括基本的绑定方式,基本的ko的绑定语法包括text绑定,html绑定等等(如有不明请参照上两篇文章),下面呢介绍一下关于ko的其他方面的知识.包括比较特殊绑 ...

  5. GitHub这么火,程序员你不学学吗? 超简单入门教程 【转载】

    本GitHub教程旨在能够帮助大家快速入门学习使用GitHub. 本文章由做全栈攻城狮-写代码也要读书,爱全栈,更爱生活.原创.如有转载,请注明出处. GitHub是什么? GitHub首先是个分布式 ...

  6. gitlab服务器搭建教程

    gitlab服务器搭建教程 ----2016年终总结 三 参考https://bbs.gitlab.cc/topic/35/gitlab-ce-8-7-%E6%BA%90%E7%A0%81%E5%AE ...

  7. 【gitlab】gitlab快速部署教程

    gitlab快速部署教程 部署环境 Ubuntu 16.04(亲测可用) 开始部署 安装依赖 sudo apt-get install curl openssh-server ca-certifica ...

  8. sea.js简单使用教程

    sea.js简单使用教程 下载sea.js, 并引入 官网: http://seajs.org/ github : https://github.com/seajs/seajs 将sea.js导入项目 ...

  9. vim简单使用教程【转】

    vim的学习曲线相当的大(参看各种文本编辑器的学习曲线),所以,如果你一开始看到的是一大堆VIM的命令分类,你一定会对这个编辑器失去兴趣的.下面的文章翻译自<Learn Vim Progress ...

随机推荐

  1. cropper.js图片裁剪

    最近做电子名片的项目,可是个人照片展示上出现了 用户上传的图片尺寸严重失调,所以要求进行图片裁剪,再此我对图片裁剪进行调研 还不太成熟 以后再改 这个实现的原理是 前台获取到 坐标 图片的尺寸 原图文 ...

  2. windows下安装Memcached服务器,PHP的memcache扩展

    Memcahed 介绍:Memcahed是一个内存缓存服务器 (类似MySQL服务器) 作用:提高web的响应速度,例如缓存数据库查询结果 原理:把数据存到内存中 (提高速度的原因) 教程相关 系统: ...

  3. BZOJ3583 杰杰的女性朋友 矩阵

    原文链接https://www.cnblogs.com/zhouzhendong/p/BZOJ3583.html 题目传送门 - BZOJ3583 题意 有一个 $n$ 个点构成的有向图. 对于每一个 ...

  4. Codeforces 316G3 Good Substrings 字符串 SAM

    原文链接http://www.cnblogs.com/zhouzhendong/p/9010851.html 题目传送门 - Codeforces 316G3 题意 给定一个母串$s$,问母串$s$有 ...

  5. JavaSE| 泛型

    泛型 泛型:对后续所有操作的类型做约束,对后续操作起作用,对之前的不起作用: 对类型进行约束:  父 ----> 子,从范围上,父范围小,子范围大:把范围小的给范围大的, JDK1.5改写了集合 ...

  6. webapp用户身份认证方案 JSON WEB TOKEN 实现

    webapp用户身份认证方案 JSON WEB TOKEN 实现Deme示例,Java版 本项目依赖于下面jar包: nimbus-jose-jwt-4.13.1.jar (一款开源的成熟的JSON ...

  7. The path is not a valid path to the xxx kernel header

    在安装vmtools时无意中出现了这样的问题 1.gcc错误 Searching for GCC- The path "" is not valid path to the gcc ...

  8. HashMap 源码阅读

    前言 之前读过一些类的源码,近来发现都忘了,再读一遍整理记录一下.这次读的是 JDK 11 的代码,贴上来的源码会去掉大部分的注释, 也会加上一些自己的理解. Map 接口 这里提一下 Map 接口与 ...

  9. Jmeter实现Basic Auth方式登录

    背景 在实际测试日常中,产品有两种登录方式,一种是普通登录方式,另一种则是Basic Auth方式登录.两种登录对应着产品中不同的操作,对权限进行了一个划分. Postman登录 使用Postman登 ...

  10. SpringMVC(十六) 处理模型数据之SessionAttributes

    @SessionAttributes原理 默认情况下Spring MVC将模型中的数据存储到request域中.当一个请求结束后,数据就失效了.如果要跨页面使用.那么需要使用到session.而@Se ...