自动注册 GitLab runner

Kos*_*ris 6 gitlab gitlab-ci-runner docker-compose

我有一个docker-compose.yml设置 Gitlab、Container Registry 和 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:
Run Code Online (Sandbox Code Playgroud)

问题是跑步者没有注册,我每次都必须手动进行(虽然还没有成功)。我想使用自动生成的令牌自动注册到 Gitlab 服务器,所以我 [或将使用该docker-compose.yml文件的任意开发人员] 不关心这一点。

我试图找到一种方法来获取令牌并将其提供给跑步者。有可能吗?

syt*_*ech 0

您可以 (1) 挂载/etc/gitlab-runner目录并保持其持久性,或者 (2) 创建一个入口点脚本,在每次容器启动时注册运行程序。

例如,您可能有一个如下所示的入口点脚本:

#!/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 "$@"
Run Code Online (Sandbox Code Playgroud)

还有一个像这样的跑步者的 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"]
Run Code Online (Sandbox Code Playgroud)

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