无法将Git资源传递至Put方法:Concourse CI/CD管道排查
老哥,我帮你瞅了下你的Concourse管道配置,发现几个关键问题,直接导致你在Put步骤里找不到Git资源目录,咱们一个个来解决:
1. 脚本里的目录名纯纯拼写错了!
你在Put步骤的脚本里写的是 ls commit-vcode-etc,但你的Git资源明明叫 commit-etc 啊!这就好比你要找张三结果喊了李四的名字,肯定找不到啊😅。先把这行改成 ls commit-etc。
2. Get步骤多写了多余的参数
你的 get: commit-etc 步骤里加了 inputs: commit-etc,这完全是画蛇添足——inputs 参数根本不是用在 get 步骤里的,它是用来定义整个Job或者单个Step的输入依赖的。这个多余的参数可能会干扰Concourse的资源挂载逻辑,直接删掉这一行就行。
3. SSH资源的Path参数配置完全不对
你在Put步骤的params里写的path结构完全不符合这个SSH资源的用法,quay.io/henry40408/concourse-ssh-resource这个资源的path参数是用来指定远程主机上的工作目录的,格式就是普通的路径字符串(比如path: /opt/my-work-dir),不是你写的那种inputs/outputs嵌套结构。如果不需要指定远程目录,直接把整个path块删掉就行。
另外我得提醒你:这个SSH资源默认是在Concourse的Worker节点上执行脚本的,如果你想在远程主机上访问Git资源里的文件,得先把文件传到远程主机,再通过SSH命令去远程执行操作。比如你可以在脚本里加scp上传文件,再用ssh跑远程命令。
修复后的完整管道配置参考
resource_types: - name: ssh type: docker-image source: repository: quay.io/henry40408/concourse-ssh-resource resources: - name: rdt-blr-oc-1 type: ssh source: host: 10.xx.xx.xx user: user1 password: password1 - name: commit-etc type: git icon: gitlab source: uri: https://gitlab.com/etc.git username: ((ci_user)) password: ((ci_user_password)) branch: master jobs: - name: run_file_to_remote_host serial: true public: true plan: - get: commit-etc trigger: false - put: rdt-blr-oc-1 params: interpreter: /bin/sh # 如果需要指定远程主机的工作目录,取消注释并改成你的路径 # path: /opt/my-remote-work-dir script: | hostname; HOSTNAME=`hostname` echo "Create Unique directory. " # 修正拼写后的目录查询 ls commit-etc # 示例:把Git资源里的文件传到远程主机 # scp -r commit-etc/* user1@10.xx.xx.xx:/opt/target-dir/ # 示例:在远程主机上执行脚本 # ssh user1@10.xx.xx.xx "cd /opt/target-dir && ./your-script.sh"
补充说明
Concourse的每个Step都会在Worker上创建临时工作目录,Get到的资源会放在和资源同名的子目录里(也就是commit-etc),所以只要参数配置正确,Put步骤的脚本是可以直接访问这个目录的。如果你的需求是在远程主机上操作Git里的文件,一定要记得先把文件传过去,不然远程主机根本看不到Worker上的资源目录哦。
内容的提问来源于stack exchange,提问作者undefined

