使用 docker 部署 gitlab + gitlab-runner

快速配置应用

docker-compose.yml

使用 docker-composedocker 容器集群进行快速编排

获取 docker-gitlabdocker-compose.yml 配置文件,进行快速构建

$ wget https://raw.githubusercontent.com/sameersbn/docker-gitlab/master/docker-compose.yml

获取 docker-compose.yml 文件后,进行自定义配置。

配置环境

打开 docker-compose.yml 文件,针对 gitlab 进行环境配置

version: '2.3'

services:
  
  ...
  # 省略显示其他服务
  ...
  
  gitlab:
    restart: always
    image: sameersbn/gitlab:13.0.6
    depends_on:
    - redis
    - postgresql
    ports:
    - "10080:80"
    - "10022:22"
    volumes:
    - gitlab-data:/home/git/data:Z
    healthcheck:
      test: ["CMD", "/usr/local/sbin/healthcheck"]
      interval: 5m
      timeout: 10s
      retries: 3
      start_period: 5m
    environment:
    - DEBUG=false

    - DB_ADAPTER=postgresql
    - DB_HOST=postgresql
    - DB_PORT=5432
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production

    - REDIS_HOST=redis
    - REDIS_PORT=6379

    - TZ=Asia/Kolkata
    - GITLAB_TIMEZONE=Kolkata

    - GITLAB_HTTPS=false
    - SSL_SELF_SIGNED=false

    - GITLAB_HOST=localhost
    - GITLAB_PORT=10080
    - GITLAB_SSH_PORT=10022
    - GITLAB_RELATIVE_URL_ROOT=
    - GITLAB_SECRETS_DB_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_SECRET_KEY_BASE=long-and-random-alphanumeric-string
    - GITLAB_SECRETS_OTP_KEY_BASE=long-and-random-alphanumeric-string

    ...
    # 省略其他配置
    ...

参考配置文档,我们需要将时区设置为东八时区,设置数据混淆密匙,设置服务地址。

environment:
- TZ=Asia/Shanghai
- GITLAB_TIMEZONE=Asia/Shanghai

- GITLAB_HOST=192.168.2.192

设置混淆密匙,一般推荐 64 位随机字符串,可以用 pwgen 生成,可以安装 pwgen 服务,然后运行 pwgen -Bsv1 64 即可生成随机字符串。

environment:
- GITLAB_SECRETS_DB_KEY_BASE=nvqgzJdgrmr3tqsC4F9gKVNhKvTq3N7cJPjNggR93qthNhJ3MWkc7jNmNTLRXdhX
- GITLAB_SECRETS_SECRET_KEY_BASE=pcrf73fX4rM7bKxc7tcq3kwKWdtKKtrmmsHwT3J9rwCLMsK37PxCnXbMgnRpqJbk
- GITLAB_SECRETS_OTP_KEY_BASE=3d9tPCzpv7rfmVgnjN9McbztRVbp4rjxWWqFbNLTCbRz9mKkpvqqWgxMq7NM7c9w

同理,docker-compose.yml 的其他服务也需要配置东八时区。

数据卷挂载

数据卷挂载可对数据进行持久化保存,不会因为容器的删除而删除,数据挂载的目录数据会自动与容器内的数据同步,数据挂载的目录数据优先于容器内数据,即修改数据卷数据,会自动同步到容器内数据。

version: '2.3'

services:
  redis:
    restart: always
    image: redis:5.0.9
    command:
    - --loglevel warning
    volumes:
    - redis-data:/var/lib/redis:Z
    environment:
    - TZ=Asia/Shanghai

  postgresql:
    restart: always
    image: sameersbn/postgresql:11-20200524
    volumes:
    - postgresql-data:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm
    - TZ=Asia/Shanghai

  gitlab:
    restart: always
    image: sameersbn/gitlab:13.0.6
    depends_on:
    - redis
    - postgresql
    ports:
    - "10080:80"
    - "10022:22"
    volumes:
    - gitlab-data:/home/git/data:Z
    healthcheck:
      test: ["CMD", "/usr/local/sbin/healthcheck"]
      interval: 5m
      timeout: 10s
      retries: 3
      start_period: 5m

