gitlab 与gitlab-runner 安装与配置
文章目录
- 一、背景
- 二、安装过程
一、背景
- 已有k8s的可以略过。
- gitlab与 gitlab-runner可以解决什么问题?
主要是为了解决CI/CD问题的。 也就是持续集成,持续部署相关的事情。 - 没有CI/CD的工作流是什么样子的?
假设A 服务器是gitlab服务器, 用于管理项目代码的, B 服务器用于编译或打包代码为docker 镜像的。 C 服务器用于跑起项目的(或测试环境,或生产环境)。那么我在PC上提交代码后, 1. 需要登录B服务器,或手动,或写个脚本,实现: git pull 代码, docker build image g到 docker push image 这些主要流程。 2. 登录C服务器。 实现:docker pull image, docker compose down && docker compose up -d 功能,可以实现项目重启。 - 使用CI/CD的工作流是什么样子的?
同样假设A 服务器是gitlab服务器, 用于管理项目代码的, B 服务器用于编译或打包代码为docker 镜像的。 C 服务器用于跑起项目的(或测试环境,或生产环境)。这里简单描述一下:在PC上可以编写.gitlab-ci.yml文件, 在该文件中实现 build-job, 主要内容同上登录B服务器所需要完成的工作流。 实现release_test,主要内容同上C服务器所需要完成的工作流。 就可以实现只要提交代码或合并代码到指定分支, 就能自动实现在B服务器上编译打包和在C服务器上应用了最新提交代码的项目。这是一个完全自动化的过程,核心在于编写.gitlab-ci.yml文件。
二、安装过程
以下安装过程主要是在一台PC机上通过docker实现以上多个服务
环境变量文件.env
GITLAB_HOST_ADDRESS=192.168.1.111
EXPOSE_GITLAB_WEB_PORT=8011
GITLAB_WEB_PORT=8011
EXPOSE_GITLAB_SSL_PORT=443
GITLAB_SSL_PORT=443
EXPOSE_GITLAB_SSH_PORT=2222
GITLAB_SSH_PORT=22
INITIAL_SHARED_RUNNERS_REGISTRATION_TOKEN=random_values(随机值)
compose.yml文件
x-shared-env: &shared-basical-envGITLAB_HOST_ADDRESS: ${GITLAB_HOST_ADDRESS:-192.168.1.111}EXPOSE_GITLAB_WEB_PORT: ${EXPOSE_GITLAB_WEB_PORT:-8011}GITLAB_WEB_PORT: ${EXPOSE_GITLAB_WEB_PORT:-8011} # 这里没有错误,容器内的端口与就对外暴露的端口号一致。 这是因为external_url 的值里包括了外部端口号EXPOSE_GITLAB_SSL_PORT: ${EXPOSE_GITLAB_SSL_PORT:-443}GITLAB_SSL_PORT: ${GITLAB_SSL_PORT:-443}EXPOSE_GITLAB_SSH_PORT: ${EXPOSE_GITLAB_SSH_PORT:-2222}GITLAB_SSH_PORT: ${GITLAB_SSH_PORT:-22}INITIAL_SHARED_RUNNERS_REGISTRATION_TOKEN: ${INITIAL_SHARED_RUNNERS_REGISTRATION_TOKEN:-zxcvbnmasdfghjklqwertyuiop123456}
services:# 代码管理gitlab:image: gitlab/gitlab-ce:18.0.0-ce.0container_name: gitlabrestart: alwayshostname: 'gitlab.ray.com'environment:<<: *shared-basical-envGITLAB_OMNIBUS_CONFIG: |external_url 'http://${GITLAB_HOST_ADDRESS}:${EXPOSE_GITLAB_WEB_PORT}'letsencrypt['enable'] = false # 关闭 Let's Encryptnginx['redirect_http_to_https'] = false # 禁用 HTTP 到 HTTPS 重定向gitlab_rails['gitlab_shell_ssh_port'] = ${GITLAB_SSH_PORT}# 启用SSH访问gitlab_rails['gitlab_ssh_host'] = '${GITLAB_HOST_ADDRESS}'# 启用CI功能gitlab_rails['gitlab_ci_all_broken_builds_notify_committer'] = truegitlab_rails['gitlab_default_projects_features_builds'] = true# 注册Runner所需配置gitlab_rails['initial_shared_runners_registration_token'] = '${INITIAL_SHARED_RUNNERS_REGISTRATION_TOKEN}'# 建议添加:确保Runner可以连接到GitLab实例gitlab_rails['gitlab_runner_api_max_requests_per_minute'] = 1000ports:- '${EXPOSE_GITLAB_WEB_PORT}:${GITLAB_WEB_PORT}'- '${EXPOSE_GITLAB_SSL_PORT}:${GITLAB_SSL_PORT}'- '${EXPOSE_GITLAB_SSH_PORT}:${GITLAB_SSH_PORT}'volumes:- ./config:/etc/gitlab- ./logs:/var/log/gitlab- ./data:/var/opt/gitlabshm_size: '256m'# 添加健康检查以确保服务完全启动healthcheck:test: [ "CMD", "curl", "-f", "http://localhost:${EXPOSE_GITLAB_WEB_PORT}/help" ]interval: 5mtimeout: 10sretries: 3start_period: 5mgitlab-runner:image: gitlab/gitlab-runner:latestprivileged: truecontainer_name: gitlab-runnerrestart: alwaysdepends_on:- gitlabvolumes:- ../gitlab-runner/config:/etc/gitlab-runner- /var/run/docker.sock:/var/run/docker.sockenvironment:<<: *shared-basical-envCI_SERVER_URL: http://${GITLAB_HOST_ADDRESS:-192.168.1.111}:${EXPOSE_GITLAB_WEB_PORT}REGISTRATION_TOKEN: ${INITIAL_SHARED_RUNNERS_REGISTRATION_TOKEN}RUNNER_NAME: docker-runnerREGISTER_NON_INTERACTIVE: trueRUNNER_TAG_LIST: dockerDOCKER_IMAGE: alpine:latestRUNNER_EXECUTOR: dockerentrypoint: [ "gitlab-runner" ]command: [ "run", "--user=gitlab-runner", "--working-directory=/home/gitlab-runner" ]
这个docker-compose up -d 之后,首先需要在宿主机上web端配置gitlab, web端启动较慢,耐心等下哈。
那么碰到的第一个问题是:gitlab的密码在哪里?
- 查看gitlab 的root用户的初始密码,该密码文件将于24小时后删除
$ docker compose exec -it gitlab bash
root@gitlab:/# cat /etc/gitlab/initial_root_password
如果没有初始密码,怎么办?
- gitlab的root用户密码重置过程:
$ docker compose -f compose.ce.yml exec -it gitlab gitlab-rails console
--------------------------------------------------------------------------------Ruby: ruby 3.1.5p253 (2024-04-023 revision 1945f8dc0e) [x86_64-linux]GitLab: 17.3.1 (20a3292b4e6) FOSSGitLab Shell: 14.38.0PostgreSQL: 14.11
------------------------------------------------------------[ booted in 49.81s ]
Loading production environment (Rails 7.0.8.4)
irb(main):001:0> user = User.where(id:1).first # 找到root用户
=> #<User id:1 @root>
irb(main):003:0> user.password ='newpassword' # 修改密码
=> "newpassword"
irb(main):004:0> user.password_confirmation='newpassword' # 确认密码
=> "newpassword"
irb(main):005:0> user.save! # 保存
=> true
irb(main):006:0>
- 当然,有了初始密码之后, 可以登录web端,在web端修改root用户的密码和新建用户。下一步就是把runner注册到gitlab中。 过程如下:
- gitlab-runner 注册过程
$ sudo docker exec -it gitlab-runner gitlab-runner register
Runtime platform arch=amd64 os=linux pid=23 revision=bda84871 version=18.5.0
Running in system-mode. WARNING: Support for registration tokens and runner parameters in the 'register' command has been deprecated in GitLab Runner 15.6 and will be replaced with support for authentication tokens. For more information, see https://docs.gitlab.com/ci/runners/new_creation_workflow/
Registering runner... succeeded correlation_id=01K9CA8WJDD7S19Y3BHJRTFMPR runner=zxcvbnmas
Runner registered successfully. Feel free to start it, but if it's running already the config should be automatically reloaded!Configuration (with the authentication token) was saved in "/etc/gitlab-runner/config.toml"
$ sudo docker exec -it gitlab-runner gitlab-runner list
Runtime platform arch=amd64 os=linux pid=45 revision=bda84871 version=18.5.0
Listing configured runners ConfigFile=/etc/gitlab-runner/config.toml
docker-runner Executor=docker Token=glrtr-PfpsHVXVhaong3Uwsv2N URL=http://gitlab:8011
- 注册完成后,可以在web端验证一下。(runner注册成功如下图,runner id与图示不一致,仅供示意)。

- .gitlab-ci.yml文件如下:
stages:- build- test- deployvariables:IMAGE_NAME: test_cicd_appHARBOR_URL: http://127.0.0.1:8080/harborHARBOR_PROJECT: test_cicdDOCKER_TLS_CERTDIR: "" # 关闭 GitLab Runner 的 docker TLS 校验(关键)build-job:stage: buildimage: docker:latesttags: - dockerservices:- docker:dindscript:- echo "登录 Harbor..."- docker login -u "$HARBOR_USER" -p "$HARBOR_PASS" $HARBOR_URL- echo "构建镜像..."- docker build -t $HARBOR_URL/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHORT_SHA .- echo "推送镜像..."- docker push $HARBOR_URL/$HARBOR_PROJECT/$IMAGE_NAME:$CI_COMMIT_SHORT_SHAonly:- dev- prod
- 以下为定义仓库级别的环境变量, 定义的这些变量在.gitlab-ci.yml文件中使用。

