You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitHub Actions中Liquibase连接RDS Postgres端口转发失败排查

GitHub Actions中通过堡垒机连接RDS执行Liquibase Update的问题与解决

问题背景

需要在GitHub Workflow中执行Liquibase Update操作,目标数据库是位于AWS私有子网内的RDS Postgres实例,必须通过堡垒机才能从外部访问,本地使用Putty可正常连接该数据库。

最初的Workflow配置

最初的Job包含两个独立步骤:

- name: Set up port forwarding
    run: |
      mkdir -p ~/.ssh/
      echo "$(aws ssm get-parameter --name ${{ env.BASTION_KEY_SSM_PARAMETER_NAME }} --output text --query 'Parameter.Value')" > ~/.ssh/id_rsa
      chmod 600 ~/.ssh/id_rsa
      echo "$(ssh-keyscan -p 22 ${{ env.BASTION_FQDN }})" >> ~/.ssh/known_hosts
      ssh -fN -v -L 15432:${{ env.DATABASE_ENDPOINT }} ubuntu@${{ env.BASTION_FQDN }}

  - uses: liquibase-github-actions/update@v4.23.1
    with:
      changelogFile: "./liquibase/changelog.xml"
      url: "jdbc:postgresql://127.0.0.1:15432/mydatabase"
      username: ${{ env.DATABASE_USER }}
      password: ${{ env.DATABASE_USER_PASSWORD }}
      logLevel: FINE

问题现象

第一步日志显示已成功建立端口转发,将本地15432端口映射到RDS实例地址并正常监听;添加测试步骤后确认SSH进程确实在监听该端口。但第二步执行Liquibase官方Action时,始终报错无法连接127.0.0.1:15432。经进一步验证,SSH隧道本身功能正常,问题根源是Liquibase Action无法访问该隧道。

解决方案

将端口转发、Liquibase安装与命令执行合并到同一个步骤中,直接使用Liquibase CLI调用update命令,最终成功完成数据库更新。完整可用代码如下:

- name: Run Liquibase
  run: |
    password=$(aws secretsmanager get-secret-value --secret-id ${{ env.TF_DATABASE_USER_SECRET }} --output text --query 'SecretString' | jq -r '.password')
    echo "::add-mask::$password"          

    mkdir -p ~/.ssh/
    echo "$(aws ssm get-parameter --name ${{ env.TF_BASTION_KEY_SSM_PARAMETER_NAME }} --output text --query 'Parameter.Value')" > ~/.ssh/id_rsa
    chmod 600 ~/.ssh/id_rsa
    echo "$(ssh-keyscan -p 22 ${{ env.TF_BASTION_FQDN }})" >> ~/.ssh/known_hosts
    ssh -fN -L 15432:${{ env.TF_DATABASE_ENDPOINT }} ubuntu@${{ env.TF_BASTION_FQDN }}

    wget -O- https://repo.liquibase.com/liquibase.asc | gpg --dearmor > liquibase-keyring.gpg && \
    cat liquibase-keyring.gpg | sudo tee /usr/share/keyrings/liquibase-keyring.gpg > /dev/null && \
    echo 'deb [arch=amd64 signed-by=/usr/share/keyrings/liquibase-keyring.gpg] https://repo.liquibase.com stable main' | sudo tee /etc/apt/sources.list.d/liquibase.list

    sudo apt-get update
    sudo apt-get install liquibase

    export LIQUIBASE_COMMAND_CHANGELOG_FILE=".\liquibase\changelog.xml"
    export LIQUIBASE_COMMAND_URL=jdbc:postgresql://localhost:15432/mydatabase
    export LIQUIBASE_COMMAND_USERNAME=${{ env.TF_DATABASE_USER }}
    export LIQUIBASE_COMMAND_PASSWORD=$password
    export LIQUIBASE_LOG_LEVEL=FINE

    liquibase update

内容的提问来源于stack exchange,提问作者user2691402

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 10:45:54