注意:数据卷的挂载,需要在宿主机提前创建好对应的目录。

手动创建以下目录:

/app/volumes/gitlab/gitlab/
/app/volumes/gitlab/postgresql/
/app/volumes/gitlab/redis/

修改对应数据卷配置:

redis:
    restart: always
    image: redis:5.0.9
    command:
    - --loglevel warning
    volumes:
    - /app/volumes/gitlab/redis:/var/lib/redis:Z
postgresql:
    restart: always
    image: sameersbn/postgresql:11-20200524
    volumes:
    - /app/volumes/gitlab/postgresql:/var/lib/postgresql:Z
gitlab:
    restart: always
    image: sameersbn/gitlab:13.0.6
    depends_on:
    - redis
    - postgresql
    ports:
    - "10080:80"
    - "10022:22"
    volumes:
    - /app/volumes/gitlab/gitlab:/home/git/data:Z

gitlab-runner

拉下来的 docker-compose.yml 文件默认是没有 gitlab-runner 的,我们需要将 gitlab-runner 写到 docker-compose.yml 配置上来。

也要先创建数据卷挂载文件目录:

/app/volumes/gitlab-runner/config/
gitlab-runner: 
    restart: always
    image: gitlab/gitlab-runner
    depends_on:
    - gitlab
    volumes:
    - /app/volumes/gitlab-runner/config:/etc/gitlab-runner:Z
    - /var/run/docker.sock:/var/run/docker.sock
    environment:
    - TZ=Asia/Shanghai

快速构建应用

将配置好的 docker-compose.yml 文件放到 /app/docker/gitlab/ 下,执行以下命令:

$ cd /app/docker/gitlab/
$ docker-compose up

docker-compose 会自动管理 docker 容器集群,包括对镜像进行拉取、创建以及启动。

稍等片刻,我们即可通过 http://192.168.2.192:10080/ 打开 gitlab 页面,第一次打开是直接设置 root 账号的密码,设置密码后即可登录进入 gitlab 内页。

英文不好的同学可以进入个人设置那里设置 language 为简体中文。

设置语言

注册runner

什么是 runnerrunner 就是 gitlab 进行可持续集成与可持续交付过程所跑的环境容器服务。

为了进行 ci/cd => 可持续集成/可持续部署,我们需要注册 runner,一般我们注册的是共享 runner,也就是任何仓库的 ci/cd 都可以在上面跑。当然,我们也可以创建多个 runner 服务,为特定仓库指定 runner

下面以注册共享 runner 为例:

runner列表

比如

  1. 进入 runner 容器
$ docker exec -it 容器ID bash
  1. 注册 runner
