GitHub Action安装Flyway CLI后文件缺失问题求助
问题分析与解决方案
问题根源
- 步骤顺序错误:你先将Flyway安装到工作目录,再执行
actions/checkout。而checkout默认会清空当前工作目录并克隆仓库代码,导致之前生成的flyway-9.21.1文件夹被删除。 - PATH环境变量设置无效:单独执行
run: PATH=/flyway:$PATH仅在当前shell会话中生效,无法传递到后续步骤。 - 多Job环境隔离:GitHub Action的每个Job运行在独立虚拟机中,第一个Job的Flyway安装不会共享给第二个Job,直接调用
flyway必然失败。
修正后的Action配置
name: "Development deploy" on: push: branches: - development env: SQLFLUFF_DIALECT: postgres DOCKER_IMAGE: redgate/flyway SCHEMAS: etslips jobs: Re-build: name: Re-build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3.0.0 - name: Set up Java uses: actions/setup-java@v2 with: java-version: "11" distribution: "temurin" - name: Download and Install Flyway CLI run: | wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/9.21.1/flyway-commandline-9.21.1-linux-x64.tar.gz | tar -xvz ln -s $(pwd)/flyway-9.21.1/flyway /usr/local/bin/flyway # 验证安装有效性 flyway -v - name: LS run: ls ./ - name: Clean run: flyway clean -url="${{ secrets.DB_BUILD_URL }}" -user="${{ secrets.DB_BUILD_USERNAME}}" -password="${{ secrets.DB_BUILD_PASSWORD}}" -schemas="${{ env.SCHEMAS }}" -cleanDisabled=false - name: Migrate run: flyway migrate -url="${{ secrets.DB_BUILD_URL }}" -user="${{ secrets.DB_BUILD_USERNAME}}" -password="${{ secrets.DB_BUILD_PASSWORD}}" -schemas="${{ env.SCHEMAS }}" -outOfOrder=false - name: Info run: flyway info -url="${{ secrets.DB_BUILD_URL }}" -user="${{ secrets.DB_BUILD_USERNAME}}" -password="${{ secrets.DB_BUILD_PASSWORD}}" -schemas="${{ env.SCHEMAS }}" -outOfOrder=false Development-deploy: name: Development deployment needs: Re-build runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v3.0.0 - name: Set up Java uses: actions/setup-java@v2 with: java-version: "11" distribution: "temurin" - name: Download and Install Flyway CLI run: | wget -qO- https://repo1.maven.org/maven2/org/flywaydb/flyway-commandline/9.21.1/flyway-commandline-9.21.1-linux-x64.tar.gz | tar -xvz ln -s $(pwd)/flyway-9.21.1/flyway /usr/local/bin/flyway - name: Info run: flyway info -url="${{ secrets.DB_DEV_URL }}" -user="${{ secrets.DB_DEV_USERNAME}}" -password="${{ secrets.DB_DEV_PASSWORD}}" -schemas="${{ env.SCHEMAS }}" -outOfOrder=false - name: Migrate run: flyway migrate -url="${{ secrets.DB_DEV_URL }}" -user="${{ secrets.DB_DEV_USERNAME}}" -password="${{ secrets.DB_DEV_PASSWORD}}" -schemas="${{ env.SCHEMAS }}" -outOfOrder=false - name: Info run: flyway info -url="${{ secrets.DB_DEV_URL }}" -user="${{ secrets.DB_DEV_USERNAME}}" -password="${{ secrets.DB_DEV_PASSWORD}}" -schemas="${{ env.SCHEMAS }}" -outOfOrder=false
关键修改说明
- 调整步骤顺序:先拉取仓库代码,再安装Flyway,避免
checkout清空工作目录导致Flyway文件丢失。 - 简化命令调用:通过软链接将
flyway命令加入/usr/local/bin(该目录已在系统默认PATH中),后续直接使用flyway命令即可,无需指定路径。 - 第二个Job补充安装步骤:由于Job间环境完全隔离,第二个Job必须重新安装Flyway才能执行相关操作。
- 移除无效PATH设置:软链接到系统默认可执行目录已足够让系统找到
flyway命令,无需额外设置PATH。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

