我刚刚开始使用 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 SSH 主机密钥添加到运行器计算机上的已知主机文件中。具体方法如下:
通过 SSH 连接到运行 GitLab CI 管道的运行器计算机。
运行以下命令获取
gitlab.com
的 SSH 主机密钥指纹:
ssh-keyscan gitlab.com
此命令将输出
gitlab.com
的 SSH 主机密钥指纹。
复制
ssh-keyscan
命令的输出。
使用文本编辑器打开运行器计算机上的已知主机文件(通常位于
~/.ssh/known_hosts
)。
将复制的 SSH 主机密钥指纹粘贴到已知主机文件的末尾并保存文件。
重试您的 GitLab CI 管道。