$ gitlab-runner register
  1. 输入 gitlab 示例的 url
 $ Please enter the gitlab-ci coordinator URL (e.g. https://gitlab.com ):
 http://192.168.2.192:10080/
  1. 输入用来注册 runnertoken
$ Please enter the gitlab-ci token for this runner:
yrErncrc8XY_e5-g7bU8
  1. 输入 runner 的描述,随后可在 gitlab 界面中修改
$ Please enter the gitlab-ci description for this runner:
gitlab-ci
  1. 输入与 runner 绑定的标签(可修改)
$ Please enter the gitlab-ci tags for this runner (comma separated):
gitlab-ci
  1. 选择 runner 的执行方式(推荐docker
 $ Please enter the executor: ssh, docker+machine, docker-ssh+machine, kubernetes, docker, parallels, virtualbox, docker-ssh, shell:
 docker

  1. 如果选择的执行方式是 docker,会要求填写默认的镜像
$ Please enter the Docker image (eg. ruby:2.1):
alpine:latest

注册成功后会在 runner 容器 ~/etc/gitlab-runner/ 目录下生成 config.toml 配置文件,这时候就可以在 gitlab 的管理页面中看到激活的 runner

激活的runner

然后,对 runner 进行修改,勾选 runner 可以选择无标签的项目(默认是同样标签的项目才能使用对应标签的 runner)。这样,runner 就可以变为共享 runner 了。

当我们需要专门为某个项目跑的 runner 时,那就不需要勾选 runner 可选择无标签选项,在下面配置添加 runner 服务的项目保存即可。

配置runner共享

可持续集成/部署

可持续集成与部署需要配置 .gitlab-ci.yml 文件,gitlab 会检查每个仓库根目录是否存在 .gitlab-ci.yml 文件,有的话 runner 则自动跑起来。

gitlab 默认开启 auto devops 功能,如果没有 .gitlab-ci.yml 文件,则会自动运行 auto devops,如果没有配置 Auto DevOps 功能与 Kubernetes 集成的话,建议关闭默认的 auto devops 功能。

关闭默认

.gitlab-ci.yml

这是一个自动编译前端代码并发布到 gitlab page 的配置文件:

building: 
  image: node:alpine    # 指定运行环境
  stage: build          # 当前stage阶段为build
  script:               # build阶段运行的脚本
    - yarn --registry=https://registry.npm.taobao.org
    - yarn docs:build
  artifacts:            # 工件,可以缓存在gitlab的流水线记录中,供直接下载
    expire_in: 3 days   # 工件缓存的有效时间
    paths:              # 路径
      - docs/.vuepress/dist/            # 工件指向的目录,这里指整个dist目录

cache:                  # 缓存
  paths:                # 路径
    - node_modules/     # 缓存node_mudules将大大提高ci运行的速度

deploying: 
  stage: deploy         # 当前阶段为deploy
  script:               # deploy阶段运行的命令
    - rm -rf public/*   # linux命令,递归无询问删除public目录下所有文件- mv dist/* public //将dist目录下的所有文件都移动到public目录下
  artifacts:            # 工件缓存
    expire_in: 3 days   # 时效为3天
    paths:              # 路径
      - public          # 缓存整个public目录的文件
  only: 
    - master               # ceate pages下的所有操作只在 master 分支上进行

自动化

当我们提交我们的代码后,gitlab 会自动根据 .gitlab-ci.yml 的配置运行 runner

提交代码
运行通过

这样我们就实现自动化集成与部署了,大大的提高了我们的开发效率。

身份认证

我们在 gitlab 上注册了自己的账号后,为了方便身份认证,一般需要用 ssh 生成身份认证密匙,这样就不需要每次访问都要输入账号密码。

配置SHH密匙

在我们的电脑 git bash 输入:

$ ssh-keygen -t rsa -C "我们在gitlab注册的邮箱" -f ~/.ssh/gitlab_id_rsa

此时会在我们电脑用户根目录的 /.ssh 下生成私匙跟公匙:

gitlab_id_rsa
gitlab_id_rsa.pub

打开 pub 后缀的公匙,复制粘贴到 gitlab 用户设置,保存即可。

身份认证

在对 gitlab 仓库使用 git 命令的时候,如果出现提示没有权限的话,多半是因为 git 混淆了 githubgitlabssh 密钥,解决方法看下一步。

github与gitlab共存

假设我们之前就已经生成了 githubssh 密匙:

github_id_rsa
github_id_rsa.pub

在我们电脑的用户目录 /.ssh/ 下创建 config 文件,配置如下,保存即可:

#github
Host github.com
HostName github.com
IdentityFile C:/Users/jwchan/.ssh/github_id_rsa

#gitlab
Host 192.168.2.192
HostName 192.168.2.192
IdentityFile C:/Users/jwchan/.ssh/gitlab_id_rsa

这样,我们在提交代码的时候,会自动区分目标服务器从而使用对应的 ssh 密匙。

git基本操作

  1. 拉取仓库
$ git clone ssh://git@192.168.2.192:10022/jwchan/blog.git
  1. 进入仓库贡献代码
$ cd /blog/
  1. 查看仓库代码修改状态
$ git status
  1. 添加代码缓冲区
$ git add .
  1. 提交代码并注释
$ git commit -m "[fix]: bug"
  1. 推送代码到远程仓库
$ git push 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342