Ubuntu 22.04.2 LTSサーバーのランチャーでgitlab-ceインスタンスをホストするためにdocker composeを使用しています。
version: '3.7'
services:
web:
image: 'gitlab/gitlab-ce:latest'
restart: always
hostname: 'localhost'
container_name: gitlab-ce
environment:
GITLAB_OMNIBUS_CONFIG: |
external_url 'http://192.168.123.178'
ports:
- '80:80'
- '8443:443'
volumes:
- '$GITLAB_HOME/config:/etc/gitlab'
- '$GITLAB_HOME/logs:/var/log/gitlab'
- '$GITLAB_HOME/data:/var/opt/gitlab'
networks:
- gitlab
gitlab-runner:
image: gitlab/gitlab-runner:alpine
container_name: gitlab-runner
restart: always
depends_on:
- web
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- '$GITLAB_HOME/gitlab-runner:/etc/gitlab-runner'
networks:
- gitlab
networks:
gitlab:
name: gitlab-network
gitlab.rb
コンテナにインストールされている設定ファイルでポート5050のコンテナレジストリを有効にしました。
...
registry_external_url 'http://192.168.123.178:5050'
...
gitlabのすべてのプロジェクトでAutoDevOps機能を使用できるため、コンテナレジストリが有効になっていることを確認できます。
次のコマンドを使用して、ランチャーをプロジェクトに登録します。
$ sudo docker exec -it gitlab-runner gitlab-runner register --url "http://gitlab-ce" --clone-url "http://gitlab-ce" --registration-token <registration_token_from_gitlab_web_interface> --executor docker --description "Deployment Runner" --docker-image "docker:stable" --docker-privileged
次のconfig.toml
ファイルが生成されます。
[[runners]]
name = "Deployment Runner"
url = "http://gitlab-ce"
id = 6
token = "<token>"
token_obtained_at = 2023-04-28T13:39:30Z
token_expires_at = 0001-01-01T00:00:00Z
executor = "docker"
clone_url = "http://gitlab-ce"
[runners.cache]
MaxUploadedArchiveSize = 0
[runners.docker]
tls_verify = false
image = "docker:stable"
privileged = true
disable_entrypoint_overwrite = false
oom_kill_disable = false
disable_cache = false
volumes = ["/cache"]
shm_size = 0
# manually added this
network_mode = "gitlab-network"
これで、nginxコンテナを使用してホストされる単純なHTMLウェブサイトを設定しました。.gitlab-ci.yml
継続的な展開ワークフローをテストするために使用するファイルは次のとおりです。
stages:
- publish
- deploy
variables:
TAG_LATEST: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:latest
TAG_COMMIT: $CI_REGISTRY_IMAGE/$CI_COMMIT_REF_NAME:$CI_COMMIT_SHORT_SHA
DOCKER_HOST: tcp://docker:2375/
DOCKER_TLS_CERTDIR: ""
publish:
image: docker:latest
stage: publish
services:
- name: docker:dind
command: ["--insecure-registry=localhost:5050"]
script:
- docker build -t $TAG_COMMIT -t $TAG_LATEST .
- docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
- docker push $TAG_COMMIT
- docker push $TAG_LATEST
deploy:
image: alpine:latest
stage: deploy
tags:
- deployment
script:
- chmod og= $ID_RSA
- apk update && apk add openssh-client
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker pull $TAG_COMMIT"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker container rm -f my-app || true"
- ssh -i $ID_RSA -o StrictHostKeyChecking=no $SERVER_USER@$SERVER_IP "docker run -d -p 80:80 --name my-app $TAG_COMMIT"
environment:
name: production
url: http://192.168.123.178
すべてが問題ないようですが、ビルド段階で次のエラーが返されます。
...
$ docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://[MASKED]:5050/v2/": dial tcp [MASKED]:5050: connect: connection refused
Cleaning up project directory and file based variables
ERROR: Job failed: exit code 1
編集する:
言及することを忘れて、/etc/docker/deamon.json
次のようにdockerデーモンをホストしているサーバーに安全でないコンテナレジストリも宣言しました。
{ "insecure-registries": ["localhost:5050"] }
gitlab-runnerコンテナで同じことをする必要があるかどうかわかりません。どうすればいいのかわかりません。