gitlab/gitlab-runner
离线环境部署
背景
实际开发中会用到很大持续集成的框架,目前和代码托管平台一起使用的,使用到比较多的情况是
github + Travis CI
gitlab + gitlab CI
如果使用github
,一般开源的项目,可以使用,而且使用的比较广泛;使用gitlab
的好处是,可以在自己本地搭建gilab
以及对于的ci
服务,这样对于公司来说更加安全,保密性更好。
名词解释
gitlab
: 代码托管平台。有对于网站,也有安装好环境的docker image
gitlab-runner
: 其实就是ci
服务的载体,比如我上传更新了代码,这时候需要ci
开始工作,可能是去编译,也可能是ssh
连接过去运行,而编译运行的环境,其实就是gitlab-runner`提供的。
环境搭建
都使用docker
进行搭建,提前docker pull
好镜像,这里主要是两个
gitlab-ce
gitlab-runner
镜像可以在docker hub
上搜,也可以在阿里云开发者里面的镜像库里面获取。
具体命令以及步骤
启动
docker run -it -d --name=gitlab -v /home/wkang/code:/Code -p 8035:22 -p 8082:8082 -p 8083:80 --privilegd=true gitlab/gitlab-ce:12.4.1-ce.0 /assets/wrapper bash
这里需要注意,别忘记添加启动脚本启动命令/assets/wrapper
修改
# 进入 docker
docker exec -it gitlab bash
vim /etc/gitlab/gitlab.rb
# 修改内容
external_url 'http://10.1.1.205:8082'
# 搜索 GitLab Sidekiq 新增
sidekiq['concurrency'] = 15
# postgresql['log_line_prefix'] = "%a"
postgresql['max_worker_processes'] = 4
# postgresql['max_worker_processes'] = 8
# 取消注释,修改端口和上面配置的一致
### Advanced settings
# unicorn['listen'] = 'localhost'
unicorn['port'] = 8082
配置更新
gitlab-ctl reconfigure
gitlab-ctl restart
使用
这里有个坑,如果按上面的设置,理论上应该使用http://10.1.1.205:8082
进行访问,然后设置默认的root
密码即可,但是一直没有成功,提示邮箱为空,使用我这里端口就使用8083
,因为启动使用映射到了80
端口,而如果不对gitlab
进行设置的化,默认都是80
端口。
第一次访问,提示要求设置root
账号的密码,我这里随便设置,就设置成12345678
如果忘记了管理员密码,可以到后台进行设置
cd /opt/gitlab/bin && gitlab-rails console production
u=User.where(id:1).first
u.password=`12345678`
u.password_confirmation=`12345678`
u.save!
exit
一般使用时候,不直接用管理员账号,所以重现注册一个新的账号wkang
,密码也为12345678
到这里,其实以及在本地搭建好了代码托管服务了,如果只需要使用代码托管,现在就可以使用了。
创建项目仓库
在上面搭建好的服务上,直接访问http://{ip}:8083
,登录之前注册的账号,就可以创建项目仓库了。步骤流程就和普通的git仓库创建
一样,填入项目名,以及对于的描述信息。
一般会添加README.md
/.gitlab-ci.yml
/.gitinore
等文件,分别用来描述说,执行自动持续集成脚本,忽略上次的一些文件等。
其中,在gitlab
上,.gitlab-ci.yml
配置完上传后,会提升是否正确。
重点:脚本编写规则可以学习下。
配置gitlab-runner
我们的本地环境,如果也想支持ci
功能,即有代码提交到git
上,就能自动触发编译测试,达到验证和持续集成的目的,那么本地就必须安装gitlab-runner
环境。
可以在和gitlab-ce
在同一台服务器,也可以不同,一般会选择搭建在不同的服务器上,因为gitlab-runner
是编译运行测试的环境,会比较耗费系统资源。
安装
启动gitlab-runner
的环境,其中/var/run/docker/sock
是固定的,这个是通过暴露的docker.sock
文件接管容器。另外不要加bash
,会报错。
docker run -d --name gitlab-runner --restart always -v /home/wkang/test/gitlab/gitlab-runner/config:/etc/gitlab-runner -v /var/run/docker.sock:/var/run/docker.sock gitlab/gitlab-rnner:v12.4.1
其中,/home/wkang/test/gitlab/gitlab-runner/config
是docker
外的主机环境下建立的目录,主要是为了保存配置信息,这样即使docker
容器挂掉了,配置数据还在。
注册
安装好以后,还是用不了的,这个才仅仅是提供一个基础的环境。需要进行注册,注册以后,gitlab
上才会出现runner
列表。注册之前,需要在gitlab
上得到url
和密钥
进入自己的项目仓库,然后点击右侧的
Settings
, 选择CI/CD
,点击Runners
的Expand
按钮,在出现的页面中有如下页面就是需要的信息。Set up a specific Runner manually 1. Instal Gitlab Runner 2. Specify the following URL during the Runner setup: http://10.1.1.205:8083/ 3. Use the following registration token during setup: LUsa7tcYtpGBGzJ-EjU 4.Start the Runner!
进入
gitlab-runner
的docker
交互模式docker exec -it gitlab-runner bash
输入命令,按提示和说明一步步填写
gitlab-runner register
也可以使用一条命令完成注册
gitlab-runner register \ --non-interactive \ --url "http://10.1.1.205:8083/" \ --registration-token "LUsa7tcYt5pGBGzJ-EjU" \ --executor "docker" \ --docker-image alpine:latest \ --description "docker-runner" \ --tag-list "docker, aws" \ --run-untagged= "true" \ --locked="false" \ --access-level="not_protected"
注册完成后,有些信息可以在
gitlab
的界面上修改,比如tag-list/description
等。注:这里的
tag-list
要注意,如果要想使用这个runner
, 在.gitlab-ci.yml
文件中,必须要有tags
标签,且名字为列表中的,否则无法使用;另外executor
表示执行的方式,如果使用ssh
就可以在不同的设备上运行测试代码了。查看本地注册情况
可以在
gitlab
界面上Setting/CI/CD/Runners
查看,注册情况,也可以直接运行gitlab-runner list # 如果没有运行,可以手动启动下 gitlab-runner start # 如果有多个Runner,可以使用下面的命令,一起启动多个 gitlab-ci-multi-runner run
完整使用例子
待补充,可以把hexo自动部署这个当例子。