Hilfe bei Gitlab registry

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Hallo ich bräuchte mal eure Hilfe,
Ich will via Gitlab (lokal per Container auf meiner Synology installiert) und Gitlab runner ein image builden und in meinem Docker im reiter Image speichern und dann pushen.

soviel zu meiner Fantasie :)

was ich jetzt schon hinbekommen habe ist.

Gitlab + runner + redis + postgresql läuft soweit stabil.

wenn ich ein Projekt pushe führt der CI/CD auch aus....

Soweit so gut!

Das Builden des Images funktioniert
1624523818081.png

und wird in meiner Dockerumgebung in Image gespeichert.

1624523673848.png

Wenn es dann zum Pushen kommt zählt er runter und bringt dann ab.

1624523874459.png

hier meine gitlab-ci.yml

Code:
image: docker:stable
services:
- docker:dind

stages:
- build
- test
- release
- deploy

variables:
  CONTAINER_TEST_IMAGE: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME
  CONTAINER_RELEASE_IMAGE: $CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:latest

before_script:
  - echo "docker login -u "gitlab+deploy-token-2" -p "$CI_BUILD_TOKEN" $CI_REGISTRY"
  - docker login -u "gitlab+deploy-token-2" -p "$CI_BUILD_TOKEN" $CI_REGISTRY
  - echo "docker login -u "gitlab+deploy-token-2" -p "$CI_BUILD_TOKEN" $CI_REGISTRY"

build:
  stage: build
  script:
    - echo "$CI_REGISTRY/$CI_PROJECT_NAMESPACE/$CI_PROJECT_NAME:$CI_BUILD_REF_NAME"
    - echo "$CONTAINER_TEST_IMAGE"
    - docker build -t $CONTAINER_TEST_IMAGE .
    - docker push $CONTAINER_TEST_IMAGE

test1:
  stage: test
  script:
    - docker run $CONTAINER_TEST_IMAGE /script/to/run/tests

test2:
  stage: test
  script:
    - docker run $CONTAINER_TEST_IMAGE /script/to/run/another/test

release-image:
  stage: release
  script:
    - docker pull $CONTAINER_TEST_IMAGE
    - docker tag $CONTAINER_TEST_IMAGE $CONTAINER_RELEASE_IMAGE
    - docker push $CONTAINER_RELEASE_IMAGE
  only:
    - master

deploy:
  stage: deploy
  script:
    - ./deploy.sh
  only:
    - master

Weil ich das ganze von Sameersbn habe, habe ich mir auch diesen Link angeschaut
https://github.com/sameersbn/docker-gitlab/blob/master/docs/container_registry.md
Ich denke da liegt auch mein Fehler, aber ich weiß es nicht ganz wo und hoffe jemand von euch macht das auch und kann mir helfen

Ich weiß nicht ganz was ihr noch für eine gescheite Analyse braucht, wenn euch etwas fehlt bitte schreibt es.


vielen Dank.
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
$CI_REGISTRY=localhost wird wohl Dein Problem sein... Das müsste bei dir stattdessen den Wert {was auch immer du hier rot durchgestrichen hast}.ddns.net stehen. Wobei es mich wundert das docker login funtioniert...

Nur für Container im "network=host" Modus ist "lokalhost im Container" == "localhost auf dem Host". Bei Containern im network=bridge Modus ist localhost nur lokal zum Container selbst und zu nichts anderem.

Sprich: der Runner kann beim Zugriff auf localhost keine Registry finden, da sie nicht im Runner, sondern im Gitlab-Container läuft. Dazu kommt das via https://localhost/... auf Port 443 versuchen wird auf das Repo zuzugreifen, es sei denn man konnte irgendwo insecure-Registry angeben..
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
danke für deine antwort.

ich hab probiert das CI_REGISTRY zu ändern aber dann kann mich nicht mal einloggen.

$ docker login -u "gitlab+deploy-token-2" -p "$CI_BUILD_TOKEN" $CI_REGISTRY
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: Get "https://registry.xxx.synology.me/v2/": denied: access forbidden


mir ist eingefallen vielleicht bringt meine docker-compose noch was.


