平时一直是用git来管理代码仓库,也用过一段时间github,但是github免费版不能建私有仓库。后来转到了bitbucket,后来被atlassian收购后有点不适应,而且在国内访问经常连不上。还是gitlab比较好用,因为公司也是用gitlab,所以上手很快,新增的构建功能非常方便。
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空间的标记,名字不要取得太随意就行了。
登录后点击右上角的加号(New project)。
点击create,创建项目,进入空项目,会出现初始化步骤,可以用ssh和https方式来上传代码,推荐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,完成。
回到我们创建的空项目页面,在项目名称下面选择传输协议,ssh或者https,下面教程里的url会跟着变。
之后按照下面的教程来做就行了,最后push
git push -u origin master
完成,这时项目页面应该就有东西了,后面就可以用正常的git命令来维护代码仓库了。
如果只是要一个git代码托管的话上面几步已经足够了,现在开始介绍gitlab提供的持续集成功能,这对于需要打包、发布的人来说非常方便。
一个pipeline就是一次持续集成任务,一般由一次push触发,在网页上对项目的修改、merge也会触发pipline。pipline由Runner执行,Runner有两种:
pipline由多个job组成,一个job会发给一个runner来执行,所以各个job之间的数据不是共享的,除非使用cache。所以尽量把一些有依赖的步骤放到一个job里,或者把一些通用步骤放到before_script里,这个后面会提到。
stage是对job的分组,同一个stage里的job是并行的,两个stage之间是串行的
要想配置上面说的这些,需要在项目根目录新建.gitlab-ci.yml文件,文件格式为yaml,教程https://docs.gitlab.com/ee/ci/yaml/README.html。举个例子,这是我www工程配置文件的简化版,使用golang编译:
image: golang:latest
before_script:
- ln -s /builds/wuyuans/www /go/src/www
- cd /go/src/www
- mkdir bin
stages:
- build
- deploy
build_web:
stage: build
script:
- go build -v -o bin/web www/web
except:
- release
build_service:
stage: build
script:
- go build -v -o bin/service www/service
except:
- release
deploy_web:
stage: deploy
script:
- go build -v -o bin/web www/web
- scp bin/web root@${HOST_1}:/bin/
environment:
name: www/web
url: http://$CI_ENVIRONMENT_SLUG.wuyuans.com
when: manual
only:
- release
编译使用的docker镜像,如果是golang的话可以用golang:latest,使用最新版golang,其他可以在docker hub查https://hub.docker.com/_/golang/
每个job执行前都会执行before_script里的步骤,主要是做一些环节初始化,比如我这里把工程目录链到了GOPATH下,这样方便使用go命令。也可以在这里做一些go get工作
我分了两个stage,build和deploy。build里有build_web、build_service,deploy里的是deploy_web,名字可以随便,主要是job里的stage字段需要和stages里定义的对应上。
script里的是执行的命令,做go build的工作,except表示这个job不能在release分支执行。
script和前面一样。environment用来标记发布的名字,我们可以用environment来管理发布版本、回滚等。when表示执行时间,默认是always每次都会执行,manual表示需要在后台手动执行,这样在不需要所有deploy job都执行的时候手动deploy项目。only表示只在release分支执行。
在.gitlab-ci.yml里配置了environment后,job执行完后会在项目页面里的Pipelines->Environments下看到这次job,他会按照配置里的name来合并,每次job都可以重做,也就是可以用来做项目的重发和回滚,右边有相对于的按钮,很方便。
gitlab有很多功能非常实用,比如上面讲到的Pipelines、Environments等,还有像Graph(以前叫network)可以显示所有分支的树状结构,这对于在多个分支里来回切换、分不清在哪个分支提交的人来说很直观。而且gitlab对于权限控制提供了很多的选项,很适合团队合作。然而缺点也还是有的,因为是官方托管的平台,日常维护、偶尔抽风什么的,还有被墙的风险什么的。。。如果是个人用户应该关系不大,如果是团队的话还是自建gitlab社区版,功能应该差不多,毕竟安全和稳定对团队来说是比较重要的。
作者:wuyuan 本文来自Wuyuan's Blog 转载请注明,谢谢! 文章地址: https://wuyuans.com/2017/05/gitlab-simple-tutorial
手机扫一扫
移动阅读更方便
你可能感兴趣的文章