如何在Spring Boot构建部署前注入GitHub Secrets到application.properties
GitHub Action 注入Spring Boot配置到Heroku部署方案
你之前直接在Heroku部署Action的with块中追加application.properties格式配置不生效,原因是第三方Action的输入参数仅支持它预先定义的字段,不会自动识别自定义配置项。以下两种方案均可实现需求:
方案一:Spring Boot环境变量自动映射(推荐)
该方案无需修改本地配置文件,符合配置与代码分离的最佳实践:
Spring Boot原生支持配置宽松绑定,系统环境变量会自动映射到对应配置项,映射规则为:
- 配置项中的
.替换为_ - 所有字母转为大写
你需要的三个数据库配置对应环境变量如下: spring.datasource.url→SPRING_DATASOURCE_URLspring.datasource.username→SPRING_DATASOURCE_USERNAMEspring.datasource.password→SPRING_DATASOURCE_PASSWORD
你使用的AkhileshNS/heroku-deploy Action提供了heroku_config_vars参数,可直接传递自定义环境变量到Heroku运行环境。Spring Boot读取配置时环境变量优先级高于application.properties文件内的配置,会自动覆盖文件中的空值。
修改后的完整工作流配置:
name: Heroku deployment on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 - name: Deploy to Heroku uses: AkhileshNS/heroku-deploy@v3.12.12 with: heroku_api_key: ${{secrets.HEROKU_API_KEY}} heroku_email: ${{secrets.HEROKU_EMAIL}} heroku_app_name: event-handler # 注入数据库配置为Heroku环境变量 heroku_config_vars: | SPRING_DATASOURCE_URL=${{ secrets.SPRING_DATASOURCE_URL }} SPRING_DATASOURCE_USERNAME=${{ secrets.SPRING_DATASOURCE_USERNAME }} SPRING_DATASOURCE_PASSWORD=${{ secrets.SPRING_DATASOURCE_PASSWORD }}
提前在GitHub项目的Secrets页面添加对应三个数据库配置的密钥即可,本地
application.properties里的空值无需修改,开发环境可自行填写本地数据库连接参数,生产环境会自动被Heroku环境变量覆盖。
方案二:CI流程中直接写入application.properties文件
如果有特殊场景必须将配置值写入项目内的配置文件再部署,可在代码检出后、部署前新增Shell步骤,将Secret值写入配置文件:
name: Heroku deployment on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 # 写入数据库配置到application.properties - name: Inject database config run: | sed -i "s|spring.datasource.url=|spring.datasource.url=${{ secrets.SPRING_DATASOURCE_URL }}|g" src/main/resources/application.properties sed -i "s|spring.datasource.username=|spring.datasource.username=${{ secrets.SPRING_DATASOURCE_USERNAME }}|g" src/main/resources/application.properties sed -i "s|spring.datasource.password=|spring.datasource.password=${{ secrets.SPRING_DATASOURCE_PASSWORD }}|g" src/main/resources/application.properties - name: Deploy to Heroku uses: AkhileshNS/heroku-deploy@v3.12.12 with: heroku_api_key: ${{secrets.HEROKU_API_KEY}} heroku_email: ${{secrets.HEROKU_EMAIL}} heroku_app_name: event-handler
这里用
sed命令直接替换原有配置文件里的空值,不会产生重复配置项,比直接追加内容更稳妥。
内容的提问来源于stack exchange,提问作者Simone Lungarella
相关产品推荐
相关产品推荐