Code:
  gitlab:
    restart: always
    image: sameersbn/gitlab:14.0.0
    container_name: gitlab_gitlab
    depends_on:
    - redis
    - postgresql
    ports:
    - "${GitlabHttpPort}:80"
    - "${GitlabsshPort}:22"
    - "${GitlabsslPort}:443"
    volumes:
    - ${HomeDir}/gitlab/config:/etc/gitlab
    - ${HomeDir}/gitlab/logs:/var/log/gitlab
    - ${HomeDir}/gitlab/data:/home/git/data
    - ${HomeDir}/gitlab/opt:/var/opt/gitlab
    healthcheck:
      test: ["CMD", "/usr/local/sbin/healthcheck"]
      interval: 5m
      timeout: 10s
      retries: 3
      start_period: 5m
    environment:
    ....
    - GITLAB_REGISTRY_ENABLED=true
    - GITLAB_REGISTRY_HOST=registry.xxx.synology.me
    - GITLAB_REGISTRY_PORT=443
    - GITLAB_REGISTRY_API_URL=http://registry:5000
    - GITLAB_REGISTRY_KEY_PATH=/certs/registry.key
    - SSL_REGISTRY_KEY_PATH=/certs/registry.key
    - SSL_REGISTRY_CERT_PATH=/certs/registry.crt
    env_file:
    - ./.env

  registry:
    image: registry
    container_name: gitlab_registry
    restart: always
    depends_on:
    - redis
    ports:
    - "5000:5000"
    volumes:
    - ${HomeDir}/gitlab/shared/registry:/registry
    - ${HomeDir}/gitlab/data/certs:/certs
    environment:
    - REGISTRY_LOG_LEVEL=info
    - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry
    - REGISTRY_AUTH_TOKEN_REALM=https://git.xxx.synology.me/jwt/auth
    - REGISTRY_AUTH_TOKEN_SERVICE=container_registry
    - REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer
    - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry.crt
    - REGISTRY_STORAGE_DELETE_ENABLED=true
    - REGISTRY_AUTH_TOKEN_AUTOREDIRECT=false
    - REGISTRY_AUTH=token
    - REGISTRY_STORAGE_CACHE_BLOBDESCRIPTOR=redis
    - REGISTRY_REDIS_ADDR=redis:6379


mein Reverse Proxy ist wie folgt
1624619166441.png

hoffe das bringt noch ein paar Informationen

ps: das Zertifikat habe ich wie in der Anleitung gemacht

Code:
mkdir certs
cd certs
# Generate a random password password_file used in the next commands
openssl rand -hex -out password_file 32
# Create a PKCS#10 certificate request
openssl req -new -passout file:password_file -newkey rsa:4096 -batch > registry.csr
# Convert RSA key
openssl rsa -passin file:password_file -in privkey.pem -out registry.key
# Generate certificate
openssl x509 -in registry.csr -out registry.crt -req -signkey registry.key -days 10000

In den Ordnern .../gitlab/data/certs
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
Ah die Registry läuft ja gar nicht in Gitlab, sondern ist ein separater Container.

Zumindest schein CI_REGISTRY jetzt die richtige Domain von GITLAB_REGISTRY_HOST zurückzugeben. Da die Registry-API im selben Container Netzwerk ist, sollte GITLAB_REGISTRY_API_URL auch passen.

Jetzt ist die Frage, ob die Registry sauber auf REGISTRY_AUTH_TOKEN_REALM durchkommt um die Authentifizierung über Gitlab abzuwickeln... REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE muss zum Zertifikat der root CA des in der Syno verwendeten Zertifikats passen.

Was passiert denn, wenn https://git.xxx.synology.me/jwt/auth direkt im Brower aufgerufen wird?
Macht es einen Unterschied, ob REGISTRY_AUTH_TOKEN_AUTOREDIRECT auf true steht?

Die-RP Regel für den Registry Zugriff über http würde ich entfernen, jeder Konsument muss sonst in /etc/docker/daemon.json deine Registry als Insecure-Registry eintragen und dann wandern die Daten noch unverschlüsselt über das Internet... Zusätzlicher Konfigurationsaufwand bei allen Konsumenten und dann noch mit Nachteilen... Will man das wirklich?
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Moin, sorry für die späte Antwort, das Wochenende war stressig :)

