使用docker安装gitlab-ce,通过http/https注册runners

1,150 阅读4分钟

Gitlab-ce镜像

在设置其他内容之前,配置一个新的环境变量$GITLAB_HOME,指向配置、日志和数据文件将驻留的目录。

设置环境变量

export GITLAB_HOME=/srv/gitlab

GitLab容器使用主机挂载的卷来存储持久数据:

image.png

安装

拉取镜像

docker pull gitlab/gitlab-ce:latest

您可以对这些目录进行微调以满足您的需求。设置了GITLAB_HOME变量后,你就可以运行图像了

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 443:443 --publish 80:80 --publish 22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

这将启动一个GitLab容器,并发布访问SSH、HTTP和HTTPS所需的端口。所有GitLab数据将存储在$GITLAB_HOME的子目录中。容器将在系统重新启动后会自动重新启动。

初始化过程可能耗时较长。你可以查看日志跟踪这个过程:

sudo docker logs -f gitlab

在启动一个容器之后,你可以访问http://192.168.131.130。 在Docker容器开始响应查询之前可能需要一段时间。当您第一次访问GitLab时,您将被要求设置管理员密码。修改后,您可以使用root用户名和设置的密码登录

1618661646788.png

配置

这个容器使用官方的通用GitLab包,所有的配置/etc/gitLab/gitLab.rb中。进入docker容器。

docker exec -it gitlab /bin/bash

一旦你打开/etc/gitlab/gitlab.rb。确保将external_url设置为指向一个有效的URL。在完成您想要的更改之后,您需要重新启动容器,以便重新配置GitLab

在一个公共IP地址上运行GitLab

你可以让Docker使用你的IP地址,并通过修改——publish标志将所有的通信转发给GitLab容器。

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 198.51.100.1:443:443 \
  --publish 198.51.100.1:80:80 \
  --publish 198.51.100.1:22:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

然后可以通过http://198.51.100.1/和https://198.51.100.1/访问GitLab实例。

在不同的端口上暴露GitLab

如果你想更改端口,你需要在docker run命令中添加一个单独的——publish指令。

1.要公开主机的端口8929上的web接口,以及端口2289上的SSH服务,使用以下docker run命令:

sudo docker run --detach \
  --hostname gitlab.example.com \
  --publish 8929:8929 --publish 2289:22 \
  --name gitlab \
  --restart always \
  --volume $GITLAB_HOME/config:/etc/gitlab \
  --volume $GITLAB_HOME/logs:/var/log/gitlab \
  --volume $GITLAB_HOME/data:/var/opt/gitlab \
  gitlab/gitlab-ce:latest

2.进入容器

sudo docker exec -it gitlab /bin/bash

3.打开 /etc/gitlab/gitlab.rb 设置 external_url:

设置为HTTPS时创建runner需要使用证书。为了方便,推荐使用http。如果想使用HTTPS,在创建runners时请查看注意事项

# For HTTP
external_url "http://gitlab.example.com:8929"

or

# For HTTPS (notice the https)
external_url "https://gitlab.example.com:8929"

这个URL中指定的端口必须与Docker发布给主机的端口匹配。

4.设置 gitlab_shell_ssh_port:

 gitlab_rails['gitlab_shell_ssh_port'] = 2289 

5.重启GitLab:

 gitlab-ctl reconfigure 

按照上面的示例,您将能够从web浏览器使用8929端口访问GitLab,并使用2289端口下的SSH推送docker-compose。

Gitlab-Runner

启动gitlab-runner容器

docker pull gitlab/gitlab-runner:latest

要在Docker容器中运行gitlab-runner,您需要确保在容器重新启动时配置不会丢失。为此,有两个选项

  • 使用本地系统卷挂载来启动Runner容器

    使用本地系统作为挂载到gitlab-runner容器中的配置卷。这个卷用于配置文件和其他资源。

       docker run -d --name gitlab-runner --restart always \
         -v /srv/gitlab-runner/config:/etc/gitlab-runner \
         -v /var/run/docker.sock:/var/run/docker.sock \
         gitlab/gitlab-runner:latest
    
  • 使用Docker卷来启动Runner容器

    • 创建docker卷

      docker volume create gitlab-runner-config
      
    • 使用刚创建的卷启动GitLab运行器容器:

      docker run -d --name gitlab-runner --restart always \
          -v /var/run/docker.sock:/var/run/docker.sock \
          -v gitlab-runner-config:/etc/gitlab-runner \
          gitlab/gitlab-runner:latest
      

安装可信的SSL服务器证书

如果您的GitLab CI服务器使用自签名SSL证书,那么您应该确保GitLab CI服务器证书受到GitLab runner容器的信任,以便它们能够相互通信。 gitlab/gitlab-runner映像配置为在/etc/gitlab-runner/certs/ca.crt中查找受信任的SSL证书。

使用docker注册gitlab-runner

这里展示创建指定项目的runner。前提我们已经创建好一个project。

下面的步骤描述了启动一个gitlab-runner容器来注册runners。注册完成后,生成的配置被写入所选的配置卷(/srv/gitlab-runner/config),并将由运行程序使用该配置卷加载。

  1. 根据挂载类型执行register命令:

    1. 本地系统卷挂载

      docker run --rm -it -v /srv/gitlab-runner/config:/etc/gitlab-runner gitlab/gitlab-runner register
      
    2. docker卷挂载

      docker run --rm -it -v gitlab-runner-config:/etc/gitlab-runner gitlab/gitlab-runner:latest register
      
  2. 输入您的GitLab实例URL(也称为gitLab-ci协调器URL)。

  3. 输入您获得的令牌来注册runner。

  4. 输入runner的描述。稍后可以在GitLab用户界面中更改这个值。

  5. 输入与runner相关的标记,以逗号分隔。稍后可以在GitLab用户界面中更改这个值。

  6. 提供runner executor。对于大多数用例,输入docker。

  7. 如果你输入docker作为你的执行器,你需要为没有.gitlab-ci.yml的项目提供默认的镜像(ruby:latest)。

1617702366947.png

也可以预先指定参数

gitlab-runner register \
  --non-interactive \
  --url "https://192.168.131.130:8929/" \
  --registration-token "xNzRQx8v3z66EtPo-K_P" \
  --executor "docker" \
  --docker-image maven:latest \
  --description "runner " \
  --tag-list "run" \
  --run-untagged \
  --locked="false"

注册完成后可以在setting->CI/CD->Runners->Expand 查看注册的运行器

1618233352752.png

为了避免出错,需要勾选运行器的 Run untagged jobs

1618233423507.png

注意事项

cannot validate certificate

1618662739819.png

这是由于我们在/etc/gitlab/gitlab.rb 设置 external_url为HTTPS协议。请求时需要添加证书。

  1. 进入gitlab容器,查找证书。证书路径: /etc/gitlab/ssl

    1618711440162.png

  2. 使用docker cp复制证书到gitlab容器。

    1. 可以存放在某个路径,gitlab-runner register时通过--tls-ca-file指定证书路径

    2. 存放在/etc/gitlab-runner/certs/ 路径下。重启后就无须指定证书路径了

    1618711906939.png

    1. 如果使用-volume映射gitlab的配置文件,可以直接存放到宿主机对应的目录下。

Post gitlab.zjy.com:8929/api/v4/runn…: dial tcp 129.226.170.70:8929: connect: connection refused

image.png 进入 /etc 修改hosts文件

echo "192.168.131.130 gitlab.zjy.com" >> hosts