一、背景
在有些时候,比如在一个项目中,产品的代码是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用户组
ls -la /home/gitlab-runner/.ssh
(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 ~]
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代码仓的流水线,如此就能很好的做到开发人员提交代码后即能看到用例通过情况
|