在提交之前验证属性/ YAML文件中的值

时间:2016-10-12 05:23:23

标签: java spring git

我正在寻求有关如何确保不覆盖属性/ YAML文件中某些值的帮助。

例如,我有一个Spring Boot项目和一个具有以下属性的properties.yml

spring:
  datasource:
    url: ${jdbc.url:}
    username: ${jdbc.username:}
    password: ${jdbc.password:}

在Spring中,url属性的值来自环境变量JDBC_URLJDBC.URL

我们有一组开发人员正在研究这个项目。一些开发人员倾向于只对文件中的值进行硬编码,因为它快速而简单。

spring:
  datasource:
    url: jdbc:mysql://localhost:32768/master
    username: root
    password: password

通常,当他们提交代码时,这些更改通常也会被提交,我认为这是件坏事。因此,我不应该依赖开发人员保持警惕,而是如何确保阻止这种情况发生?

请记住,有时会出现修改属性/ YAML文件的合理原因,例如添加新属性。

spring:
  datasource:
    url: jdbc:mysql://localhost:32768/master # should NOT be allowed
    username: root                           # should NOT be allowed
    password: password                       # should NOT be allowed
new:
    property: value                          # should be allowed

我的第一个想法是对属性/ YAML文件使用单元测试。如果有新属性需要验证,它将为我提供扩展的灵活性。这会阻止单元测试阶段传递,从而有助于防止合并到master分支,但它不会阻止提交。

我不确定下一步该怎么做。任何帮助是极大的赞赏。如果有帮助,该项目是一个Spring Boot应用程序,并使用Java和Gradle。远程存储库是GitHub。

1 个答案:

答案 0 :(得分:1)

以下预提交钩子不是很优雅(理想情况下,我会喜欢能够将YAML文件读入可以查询的结构的东西),但这是一个很好的起点。

步骤:

  1. 使用以下内容创建.git/hooks/pre-commit
  2. 
        disallowed="localhost root password"
    
        git diff --cached --name-status | while read x file; do
                if [ "$x" == 'D' ]; then continue; fi
                for word in $disallowed
                do
                    if egrep $word $file ; then
                        echo "ERROR: Disallowed expression \"${word}\" in file: ${file}"
                        exit 1
                    fi
                done
        done || exit $?
    
    1. 更改权限
    2. chmod 755 .git/hooks/pre-commit

      1. 然后尝试提交无效的YAML文件。这是我的测试显示的内容:
      2. 
        $ cat validate-this.yml
            spring:
        datasource:
                url: jdbc:mysql://localhost:32768/master
                username: root
                password: password
            new:
                property: value
        
        $ git add validate-this.yml
        
        
        $ git commit -m "Commit should not be allowed"
            url: jdbc:mysql://localhost:32768/master # should NOT be allowed
        ERROR: Disallowed expression "localhost" in file: validate-this.yml