2016-08-29 20 views
10

Tôi đang gặp sự cố khi sao chép các kho lưu trữ lớn qua HTTP trên trình chạy Windows Gitlab của tôi. Tôi đã thử một số phương pháp để làm nhái nông hoặc vô hiệu hóa nén clone. Vẫn không có may mắn.Làm cách nào để kích hoạt nhân bản trên SSH cho nhân vật Gitlab?

Nhân bản cùng một kho lưu trữ qua SSH hoạt động tốt như một giải pháp tạm thời và tôi muốn thực hiện điều này trong quá trình Gitlab CI của chúng tôi.

Vấn đề hiện tại là nơi tôi không biết cách sử dụng SSH như một phương thức sao chép cho gitlab-multi-runner. Nó chỉ có vẻ như sử dụng HTTP như là một mặc định, và lựa chọn duy nhất của tôi về nhân bản là liệu nó sẽ làm một bản sao đầy đủ hoặc lấy một.

CI/CD Display

Ai đó có thể giải thích làm thế nào tôi có thể nhận được bản sao mà/lấy để làm việc trên một Á hậu thông qua SSH thay vì HTTP?

Phiên bản Gitlab: GitLab phiên bản cộng đồng 8.10.7

Cảm ơn!

+2

Dường như có sự cố được mở cho tính năng này ([233] (https://gitlab.com/gitlab-org/gitlab-ci-multi-runner/issues/233)), nhưng dường như có đã bị đóng mà không cần triển khai ... – Lucas

Trả lời

0

Theo:

https://docs.gitlab.com/ee/ci/ssh_keys/README.html

Bạn cần phải:

  1. Tạo một cặp khóa SSH mới với ssh-keygen
  2. Thêm khóa riêng như một Variable Bí quyết để dự án
  3. Chạy ssh-agent trong công việc để tải khóa cá nhân.

Ví dụ gitlab_ci.yml:

before_script: 
    # Install ssh-agent if not already installed, it is required by Docker. 
    # (change apt-get to yum if you use a CentOS-based image) 
    - 'which ssh-agent || (apt-get update -y && apt-get install openssh-client -y)' 

    # Run ssh-agent (inside the build environment) 
    - eval $(ssh-agent -s) 

    # Add the SSH key stored in SSH_PRIVATE_KEY variable to the agent store 
    - ssh-add <(echo "$SSH_PRIVATE_KEY") 

    # For Docker builds disable host key checking. Be aware that by adding that 
    # you are suspectible to man-in-the-middle attacks. 
    # WARNING: Use this only with the Docker executor, if you use it with shell 
    # you will overwrite your user's SSH config. 
    - mkdir -p ~/.ssh 
    - '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config' 
    # In order to properly check the server's host key, assuming you created the 
    # SSH_SERVER_HOSTKEYS variable previously, uncomment the following two lines 
    # instead. 
    # - mkdir -p ~/.ssh 
    # - '[[ -f /.dockerenv ]] && echo "$SSH_SERVER_HOSTKEYS" > ~/.ssh/known_hosts' 
1

Là một người mới đến gitlab, tôi đã quản lý để hack một workaround cho vấn đề này như tôi cũng chưa tìm ra cách tích hợp để thay đổi mặc định quá trình nhân bản (mặc dù here is a recent comment about how it can be done).

Bằng disabling the automatic cloning process, bạn có thể ghi đè hoàn toàn hành vi của nó hoàn toàn bằng cách viết quy trình nhân bản của riêng bạn trong một before_script. Chỉ dành cho các mục đích của ví dụ nào cho thấy dưới đây làm thế nào để thực hiện điều này cho HTTP nhân bản nhưng có thể được điều chỉnh cho ssh nhân bản (if you're trying to use HTTP cloning you should use the built-in cloning process and the config.toml):

  1. Tạo một người dùng mới được gọi là "gitlab-Á hậu" và tạo ra auth người dùng của họ mã thông báo để sử dụng sau này (hoặc trong trường hợp của bạn, bạn sẽ tạo các khóa ssh).

  2. quá trình nhân bản Disable cho Á hậu bằng cách thêm biến sau đây trong cả hai thiết lập dự án hoặc nhóm của bạn: .../settings/ci_cd

    chính: GIT_STRATEGY

    giá trị: none

  3. Clone repo của bạn trong một before_script như vậy như:

 
before_script: 
    ## clean the working directory 
    - BUILD_DIR=/home/gitlab-runner/builds/$RUNNER_TOKEN/0 
    - CLONE_DIR="$BUILD_DIR/$CI_PROJECT_PATH" 
    - cd $BUILD_DIR 
    - rm -rf $CLONE_DIR 
    - mkdir -p $CLONE_DIR 

    ## clone the project each time (inefficient, consider performing fetch instead if it already exists) 
    - git clone http://gitlab-runner:[email protected]:8888/${CI_PROJECT_PATH}.git $CLONE_DIR 
    - cd $CLONE_DIR 

Lưu ý: Dưới đây là các biến có liên quan tôi cũng được cấu hình trong bước 2 chứ không phải là cứng mã hóa chúng trong kịch bản:

  • RUNNER_TOKEN: value "Runner Mã" được liệt kê trong quản trị "Runners" menu cho Á hậu cụ thể bạn đang cố gắng chạy.
  • GITLABRUNNER_USER_AUTH_TOKEN: Đây là dấu hiệu auth bạn đã tạo ở bước 1.

Ngoài ra, tôi mở một vấn đề trong gitlab cho expanding configuration of the runner cloning process.

Các vấn đề liên quan