GitLab CI/CD 如何在script字段中执行多行SSH远程命令
解决方法
你可以直接使用YAML的多行字面量语法|保留命令的换行格式,完整写入script字段即可,最终配置示例如下:
deploy-to-stage: stage: deploy before_script: - "which ssh-agent || ( apt-get update -y && apt-get install openssh-client -y )" - eval $(ssh-agent -s) - echo "$SSH_PRIVATE_KEY" | tr -d '\r' | ssh-add - > /dev/null - mkdir -p ~/.ssh - chmod 700 ~/.ssh - echo "$SSH_KNOWN_HOSTS" > ~/.ssh/known_hosts - chmod 644 ~/.ssh/known_hosts - docker login -u gitlab-ci-token -p $CI_JOB_TOKEN registry.gitlab.com script: - | ssh $DEPLOY_USER@$DEPLOY_HOST <<'ENDSSH' set -x -o verbose; execute some command here set +x ENDSSH
注意事项
- 提前在GitLab项目的「设置→CI/CD→变量」页面添加
DEPLOY_USER、DEPLOY_HOST两个变量,和你已配置的SSH_PRIVATE_KEY、SSH_KNOWN_HOSTS权限配置保持一致即可 - 示例中
<<'ENDSSH'加了单引号,代表代码块内的变量会在远程服务器环境解析,不会提前在CI任务本地替换;如果需要把CI侧的变量传入远程命令执行,把单引号删除改为<<ENDSSH即可,此时需要保留在远程解析的变量要加转义符,例如\$remote_server_var
内容的提问来源于stack exchange,提问作者Santhosh
相关产品推荐
相关产品推荐

