复制路径中的项目文件和子组中的项目

问题描述 投票:0回答:1

我刚刚开始使用 GitLab,我的老板要求我使用 GitLab CI 启动一个管道,该管道进入组/子组,然后克隆内部的所有内容、项目文件、子组、子项目和子组,直到路径结束。我在空项目存储库中使用 -gitlab-ci.yml 来尝试执行此操作,而不与源组或目标组关联。当推送到目标组时,我一直遇到主机验证错误。我知道我访问源子组的方法工作正常,因为我可以回显里面的内容,并且可以在作业执行日志中读取它。我在下面添加了我的代码以供参考,我将不胜感激。我一直被主机验证困扰

stages:
  - list_files

variables:
  SOURCE_GROUP_ID: "########"
  DESTINATION_GROUP_ID: "########"  # Replace with your destination group ID
  ACCESS_TOKEN: $GROUP_ACCESS_TOKEN

list_files:
  stage: list_files
  before_script:
    - apt-get update -y
    - apt-get install -y jq
    - git config --global user.email $MY_EMAIL
    - git config --global user.name $MY_USER_NAME
  script:
    - |
      function list_subgroups_and_projects {
        local source_group_id=$1
        local destination_group_id=$2
        local source_group_name=$(curl --header "PRIVATE-TOKEN:$ACCESS_TOKEN" "https://gitlab.com/api/v4/groups/$source_group_id" | jq -r '.name')
        echo "Subgroups and projects in group: $source_group_name"
        # List projects in current group
        echo "Projects in group $source_group_name:"
        projects=$(curl --header "PRIVATE-TOKEN:$ACCESS_TOKEN" "https://gitlab.com/api/v4/groups/$source_group_id/projects" | jq -r '.[].ssh_url_to_repo')
        for project in $projects; do
          echo "Cloning project: $project"
          git clone $project;
          project_name=$(basename $project .git)
          pushd $project_name
          echo "Pushing project $project_name to destination group"
          git remote set-url origin [email protected]:$DESTINATION_GROUP_ID/$project_name.git
          git push origin master
          popd
        done
        # List subgroups
        echo "Subgroups in group $source_group_name:"
        subgroups=$(curl --header "PRIVATE-TOKEN:$ACCESS_TOKEN" "https://gitlab.com/api/v4/groups/$source_group_id/subgroups" | jq -r '.[].id')
        for subgroup_id in $subgroups; do
          list_subgroups_and_projects $subgroup_id $destination_group_id
        done
      }

    - list_subgroups_and_projects "$SOURCE_GROUP_ID" "$DESTINATION_GROUP_ID"

请帮我找到主机验证失败的解决方案。

gitlab push git-clone gitlab-api
1个回答
0
投票

要解决此问题,您可以将 GitLab SSH 主机密钥添加到运行器计算机上的已知主机文件中。具体方法如下:

  1. 通过 SSH 连接到运行 GitLab CI 管道的运行器计算机。

  2. 运行以下命令获取

    gitlab.com
    的 SSH 主机密钥指纹:

    ssh-keyscan gitlab.com
    

    此命令将输出

    gitlab.com
    的 SSH 主机密钥指纹。

  3. 复制

    ssh-keyscan
    命令的输出。

  4. 使用文本编辑器打开运行器计算机上的已知主机文件(通常位于

    ~/.ssh/known_hosts
    )。

  5. 将复制的 SSH 主机密钥指纹粘贴到已知主机文件的末尾并保存文件。

  6. 重试您的 GitLab CI 管道。

© www.soinside.com 2019 - 2024. All rights reserved.