Zumindest schein CI_REGISTRY jetzt die richtige Domain von GITLAB_REGISTRY_HOST zurückzugeben. Da die Registry-API im selben Container Netzwerk ist, sollte GITLAB_REGISTRY_API_URL auch passen.
das hört sich doch schon mal gut an :)

Jetzt ist die Frage, ob die Registry sauber auf REGISTRY_AUTH_TOKEN_REALM durchkommt um die Authentifizierung über Gitlab abzuwickeln... REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE muss zum Zertifikat der root CA des in der Syno verwendeten Zertifikats passen.
muss ich mir dafür das Zertifikat von "/usr/syno/etc/certificate/_archive/xxx" Klonen und in mein Ordner "/volume1/docker/gitlab/gitlab/data/certs" kopieren?

Was passiert denn, wenn https://git.xxx.synology.me/jwt/auth direkt im Brower aufgerufen wird?
Da kommt

The page could not be found or you don't have permission to view it.​


Was sollte hier normal erscheinen?

Macht es einen Unterschied, ob REGISTRY_AUTH_TOKEN_AUTOREDIRECT auf true steht?
Ich hatte schon gelesen, das es dort Probleme geben kann. Kann es gerne aber auf True stellen.

Die-RP Regel für den Registry Zugriff über http würde ich entfernen, jeder Konsument muss sonst in /etc/docker/daemon.json deine Registry als Insecure-Registry eintragen und dann wandern die Daten noch unverschlüsselt über das Internet... Zusätzlicher Konfigurationsaufwand bei allen Konsumenten und dann noch mit Nachteilen... Will man das wirklich?
du meinst den letzten Eintrag von mein RP Bild? Wenn ja, das kann ich gerne weg machen, ich hatte die nur reingemacht, weil ich nicht ganz sicher war ob gitlab per https oder http connecten will, darum habe ich einfach beides mal auf gemacht.


vielen Dank für deine Hilfe
 

haydibe

Benutzer
Sehr erfahren
Mitglied seit
12. Apr 2016
Beiträge
1.519
Punkte für Reaktionen
404
Punkte
103
muss ich mir dafür das Zertifikat von "/usr/syno/etc/certificate/_archive/xxx" Klonen und in mein Ordner "/volume1/docker/gitlab/gitlab/data/certs" kopieren?
Wenn Du dir die mühe machen willst... Es sollte ausreichen im RP den HTTPS Traffic zu terminieren und nach innen nur per http zu sprechen.. aber im Detail erinnere ich mich da auch nicht mehr dran. Ist etliche Tage her das ich Gitlab privat aufgesetzt habe.
Was sollte hier normal erscheinen?
Hervorragende Frage! Eigentlich würde ich erwarten das dort etwas kommt - schau doch sonst mal in die Gitlab und Registry logs, da sollte erkennbar sein, was ihm passt.

Ich würde Dienste im Internet nur über https erreichbar machen - warum sollte man seine kostbaren Daten unverschlüsselt durch den Wilden Westen (das Internet ist nichts anderes...) schicken wollen.

