1. 授权认证
  2. 获取用户个人信息
  3. 项目协同
  4. 代码托管
  5. 持续集成
  6. 制品仓库
  7. 测试管理
  1. 项目协同
  2. 代码仓库
  3. DevOps 实践之旅
  4. 一分钟开始持续集成之旅
  5. 持续部署
  6. 制品库

git-commit 提交规范

「git commit message」用于追踪代码提交历史,错误的提交信息会影响代码的可维护性。在多人协作开发场景下因个人风格各有不同,若无统一的规范则很容易导致混乱。

使用本地工具协助书写,提交合并请求通过持续集成强制检查,才允许合并入主干,进而实现规范化。

书写工具

全局安装 commitizen,即可使用 git cz 命令取代 git commit,提供交互式选择界面,协助书写。

npm install -g commitizen cz-conventional-changelog
echo '{ "path": "cz-conventional-changelog" }' > ~/.czrc

项目配置

在项目代码中通过 npm 安装 lint 工具(任何语言的项目都可以安装,比如 PHP、Java)。

npm install --save-dev @commitlint/cli @commitlint/config-conventional @commitlint/prompt cz-conventional-changelog husky

修改 package.json,即可实现本地提交前自动检查:

{
  "config": {
    "commitizen": {
      "path": "./node_modules/cz-conventional-changelog"
    }
  },
  "husky": {
    "hooks": {
      "commit-msg": "commitlint -E HUSKY_GIT_PARAMS"
    }
  },
  "devDependencies": {
    "@commitlint/cli": "^9.1.2",
    "@commitlint/config-conventional": "^11.0.0",
    "@commitlint/prompt": "^9.1.2",
    "cz-conventional-changelog": "^3.3.0",
    "husky": "^4.3.0"
  }
}

Jenkinsfile

在持续集成中使用下列代码,即可实现:合并请求时,对比当前分支和目标分支的 git log,进行增量检查。

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM',
          branches: [[name: '*']],
          userRemoteConfigs: [[url: env.GIT_REPO_URL, credentialsId: env.CREDENTIALS_ID]]
        ])
        script {
          if ( env.MR_SOURCE_BRANCH ==~ /.*/ ) {
            sh "git checkout ${env.MR_TARGET_BRANCH}"
            sh "git checkout ${env.MR_SOURCE_BRANCH}"
          } else {
            sh "git checkout ${env.GIT_COMMIT}"
          }
        }
      }
    }
    stage('安装依赖') {
      steps {
        sh 'npm install'
      }
    } 
    stage('增量检查 git commit') {
      when {
        expression { env.MR_SOURCE_BRANCH ==~ /.*/ }
      }
      steps {
        script {
          sh 'npm install'
          sh """logs=`git log --pretty=format:'%s' ${env.MR_TARGET_BRANCH}... --no-merges`;
          echo "\$logs" | while read i; do echo \$i | npx commitlint; done
          """
        }
      }
    }    
  }
}

创建合并请求时触发构建

运行结果

CI 运行不通过时报错:

上一篇PHP 代码规范
最近更新
感谢反馈有用
感谢反馈没用