15
持续集成(CONTINUOUS INTEGRATION)是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。
Gitlab是利用 Ruby on Rails 一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。
Gitlab-CI就是一套配合GitLab使用的持续集成系统,GitLab8.0以后的版本是默认集成了GitLab-CI并且默认启用的。
Gitlab-Pages是一个go语言写的HTTP服务,原来只在Gitlab.com和Gitlab企业版中可用,在8.17版本的时候在Gitlab社区版支持。
Gitlab-Runner是配合GitLab-CI进行使用的,它是一个用来执行软件集成脚本的工具。
这几个直接的关系如下:
当用户push代码到Gitlab仓库,Gitlab会通知Gitlab-CI,Gitlab-CI通过与该项目关联的Runner,并通知runner更新并执行gitlab-ci.yml制定的脚本。
Runner可以分布在不同的主机,也可以多个Runner同时存在一个主机。
Runner分两种类型:共享型和指定型
下面介绍用docker搭建一整套环境。
- 启动gitlab需要的数据库
docker run --name gitlab-postgresql -d
--env 'DB_NAME=gitlabhq_production'
--env 'DB_USER=gitlab' --env 'DB_PASS=password'
--env 'DB_EXTENSION=pg_trgm'
--volume /srv/docker/gitlab/postgresql:/var/lib/postgresql
sameersbn/postgresql:10
- 启动redis
docker run --name gitlab-redis -d
--volume /srv/docker/gitlab/redis:/var/lib/redis
sameersbn/redis:4.0.9-1
- 启动gitlab
docker run --name gitlab -d
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio
--publish 10022:22 --publish 10080:80
--env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' --env 'GITLAB_HOST='exampel.com'
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string'
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string'
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string'
--volume /srv/docker/gitlab/gitlab:/home/git/data
sameersbn/gitlab:10.6.4
- 查看已启动的容器
此时通过刚才gitlab_host参数设置的域名访问,可以看到gitlab登陆页面。
首次登陆会提示重置密码,之后登陆gitlab
gitlab就搭建好了,docker就是这么简单,不过gitlab-pages默认是未开启的,需要在启动gitlab时指定参数开启。所以停掉gitlab的容器,删除容器后,重新启动容器
代码语言:javascript复制docker run --name gitlab -d
--link gitlab-postgresql:postgresql --link gitlab-redis:redisio
--publish 10022:22 --publish 10080:80 --env 'GITLAB_PORT=10080' --env 'GITLAB_SSH_PORT=10022' --env 'GITLAB_HOST='exampel.com' --env 'GITLAB_PAGES_ENABLED=true' --env 'GITLAB_PAGES_DOMAIN=pages.examples.com' --env 'GITLAB_PAGES_DIR=/home/git/data/pages' --env 'GITLAB_PAGES_EXTERNAL_HTTP=true' --env 'GITLAB_PAGES_EXXTERNAL_HTTPS=true'
--env 'GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alpha-numeric-string'
--env 'GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alpha-numeric-string'
--env 'GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alpha-numeric-string'
--volume /srv/docker/gitlab/gitlab:/home/git/data
sameersbn/gitlab:10.6.4
再次启动docker后,新建projects,并进入项目,在项目Settings菜单下可以看到Pages设置菜单
- 启动gitlab-runner
docker run -d --name gitlab-runner --restart always -v /data/gitlab/gitlab-runner/config:/etc/gitlab-runner -v /data/gitlab/gitlab-runner/run/docker.sock:/var/run/docker.sock gitlab/gitlab-runner:latest
上面说到Runner分为两种类型,共享型Runner是服务于所有项目的,而指定型Runner是服务于指定项目,可以看到在启动gitlab-runner时,并没有link到gitlab,那么Runner如何指定服务呢?
Runner是通过gitlab-ci的url及token进行注册的。共享型Runner需要的token是在管理员area,所以共享型只能由管理员创建,而指定型token是在项目Setting-CI/CD中,所以拥有项目管理权限的user都可以创建。
共享token
项目token
这里顺便说一下,如果你在项目runner中看不到shared runners,可以查看是否开启了shared runners,参考上图。
获取到url及token,通过一下命令进行注册:
代码语言:javascript复制docker exec -it gitlab-runner gitlab-ci-multi-runner register
按照提示输入相关信息:
代码语言:javascript复制Please enter the gitlab-ci coordinator URL:#gitlab_url, eg:https://gitlab.chain.cn/Please enter the gitlab-ci token for this runner:#token_idPlease enter the gitlab-ci description for this runner:#eg:demo-testPlease enter the gitlab-ci tags for this runner (comma separated):#eg:demoPlease enter the executor: docker, parallels, shell, kubernetes, docker-ssh, ssh, virtualbox, docker machine, docker-ssh machine:#shell/dockerPlease enter the default Docker image (e.g. ruby:2.1):#php7
上面介绍挺清楚了,部分说明一下,tags:这里创建的tags名称,在后面gitlab-ci脚本中会用到。executor:执行器,这里可以看到很多可选执行器,包括docker、shell、ssh等。如果指定docker执行器,会提示选择默认的Docker image,根据自己项目所需环境选择自己制作的镜像即可。
runner注册正常后,可以在Runner管理界面看到:
可以看到,这里一个指定型,一个共享型,两个runner。
完成后,我们开始在项目根目录创建gitlab-ci.yml文件,gitlab已支持很多框架的gitlab-ci.yml的template,我这里选择html进行发布测试。
这里说明一下,artifacts的paths最后必须为public。有关于gitlab-ci.yml的书写规则这里不做详解,想要了解的可以关注公众号期待下回分解。
添加完gitlab-ci.yml之后,我们提交一个text.html文件到该项目,然后去CI/CD-Pipeline查看
job中点击passed,我们可以查看执行的详细情况
正常执行完成后,我们打开Pages页面,可以看到Access pages
通过该链接,查看刚提交的text.html
通过docker简单快速的搭建自己的DevOps环境,可以在gitlab上发布自己的博客等静态页面。
感谢阅读,觉得有用,请转发及收藏!