Git+Jenkins之自动构建

来源:互联网 发布:两单片机串口通信实例 编辑:程序博客网 时间:2024/05/29 07:17


公司的服务端维护一份错误码文件:errorCode.json,同时客户端也需要根据这样一份错误码对用户进行提示,错误码Sample如下:

{"200": {"0": {"msg": "成功"}},"300": {"100": {"msg": "错误1"},"101": {"msg": "错误2"}}}

平时都是服务器的同学在群里说 “加了xxx协议,更新了错误码 -。-” 客户端的同学才会去errorCode.json所在的项目(项目计划)更新项目,然后复制出来放到自己的应用项目中。

这么操作,一来可能会让错误码更新不及时;二来这份文件返回的msg对用户并不友好,有时候需要我们手动设置对应的错误提示,代码中设置并不是一个好的选择,所以我们打算改造这份错误码,添加一些自定义的消息,如果存在自定义消息则使用自定义消息(这些不在本篇文章的讨论范围),改造后的json如下:

{"200": {"0": {"msg": "成功"}},"300": {"100": {"msg":  "错误1","cmsg": "这是给用户看的消息"},"101": {"msg": "错误2"}}}

然后就出现了这么一个需求:

自动更新我们项目中的errorCode.json文件,同时要把我们的自定义消息合并进去。

后来想想正好用git + jenkins hooks的方式:当有更新push到GitLab(我们内部使用的git管理平台)的时候,调用jenkins的project hook去自动执行相应的job,这个job是个shell脚本,有三步操作:

  1. update git project
  2. merge errorCode.json(此处是使用java做的,怎么方便怎么弄)
  3. push to git project

二、经过

安装插件

进入【插件管理】界面安装以下插件:

Git client plugin

Git plugin

GitLab Plugin

AnsiColor (可选)这个插件可以让Jenkins的控制台输出的log带有颜色(就和linux控制台那样)

配置本地Git环境和Jenkins

配置Git

  1. 先在Jenkins所在机器 安装Git

    安装好以后,添加git用户:

    git config --global user.name "jenkins"git config --global user.email "jenkins@your-company.com"

    PS:GitLab中需要有一个对应的jenkins账号,用来拉取代码

  2. 生成本地账号的ssh秘钥

    在命令行下(window下,使用Git Bash)进入主目录,执行以下命令:

    ssh-keygen -t rsa -C "jenkins@your-company.com"cat ~/.ssh/id_rsa.pub

    然后复制出公钥,添加到GitLab对应账号(jenkins)的SSH Keys中,这个公钥是为了让jenkins在拉取代码的时候有相应权限

  3. 生成jenkins的ssh秘钥

    在命令行下进入 jenkins的安装目录\.ssh ,执行以下命令:

    ssh-keygen -t rsacat id_rsa.pub

    然后复制出公钥,添加到GitLab对应账号(jenkins)的SSH keys中,这个公钥是为了让jenkins执行shell脚本时,如果shell脚本中有git命令,使其有拉取、提交代码的权限

