zl程序教程

您现在的位置是:首页 >  其他

当前栏目

GitLabCICD实战----在.gitlab-ci.yml文件的步骤中使用git clone 另一个代码仓报错的解决办法

文件Git代码 报错 一个 实战 步骤 解决办法
2023-09-14 09:12:51 时间

更多信息请关注 个人网站

一、背景

在有些时候,比如在一个项目中,产品的代码是java代码仓,自动化测试脚本是python语言,单独存放的代码仓,在使用GitlabCICD构建流水线的时候有这样一种场景,比如对产品的java代码进行了编译打包部署,这个时候想在java代码仓的.gitlab-ci.yml中继续使用git clone python自动化脚本代码仓,这样虽然自动化测试脚本单独存放代码仓,却可以很好的集成到java产品代码仓的流水线中,执行完自动化测试后还能将测试结果上传到java产品的代码仓,从而达到完整的有机整体

但是在实际操作中,在执行git clone xxx的时候报如下错误

$ git clone git@xxxxxt.git
Cloning into 'summer_ospp_autotest'...
Host key verification failed.
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.

当然gitlabCICD流水线支持java代码仓触发python代码仓的trigger的方式,但是不能很好的将自动化用例的通过与否反馈到java代码仓中

二、原因分析

(1)手工的方式使用root用户登录gitlab-runner的虚拟机,然后执行git clone的方式是可以下载代码的(因为已经在gitlab上配置了公钥)
(2)GitLabCICD流水线执行的方式跟手工的方式几乎完全一样,不同的是gitlab流水线执行的时候是使用gitlab-runner的用户登录的

是的,gitlab流水线执行git clone失败的原因就是因为用户不同的原因,因为gitlab-runner用户是没有权限访问root用户的.ssh目录下的文件的

三、解决方案

(1)将root用户的 .ssh 文件下的所有文件都拷贝到 gitlab-runner用户下

cp /root/.ssh/* /home/gitlab-runner/.ssh/

(2)查看 gitlab-runner 用户下的 .ssh 文件下的文件的所属者及所属组,发现此时仍然属于root用户和root用户组

[root@192-168-8-104 ~]# ls -la /home/gitlab-runner/.ssh
total 16
drwx------.  2 gitlab-runner gitlab-runner   80 Nov 26 13:32 .
drwx------. 12 gitlab-runner gitlab-runner  192 Oct 26 15:46 ..
-rw-------.  1 root          root           565 Nov 26 13:32 authorized_keys
-rw-------.  1 root          root          1679 Nov 26 13:32 id_rsa
-rw-r--r--.  1 root          root           400 Nov 26 13:32 id_rsa.pub
-rw-r--r--.  1 root          root           373 Nov 26 13:32 known_hosts

(3)将 gitlab-runner 用户下的 .ssh 文件下的所有文件的所属者和所属组都划分给gitlab-runner

chown gitlab-runner /home/gitlab-runner/.ssh/*

chgrp gitlab-runner /home/gitlab-runner/.ssh/*

(4)再次查看,如下,表示已经OK了

[root@honghua-centos-02 ~]# ls -la /home/gitlab-runner/.ssh
total 12
drwx------  2 gitlab-runner gitlab-runner   57 Nov 25 16:06 .
drwx------ 10 gitlab-runner gitlab-runner  165 Nov 25 15:55 ..
-rw-------  1 gitlab-runner gitlab-runner 1679 Nov 25 16:06 id_rsa
-rw-r--r--  1 gitlab-runner gitlab-runner  400 Nov 25 16:06 id_rsa.pub
-rw-r--r--  1 gitlab-runner gitlab-runner  372 Nov 25 17:25 known_hosts

(5)再次触发gitlab流水线,此时即可以在.gitlab-ci.yml中使用git clone 的方式下载子库的代码了

如下即为一个java代码仓的.gitlab-ci.yml中的测试步骤,去自动化测试脚本仓下载代码,然后执行用例,执行完成后将自动化结果上传到java代码仓的流水线,如此就能很好的做到开发人员提交代码后即能看到用例通过情况
在这里插入图片描述

Gitlab安装部署----CentOS7系统

Gitlab安装部署----Docker方式

Gitlab安装部署----安装注册Gitlab Runner

Gitlab安装部署----卸载Gitlab Runner

GitLabCICD实战----在.gitlab-ci.yml文件的步骤中使用git clone 另一个代码仓报错的解决办法