自动注册GitLab Runner

8

我有一个docker-compose.yml文件,用于设置Gitlab、容器注册表和Gitlab Runner。

version: '2'

services:
  redis:
    restart: always
    image: sameersbn/redis:latest
    command:
    - --loglevel warning
    volumes:
    - redis:/var/lib/redis:Z

  postgresql:
    restart: always
    image: sameersbn/postgresql:9.5-3
    volumes:
    - postgresql:/var/lib/postgresql:Z
    environment:
    - DB_USER=gitlab
    - DB_PASS=password
    - DB_NAME=gitlabhq_production
    - DB_EXTENSION=pg_trgm

  gitlab:
    restart: always
    image: sameersbn/gitlab:10.1.1
    volumes:
    - gitlab-data:/home/git/data:Z
    - gitlab-logs:/var/log/gitlab
    - ./certs:/certs
    depends_on:
    - redis
    - postgresql
    ports:
    - "80:80"
    - "2222:22"
    external_links:
    - "registry:registry"
    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

    - GITLAB_HTTPS=false # <---
    - SSL_SELF_SIGNED=true # <---

    - GITLAB_HOST=192.168.99.100 # <---
    - GITLAB_PORT=80
    - GITLAB_SSH_PORT=2222
    - GITLAB_SHELL_SSH_PORT=2222
    - GITLAB_RELATIVE_URL_ROOT=
    - GITLAB_SECRETS_DB_KEY_BASE=secret
    - GITLAB_SECRETS_SECRET_KEY_BASE=secret
    - GITLAB_SECRETS_OTP_KEY_BASE=secret

    - GITLAB_REGISTRY_ENABLED=true
    - GITLAB_REGISTRY_HOST=localhost # <---
    - GITLAB_REGISTRY_PORT=4567
    - GITLAB_REGISTRY_API_URL=https://localhost:4567/ # Internal address to the registry, will be used by GitLab to directly communicate with API.
    - GITLAB_REGISTRY_CERT_PATH=/certs/localhost-auth.crt # <---
    - GITLAB_REGISTRY_KEY_PATH=/certs/localhost-auth.key # <---

# Read here --> https://hub.docker.com/r/sameersbn/gitlab-ci-multi-runner/
  runner:
    restart: always
    image: gitlab/gitlab-runner:latest
    external_links:
    - "gitlab:gitlab" # <---
    environment:
    - CI_SERVER_URL=http://192.168.99.100:80/ci/
    - RUNNER_TOKEN=1XoJuQeyyN3EZxAt7pkn # < ------------------- different every time
    - RUNNER_DESCRIPTION=default_runner
    - RUNNER_EXECUTOR=shell

  registry:
    restart: always
    image: registry:2.4.1
    ports:
    - "4567:5000" # <---
    volumes:
    - registry-data:/var/lib/registry
    - ./certs:/certs
    external_links:
    - "gitlab:gitlab" # <---
    environment:
    - REGISTRY_LOG_LEVEL=info
    - REGISTRY_STORAGE_DELETE_ENABLED=true
    - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/var/lib/registry

    - REGISTRY_AUTH_TOKEN_REALM=http://localhost/jwt/auth # <---
    - REGISTRY_AUTH_TOKEN_SERVICE=container_registry
    - REGISTRY_AUTH_TOKEN_ISSUER=localhost
    - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/localhost-auth.crt # <---

    - SSL_REGISTRY_KEY_PATH=/certs/localhost-auth.key # <---
    - SSL_REGISTRY_CERT_PATH=/certs/localhost-auth.crt # <---

    - REGISTRY_HTTP_TLS_CERTIFICATE=/certs/localhost-auth.crt # <---
    - REGISTRY_HTTP_TLS_KEY=/certs/localhost-auth.key # <---
    - REGISTRY_HTTP_SECRET=secret

  portainer:
    image: portainer/portainer
    ports:
      - "9000:9000"
    volumes:
      - "/var/run/docker.sock:/var/run/docker.sock"
      - "/opt/portainer:/data"

volumes:
    gitlab-data:
    gitlab-logs:
    postgresql:
    redis:
    registry-data:

问题在于Runner没有注册,我每次都要手动注册(尽管尚未成功)。我希望能够自动注册到Gitlab服务器,并使用自动生成的令牌,这样我 [或使用 docker-compose.yml 文件的任意开发人员] 就不必再关心这个问题了。
我正在尝试找到一种抓取令牌并将其提供给Runner的方法。是否有任何方式可以实现?

我发现了这个[https://gitlab.com/gitlab-org/gitlab-ce/issues/24030],最后一条评论是1周前的,所以我猜他们很快就会添加它... - Kostas Demiris
上面的链接已经失效了,这是一个可点击的链接:https://gitlab.com/gitlab-org/gitlab-ce/issues/24030 问题看起来确实很活跃。 - GabLeRoux
像RUNNER_TOKEN这样的运行程序的环境变量在哪里记录?我没有看到官方镜像gitlab/gitlab-runner支持它。 - Bobík
1个回答

0

您可以选择 (1) 挂载您的 /etc/gitlab-runner 目录并使其持久化,或者 (2) 创建一个入口脚本,在容器启动时每次注册 runner。

例如,您可以编写如下的入口脚本:

#!/usr/bin/env bash
# entrypoint.sh
gitlab-runner register \
  --non-interactive \
  --url "${CI_SERVER_URL}/" \
  --registration-token "${RUNNER_TOKEN}" \
  --executor "${RUNNER_EXECUTOR}" \
  --descritpion="${RUNNER_DESCRIPTION}" \
  --config="/etc/gitlab-runner/config.toml"

# call original gitlab-runner entrypoint with CMD args
exec /usr/bin/dumb-init /entrypoint "$@"

还有一个像这样的用于运行程序的Dockerfile:

FROM gitlab/gitlab-runner:v14.8.2

COPY entrypoint.sh /docker-entrypoint.sh
ENTRYPOINT ["./docker-entrypoint.sh"]

# Need to redefine original CMD provided by the parent image after setting ENTRYPOINT
CMD ["run", "--user=gitlab-runner", "--working-directory=/home/gitlab-runner"]

这只是表达解决方案的一种方式。原则上,您不需要自定义构建图像--您可以在Compose文件中制作等效的entrypoint:键并跳过自定义dockerfile。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接