配置Jenkins

  1. 在Jenkins中配置Git

    进入【 系统管理 】->【 系统设置 】

    • 设置使用的Git命令行

    • 配置Git账号

    • 配置Gitlab信息

    • API Token获取方式

  2. 在Jenkins中配置Git账号

    进入 【 Credentials 】->【 Global credentials(unrestricted 】->【 Add Credentials 】

添加Job

新建一个【 构建一个自由风格的软件项目 】的Job

  • 配置这个Job所用的Git项目信息

    这里的 Credentials 就是在配置Git账号中设置的账号; 如果不配置Git项目信息,Git Push之后这个Job不会自动执行

  • 配置触发器

    这里的圈出来的URL,需要配置到Gitlab对应项目的Web Hooks中

  • 配置errorCode所在项目的Web Hooks

    【 Gitlab 】->【 选择项目 】->【 Settings 】->【 Web Hooks 】

    设置只有在收到push消息时才自动执行jenkins的job

  • 配置构建环境(可选)

    shell脚本中如果会输出带颜色的文字,可以设置这个,使Jenkins的Web Console也输出相同的颜色

  • 配置执行的脚本并保存

update.sh脚本

#!/bin/bash##################################################################### 目录结构:# .../ErrorCode#        tools/#            ECode.jar           //用java写的转换json工具#            color.sh#            config.properties   //ECode.jar用的配置文件,配置json文件路径什么的#            update.sh#        plan_project/#            ....../clientErrorCode.json#        android_application_project/#            ....../clientErrorCode.json### 注意:#    需要把 ErrorCode/下的所有文件的所有者设置为jenkins,#    否则jenkins执行这个脚本的时候,会因为缺乏读写权限导致更新、提交git失败####################################################################source /Users/compile/ErrorCode/tools/color.shcd /Users/compile/ErrorCode/cd toolsechoBlue "update plan_project.."cd ../plan_projectgit pull origin masterif [ $? -ne 0 ]; then        echoError "update plan_project(clientErrorCode.json) from git failed"        exit 1fiechoBlue "update android_application_project.."cd ../android_application_projectgit checkout developgit pull origin developif [ $? -ne 0 ]; then        echoError "update android_application_project from git failed"        exit 1ficd ../toolsjava -jar ECode.jarif [ $? -eq 0 ]; then        cd ../android_application_project        git commit -am "update clientErrorCode.json by jenkins auto script"        if [ $?  -ne 0 ]; then                echoError "commit android_application_project failed"                exit 1        fi        git push origin develop        if [ $? -ne 0 ]; then                echoError "push android_application_project failed"                exit 1        fi        exit 0else        echoError "merge clientErrorCod.json failed"        exit 1fi

[color.sh] on Github

公司的服务端维护一份错误码文件:errorCode.json,同时客户端也需要根据这样一份错误码对用户进行提示,错误码Sample如下:

{"200": {"0": {"msg": "成功"}},"300": {"100": {"msg": "错误1"},"101": {"msg": "错误2"}}}

平时都是服务器的同学在群里说 “加了xxx协议,更新了错误码 -。-” 客户端的同学才会去errorCode.json所在的项目(项目计划)更新项目,然后复制出来放到自己的应用项目中。

这么操作,一来可能会让错误码更新不及时;二来这份文件返回的msg对用户并不友好,有时候需要我们手动设置对应的错误提示,代码中设置并不是一个好的选择,所以我们打算改造这份错误码,添加一些自定义的消息,如果存在自定义消息则使用自定义消息(这些不在本篇文章的讨论范围),改造后的json如下:

{"200": {"0": {"msg": "成功"}},"300": {"100": {"msg":  "错误1","cmsg": "这是给用户看的消息"},"101": {"msg": "错误2"}}}

然后就出现了这么一个需求:

自动更新我们项目中的errorCode.json文件,同时要把我们的自定义消息合并进去。

后来想想正好用git + jenkins hooks的方式:当有更新push到GitLab(我们内部使用的git管理平台)的时候,调用jenkins的project hook去自动执行相应的job,这个job是个shell脚本,有三步操作:

  1. update git project
  2. merge errorCode.json(此处是使用java做的,怎么方便怎么弄)
  3. push to git project

二、经过

安装插件

进入【插件管理】界面安装以下插件:

Git client plugin

Git plugin

GitLab Plugin

AnsiColor (可选)这个插件可以让Jenkins的控制台输出的log带有颜色(就和linux控制台那样)

配置本地Git环境和Jenkins

配置Git

  1. 先在Jenkins所在机器 安装Git

    安装好以后,添加git用户:

    git config --global user.name "jenkins"git config --global user.email "jenkins@your-company.com"

    PS:GitLab中需要有一个对应的jenkins账号,用来拉取代码

  2. 生成本地账号的ssh秘钥

    在命令行下(window下,使用Git Bash)进入主目录,执行以下命令:

    ssh-keygen -t rsa -C "jenkins@your-company.com"cat ~/.ssh/id_rsa.pub

    然后复制出公钥,添加到GitLab对应账号(jenkins)的SSH Keys中,这个公钥是为了让jenkins在拉取代码的时候有相应权限

  3. 生成jenkins的ssh秘钥

    在命令行下进入 jenkins的安装目录\.ssh ,执行以下命令:

    ssh-keygen -t rsacat id_rsa.pub

    然后复制出公钥,添加到GitLab对应账号(jenkins)的SSH keys中,这个公钥是为了让jenkins执行shell脚本时,如果shell脚本中有git命令,使其有拉取、提交代码的权限

配置Jenkins

  1. 在Jenkins中配置Git

    进入【 系统管理 】->【 系统设置 】

    • 设置使用的Git命令行

    • 配置Git账号

    • 配置Gitlab信息

    • API Token获取方式

  2. 在Jenkins中配置Git账号

    进入 【 Credentials 】->【 Global credentials(unrestricted 】->【 Add Credentials 】

添加Job

新建一个【 构建一个自由风格的软件项目 】的Job

  • 配置这个Job所用的Git项目信息

    这里的 Credentials 就是在配置Git账号中设置的账号; 如果不配置Git项目信息,Git Push之后这个Job不会自动执行

  • 配置触发器

    这里的圈出来的URL,需要配置到Gitlab对应项目的Web Hooks中

  • 配置errorCode所在项目的Web Hooks

    【 Gitlab 】->【 选择项目 】->【 Settings 】->【 Web Hooks 】

    设置只有在收到push消息时才自动执行jenkins的job

  • 配置构建环境(可选)

    shell脚本中如果会输出带颜色的文字,可以设置这个,使Jenkins的Web Console也输出相同的颜色

  • 配置执行的脚本并保存

update.sh脚本

#!/bin/bash##################################################################### 目录结构:# .../ErrorCode#        tools/#            ECode.jar           //用java写的转换json工具#            color.sh#            config.properties   //ECode.jar用的配置文件,配置json文件路径什么的#            update.sh#        plan_project/#            ....../clientErrorCode.json#        android_application_project/#            ....../clientErrorCode.json### 注意:#    需要把 ErrorCode/下的所有文件的所有者设置为jenkins,#    否则jenkins执行这个脚本的时候,会因为缺乏读写权限导致更新、提交git失败####################################################################source /Users/compile/ErrorCode/tools/color.shcd /Users/compile/ErrorCode/cd toolsechoBlue "update plan_project.."cd ../plan_projectgit pull origin masterif [ $? -ne 0 ]; then        echoError "update plan_project(clientErrorCode.json) from git failed"        exit 1fiechoBlue "update android_application_project.."cd ../android_application_projectgit checkout developgit pull origin developif [ $? -ne 0 ]; then        echoError "update android_application_project from git failed"        exit 1ficd ../toolsjava -jar ECode.jarif [ $? -eq 0 ]; then        cd ../android_application_project        git commit -am "update clientErrorCode.json by jenkins auto script"        if [ $?  -ne 0 ]; then                echoError "commit android_application_project failed"                exit 1        fi        git push origin develop        if [ $? -ne 0 ]; then                echoError "push android_application_project failed"                exit 1        fi        exit 0else        echoError "merge clientErrorCod.json failed"        exit 1fi

[color.sh] on Github

原创粉丝点击