GitHub Action中sed命令执行失败问题求助
解决GitHub Action中sed替换Cloud Run YAML占位符的错误
错误原因
你的sed命令默认用/作为替换操作的分隔符,但环境变量(比如IMAGE的值包含路径中的大量/)本身带有该符号,导致sed把这些/当成了替换命令的分隔符,进而无法正确解析表达式,抛出unknown option to 's'错误。
解决方案1:更换sed的分隔符
将sed命令的分隔符换成不会在环境变量中出现的字符(比如#、|),避免和变量里的/冲突。修改「Replace values in the YAML file」步骤的run部分:
run: | sed -i.bak "s#REGION#$REGION#g" cloud-run.yml sed -i.bak "s#SERVICE_ACCOUNT#$SERVICE_ACCOUNT#g" cloud-run.yml sed -i.bak "s#IMAGE#$IMAGE#g" cloud-run.yml sed -i.bak "s#PROJECT_ID#$PROJECT_ID#g" cloud-run.yml
解决方案2:用envsubst批量替换(更高效)
如果YAML里的占位符和环境变量名称完全一致,可以用envsubst工具一次性替换所有占位符,省去多次调用sed的麻烦:
- 先把Cloud Run YAML里的占位符改成
$REGION、$SERVICE_ACCOUNT、$IMAGE、$PROJECT_ID格式 - 修改GitHub Action步骤:
- name: Replace values in the YAML file env: REGION: ${{ secrets.SERVICE_REGION }} SERVICE_ACCOUNT: ${{ secrets.CLOUD_RUN_SERVICE_ACCOUNT }} IMAGE: ${{ secrets.GAR_LOCATION }}-docker.pkg.dev/${{ secrets.PROJECT_ID }}/ticketing-dev/tickets:${{ github.sha }} PROJECT_ID: ${{ secrets.PROJECT_ID }} run: | envsubst < cloud-run.yml > cloud-run-temp.yml mv cloud-run-temp.yml cloud-run.yml
如果不想修改原YAML的占位符格式,也可以指定要替换的变量:
envsubst '${REGION},${SERVICE_ACCOUNT},${IMAGE},${PROJECT_ID}' < cloud-run.yml > cloud-run-temp.yml
内容的提问来源于stack exchange,提问作者Robert Mihai
相关产品推荐
相关产品推荐

