2016-07-08 16 views
6

के लिए मूल छवि के रूप में गिटलैब रजिस्ट्री से एक निजी डॉकर छवि का उपयोग करना यदि मैं गिटलैब रजिस्ट्री से किसी अन्य सीआई बिल्ड की मूल छवि के रूप में उपयोग करना चाहता हूं तो मुझे कैसे प्रमाणित करना चाहिए?सीआई

https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#using-a-private-docker-registry के अनुसार मुझे पहले धावक मशीन पर मैन्युअल रूप से लॉगिन करना होगा। किसी भी तरह से मौजूदा गिटलैब उपयोगकर्ता के साथ लॉगिन करने के लिए यह अजीब लगता है।

क्या सीआई वैरिएबल "CI_BUILD_TOKEN" का उपयोग करने का कोई तरीका है (जिसे गिटलैब रजिस्ट्री से मूल छवि खींचने के लिए प्रमाणीकरण के लिए "गिटलैब कंटेनर रजिस्ट्री के साथ प्रमाणीकरण के लिए उपयोग की जाने वाली टोकन" के रूप में वर्णित किया गया है?

संपादित करें: मुझे पता चला कि मैं सार्वजनिक परियोजनाओं से छवियों का उपयोग कर सकता हूं। लेकिन मैं वास्तव में अपने डॉकर परियोजनाओं को सार्वजनिक बनाना नहीं चाहता हूं।

अपडेट: गिटलैब 8.14 से शुरू करना आप डॉकर रजिस्ट्री में बिल्ड से डॉकर छवियों का उपयोग कर सकते हैं। https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/blob/master/docs/configuration/advanced-configuration.md#support-for-gitlab-integrated-registry

उत्तर

3

नहीं, यह वर्तमान में किसी भी सुरुचिपूर्ण तरीके से संभव नहीं है। गिटलैब को मूल छवियों के लिए स्पष्ट प्रमाण-पत्र लागू करना चाहिए, यह सबसे प्रत्यक्ष और सही समाधान होगा।

आपको गिटलैब रनर मशीन पर docker login की आवश्यकता है। आप gitlab-ci-token का उपयोग नहीं कर सकते क्योंकि वे समाप्त हो जाते हैं और परियोजना-निर्भर भी हैं, इसलिए आप वास्तव में प्रत्येक प्रोजेक्ट के लिए एक टोकन का उपयोग नहीं कर सकते हैं। अपने स्वयं के लॉगिन का उपयोग करना अभी एकमात्र समाधान उपलब्ध है (इस पर सही होने के लिए खुश)।

+1

धन्यवाद। आप सही हे। अभी यह संभव नहीं है। पॉइंटर्स मैंने पाया: https://gitlab.com/gitlab-org/gitlab-ce/issues/19219 और https://gitlab.com/gitlab-org/gitlab-ce/issues/19275 –

+0

इस पर अनुवर्ती करने के लिए, इस कार्यक्षमता को और अधिक सुरुचिपूर्ण तरीके से प्रकट करने से संबंधित कुछ गिटलैब टिकट हैं (https://gitlab.com/gitlab-org/gitlab-ce/issues/19275)। हालांकि, यह अभी बैकलॉग में बैठता प्रतीत होता है। उम्मीद है कि, अधिक समर्थन के साथ, यह क्षमता कुछ ऐसा होगा जो टीम को समुदाय समुदाय के रूप में महत्वपूर्ण मानती है। – user376327

4

अब यह संभव है, उन्होंने महीने पहले उस विकल्प को शामिल किया है।

उपयोगकर्ता के रूप में उपयोगकर्ता और परिवर्तनीय $CI_BUILD_TOKEN पासवर्ड के रूप में उपयोग करें।

यह उदाहरण गिटलैब 8.13.6 पर काम करता है। यह अगर जरूरत परीक्षण छवि बनाता है, और अगले चरण में इसे इस्तेमाल करता है वाक्य रचना जांच करने के लिए:

build_test: 
    stage: build_test_image 
    script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN $CI_REGISTRY 
    - docker build -t $CI_REGISTRY_IMAGE:test -f dockerfiles/test/Dockerfile . 
    - docker push $CI_REGISTRY_IMAGE:test 
    tags: 
    - docker_build 
    environment: test 

test_syntax: 
    image: $CI_REGISTRY_IMAGE:test 
    stage: test 
    script: 
    - flake8 --ignore=E501,E265,E402 . 

अद्यतन: पुनः पढ़ने सवाल है, स्वीकार किए जाते हैं जवाब सही है। मेरे उदाहरण में, test_syntax जॉब रजिस्ट्री को प्रमाणीकृत करने में विफल रहेगा, जब तक उपयोगकर्ता मैन्युअल रूप से रनर मशीन से लॉग इन नहीं करता है। हालांकि, यह काम कर सकता है अगर 2 धावक एक ही मेजबान पर हैं, लेकिन यह वैसे भी सबसे अच्छा समाधान नहीं है।

gitlab-ci-multi-runner 1.8 में रजिस्ट्री क्रेडेंशियल्स को चर के रूप में जोड़ने का विकल्प है, इसलिए आपको एन्कोडेड क्रेडेंशियल प्राप्त करने के लिए केवल एक बार लॉगिन करने की आवश्यकता है। documentation देखें।

+0

ऐसा करने के लिए आप किस प्रकार के धावक का उपयोग कर रहे हैं?यदि आप शेल रनर का उपयोग कर रहे हैं तो गिटलैब सीआई रजिस्ट्री से छवि खींच नहीं रहा है, बल्कि इसके बजाय पिछले चरण में मेजबान पर बनाई गई छवि का उपयोग कर रहा है। – BrokenBinary

+0

असल में मैं 2 धावक का उपयोग कर रहा हूं। एक खोल निष्पादक के साथ, दूसरा डॉकर निष्पादक के साथ। खोल निष्पादक का इच्छित उपयोग केवल डॉकर छवियों का निर्माण करना है, इसलिए मैं टैग 'docker_build' का उपयोग कर रहा हूं। नौकरी 'test_syntax' के अंदर 'image' निर्देश और' build_test' पर इसकी कमी भी ध्यान दें। – charli

0

यह संभव है कि आपको पहले उस छवि की गिटलैब कंटेनर रजिस्ट्री में लॉगिन करना होगा, जिसे आप उपयोग करना चाहते हैं, कृपया नीचे उदाहरण देखें। before_script: पर ध्यान दें जो मूल रूप से छवि का उपयोग करने से पहले आपको लिखता है।

image: docker:latest 
services: 
- docker:dind 

stages: 
- build 

variables: 
    CONTAINER_RELEASE_IMAGE: registry.gitlab.com/obonyojimmy/node-mono-clr:latest 

before_script: 
    - docker login -u gitlab-ci-token -p $CI_BUILD_TOKEN registry.gitlab.com 

build-app: 
    stage: build 
    image: CONTAINER_RELEASE_IMAGE 
    script: 
    - npm run build