GitHub Actions执行kubectl步骤报语法错误的排查与修复求助
GitHub Actions中kubectl部署报错排查与修复
报错信息
Run steebchen/kubectl@v2.0.0 /usr/bin/docker run --name c84860f61e3163354304ab2d0b753ecef9fd_7e2fa2 --label 55c848 --workdir /github/workspace --rm -e "INPUT_CONFIG" -e "INPUT_COMMAND" -e "INPUT_VERSION" -e "HOME" -e "GITHUB_JOB" -e "GITHUB_REF" -e "GITHUB_SHA" -e "GITHUB_REPOSITORY" -e "GITHUB_REPOSITORY_OWNER" -e "GITHUB_REPOSITORY_OWNER_ID" -e "GITHUB_RUN_ID" -e "GITHUB_RUN_NUMBER" -e "GITHUB_RETENTION_DAYS" -e "GITHUB_RUN_ATTEMPT" -e "GITHUB_REPOSITORY_ID" -e "GITHUB_ACTOR_ID" -e "GITHUB_ACTOR" -e "GITHUB_TRIGGERING_ACTOR" -e "GITHUB_WORKFLOW" -e "GITHUB_HEAD_REF" -e "GITHUB_BASE_REF" -e "GITHUB_EVENT_NAME" -e "GITHUB_SERVER_URL" -e "GITHUB_API_URL" -e "GITHUB_GRAPHQL_URL" -e "GITHUB_REF_NAME" -e "GITHUB_REF_PROTECTED" -e "GITHUB_REF_TYPE" -e "GITHUB_WORKFLOW_REF" -e "GITHUB_WORKFLOW_SHA" -e "GITHUB_WORKSPACE" -e "GITHUB_ACTION" -e "GITHUB_EVENT_PATH" -e "GITHUB_ACTION_REPOSITORY" -e "GITHUB_ACTION_REF" -e "GITHUB_PATH" -e "GITHUB_ENV" -e "GITHUB_STEP_SUMMARY" -e "GITHUB_STATE" -e "GITHUB_OUTPUT" -e "RUNNER_OS" -e "RUNNER_ARCH" -e "RUNNER_NAME" -e "RUNNER_ENVIRONMENT" -e "RUNNER_TOOL_CACHE" -e "RUNNER_TEMP" -e "RUNNER_WORKSPACE" -e "ACTIONS_RUNTIME_URL" -e "ACTIONS_RUNTIME_TOKEN" -e "ACTIONS_CACHE_URL" -e GITHUB_ACTIONS=true -e CI=true -v "/var/run/docker.sock":"/var/run/docker.sock" -v "/home/runner/work/_temp/_github_home":"/github/home" -v "/home/runner/work/_temp/_github_workflow":"/github/workflow" -v "/home/runner/work/_temp/_runner_file_commands":"/github/file_commands" -v "/home/runner/work/texhub-web/texhub-web":"/github/workspace" 55c848:60f61e3163354304ab2d0b753ecef9fd "latest" "***" "set image --record deployment/texhub-web texhub-web=***/reddwarf-pro/texhub-web:81ac2189d08024b5d9ab6be6dd69c8117d765e33 -n reddwarf-pro" using kubectl@v1.28.3 /usr/local/bin/kubectl: line 1: syntax error: unexpected redirection
本地环境验证
本地kubectl可正常访问集群namespace:
> kubectl get ns NAME STATUS AGE ambassador Active 655d calico-apiserver Active 16d calico-system Active 16d default Active 2y77d kube-node-lease Active 2y77d kube-public Active 2y77d kube-system Active 2y77d lens-metrics Active 153d reddwarf-cache Active 2y76d reddwarf-monitor Active 430d reddwarf-pro Active 2y76d reddwarf-storage Active 2y76d reddwarf-toolbox Active 671d sre Active 2y75d tigera-operator Active 16d
GitHub Actions配置
近期未修改配置,相关部署步骤如下:
- name: deploy to cluster uses: steebchen/kubectl@v2.0.0 with: # defaults to latest kubectl binary version config: ${{ secrets.KUBE_CONFIG_DATA }} command: set image --record deployment/texhub-web texhub-web=registry.cn-hongkong.aliyuncs.com/reddwarf-pro/texhub-web:${{ github.sha }} -n reddwarf-pro
问题原因
报错/usr/local/bin/kubectl: line 1: syntax error: unexpected redirection表明,steebchen/kubectl@v2.0.0 action在下载或生成kubectl可执行文件时出现异常,导致该文件内容为无效的shell脚本(包含错误的重定向语法),而非合法的kubectl二进制程序。即使未修改Actions配置,也可能因为该第三方action的镜像更新、kubectl下载源变更等外部因素触发此问题。
修复方案
- 指定固定kubectl版本:在action的
with参数中添加明确的kubectl版本,避免使用默认的latest,选择与本地环境兼容的版本(比如v1.27.0):- name: deploy to cluster uses: steebchen/kubectl@v2.0.0 with: config: ${{ secrets.KUBE_CONFIG_DATA }} version: "v1.27.0" command: set image --record deployment/texhub-web texhub-web=registry.cn-hongkong.aliyuncs.com/reddwarf-pro/texhub-web:${{ github.sha }} -n reddwarf-pro - 替换为官方稳定action:改用Kubernetes官方维护的action,避免第三方action的潜在问题:
- name: Set up kubectl uses: kubernetes/actions/setup-kubectl@v0.2.0 with: version: 'v1.27.0' - name: Prepare kubeconfig run: | echo "${{ secrets.KUBE_CONFIG_DATA }}" | base64 -d > /tmp/kubeconfig echo "KUBECONFIG=/tmp/kubeconfig" >> $GITHUB_ENV - name: Deploy to cluster run: kubectl set image --record deployment/texhub-web texhub-web=registry.cn-hongkong.aliyuncs.com/reddwarf-pro/texhub-web:${{ github.sha }} -n reddwarf-pro - 手动安装kubectl:在步骤中直接下载并安装kubectl,完全控制安装过程:
- name: Install kubectl run: | curl -LO "https://dl.k8s.io/release/v1.27.0/bin/linux/amd64/kubectl" chmod +x kubectl sudo mv kubectl /usr/local/bin/ - name: Prepare kubeconfig run: | echo "${{ secrets.KUBE_CONFIG_DATA }}" | base64 -d > /tmp/kubeconfig echo "KUBECONFIG=/tmp/kubeconfig" >> $GITHUB_ENV - name: Deploy to cluster run: kubectl set image --record deployment/texhub-web texhub-web=registry.cn-hongkong.aliyuncs.com/reddwarf-pro/texhub-web:${{ github.sha }} -n reddwarf-pro
内容的提问来源于stack exchange,提问作者Dolphin
相关产品推荐
相关产品推荐