Ich verwende Gitlab selbst nicht (mehr) - aktuell verwende ich beruflich einen Zoo gemanagter AWS-Dienste (CodeCommit, CodePipeline, CodeBuild, Elastic Container Registry) stattdessen. Was ich mitbringe ist "die Docker-Denke"... und jahrelange Erfahrung im Bau von Build- und Deployment Pipelines in Container-zentrierten Projekten .. am Ende des Tages haben die meisten Pipelines dann doch wieder Bash-Befehl im Bauch ^^
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Hallo,
ich muss das Thema leider nochmal aufleben lassen, weil es immer noch nicht läuft :(

ich bin in der Zwischenzeit auch auf die DS920+ mit 20 gb gewechselt.


alles läuft Einwand frei bis auf die registry....

mein Problem ist denke ich das irgendwas nicht richtig konfiguriert habe...

als Hilfestellung habe ich mich an dem hier orientiert https://github.com/sameersbn/docker-gitlab/blob/master/docs/container_registry.md

meine Gitlab habe ich um folgendes erweitert.

Code:
- GITLAB_REGISTRY_ENABLED=true
- GITLAB_REGISTRY_HOST=reg.xx.synology.me
- GITLAB_REGISTRY_PORT=443
- GITLAB_REGISTRY_API_URL=https://reg.xx.synology.me:5555
- GITLAB_REGISTRY_KEY_PATH=/certs/registry-auth.key
- GITLAB_REGISTRY_ISSUER=gitlab-issuer
- SSL_REGISTRY_KEY_PATH=/certs/registry-auth.key
- SSL_REGISTRY_CERT_PATH=/certs/registry-auth.crt

um meine registry docker-compose sieht so aus

Code:
registry:
    restart: always
    image: registry:2.4.1
    container_name: gitlab_registry
    ports:
    - "5555:5000"
    volumes:
    - ${HomeDir}/gitlab-registry-data:/var/lib/registry
    - ${HomeDir}/gitlab/data/certs:/certs
    external_links:
    - "gitlab:git.xxx.synology.me"
    environment:
    - REGISTRY_LOG_LEVEL=info
    - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry
    - REGISTRY_AUTH_TOKEN_REALM=https://git.xxx.synology.me/jwt/auth
    - REGISTRY_AUTH_TOKEN_SERVICE=container_registry
    - REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer
    - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry-auth.crt
    - REGISTRY_STORAGE_DELETE_ENABLED=true

das Zertifikat habe ich von meinem laufwerk gecloned /usr/syno/etc/certificate/_archive

mein Reverse Proxy habe ich so eingestellt

Code:
Reverse-Proxy-Name: Gitreg

Quelle:
    - Protokoll: HTTPS
    - Hostname: reg.xxx.synology.me
    - Port: 443
    
Ziel:
    - Protokoll: HTTPS
    - Hostname: localhost
    - Port: 5555


ich bekomme aber weder Container Registry einen zugriff
1637611269780.png
Hier kommt der Fehler:
1637611317643.png



auch wenn ich https://git.xxx.synology.me/jwt/auth bekomm ich ein Fehler


1637611381919.png


Ich muss zu meiner Schande gestehen ich habe schon mal "Container Registry" auf gitlab zum laufen gebracht, aber weil ich nicht per "login docker reg.xxxx.synology.me" connecten konnte, habe ich so viel rum probiert und geändert, dass ich nicht mehr die "richtigen" Einstellungen finde :(

Das ganze Thema ist auch sehr zermürbend mittlerweile.

ich bin für jede Art von Hilfe dankbar.
 

Schechner

Benutzer
Mitglied seit
10. Feb 2020
Beiträge
48
Punkte für Reaktionen
0
Punkte
6
Servus,

ich bin wieder ein schritt weiter 🥳

Ich hab es wieder geschaft die Container Registry zum laufen zu bringen.

1637659595740.png


meine docker-compose sieht jetzt so aus

Gitlab:
Code:
    - GITLAB_REGISTRY_ENABLED=true
    - GITLAB_REGISTRY_HOST=reg.xxx.synology.me
    - GITLAB_REGISTRY_PORT=443
    - GITLAB_REGISTRY_API_URL=http://registry:5000
    - GITLAB_REGISTRY_KEY_PATH=/certs/registry-auth.key
    - GITLAB_REGISTRY_CERT_PATH=/certs/registry-auth.crt
    - SSL_REGISTRY_CERT_PATH=/certs/registry-auth.crt
    - SSL_REGISTRY_KEY_PATH=/certs/registry-auth.key

Registry:
Code:
restart: always
    image: registry:2.4.1
    container_name: gitlab_registry
    ports:
    - "5555:5000"
    volumes:
    - ${HomeDir}/gitlab-registry-data:/registry
    - ${HomeDir}/gitlab/data/certs:/certs
    external_links:
    - "gitlab:git.xxx.synology.me"
    environment:
    - REGISTRY_LOG_LEVEL=info
    - REGISTRY_STORAGE_FILESYSTEM_ROOTDIRECTORY=/registry
    - REGISTRY_AUTH_TOKEN_REALM=https://git.xxx.synology.me/jwt/auth
    - REGISTRY_AUTH_TOKEN_SERVICE=container_registry
    - REGISTRY_AUTH_TOKEN_ISSUER=gitlab-issuer
    - REGISTRY_AUTH_TOKEN_ROOTCERTBUNDLE=/certs/registry-auth.crt
    - REGISTRY_STORAGE_DELETE_ENABLED=true


ich kann jetzt aber immer noch nicht per " docker login reg.xxx.synology.me -u gitlab+deploy-token -p xxxxx" connecten

da bringt er mir
Code:
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
Error response from daemon: login attempt to https://reg.xxx.synology.me/v2/ failed with status: 502 Bad Gateway

die registry sagt:

Code:
2021-11-23 09:22:35    stdout    172.18.0.2 - - [23/Nov/2021:09:22:35 +0000] "GET /v2/gitlab-instance-f50bf163/monitoring/tags/list HTTP/1.1" 404 143 "" "GitLab/14.4.1"
2021-11-23 09:22:35    stdout    time="2021-11-23T09:22:35.869953131Z" level=error msg="response completed with error" auth.user.name= err.code="name unknown" err.detail=map[name:gitlab-instance-f50bf163/monitoring] err.message="repository name not known to registry" go.version=go1.6.2 http.request.host="registry:5000" http.request.id=48411962-338b-4421-a043-ac393c415ffa http.request.method=GET http.request.remoteaddr="172.18.0.2:54978" http.request.uri="/v2/gitlab-instance-f50bf163/monitoring/tags/list" http.request.useragent="GitLab/14.4.1" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.494374ms http.response.status=404 http.response.written=143 instance.id=b80c9032-68e5-4c1e-becf-bc7457f01d9d service=registry vars.name="gitlab-instance-f50bf163/monitoring" version=v2.4.1
2021-11-23 09:22:35    stdout    172.18.0.2 - - [23/Nov/2021:09:22:35 +0000] "GET /v2/ HTTP/1.1" 200 2 "" "GitLab/14.4.1"
2021-11-23 09:22:35    stdout    time="2021-11-23T09:22:35.797181519Z" level=info msg="response completed" go.version=go1.6.2 http.request.host="registry:5000" http.request.id=c61f6e1d-f7c4-45df-80ef-aa7752b740ae http.request.method=GET http.request.remoteaddr="172.18.0.2:54976" http.request.uri="/v2/" http.request.useragent="GitLab/14.4.1" http.response.contenttype="application/json; charset=utf-8" http.response.duration=2.279081ms http.response.status=200 http.response.written=2 instance.id=b80c9032-68e5-4c1e-becf-bc7457f01d9d service=registry version=v2.4.1

Auch funktioniert https://git.xxx.synology.me/jwt/auth noch nicht

ich vermute ich habe noch ein problem mit dem "GITLAB_REGISTRY_API_URL" wenn ich da aber was anders eintrage, kann ich die Seite nicht mehr aufrufen.


-edit-
Ich hab mein Reverse Proxy von https auf http geändert

Reverse-Proxy-Name: Gitreg

Quelle:
- Protokoll: HTTPS
- Hostname: reg.xxx.synology.me
- Port: 443

Ziel:
- Protokoll: HTTP
- Hostname: localhost
- Port: 5555

jetzt ist wenn ich reg.xxx.synology.me/v2 eingebe erreichbar, aber bringt mehr einen fehler

Code:
{"errors":[{"code": "UNAUTHORIZED", "message": "authentication required", "detail":null}]}


-edit 2-

Ich hab jetzt meine docker-compose wiefolgt geändert:
Code:
    - GITLAB_REGISTRY_ENABLED=true
    - GITLAB_REGISTRY_HOST=reg.xxx.synology.me
    - GITLAB_REGISTRY_PORT=443
    - GITLAB_REGISTRY_API_URL=http://reg.xxx.synology.me/
    - GITLAB_REGISTRY_KEY_PATH=/certs/registry-auth.key
    - GITLAB_REGISTRY_CERT_PATH=/certs/registry-auth.crt
    - SSL_REGISTRY_CERT_PATH=/certs/registry-auth.crt
    - SSL_REGISTRY_KEY_PATH=/certs/registry-auth.key

jetzt kann ich per console connecten

Code:
root@NAS:/volume1/docker/gitlab# docker login reg.xxx.synology.me -u gitlab+deploy-token-1 -p xxx
WARNING! Using --password via the CLI is insecure. Use --password-stdin.
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store


Login Succeeded

aber auf der gitlab seite bekomm ich ein error

1637662168282.png
 
Zuletzt bearbeitet:


 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat