git还没有合并再请求pull_Jenkins Pipeline结合github拉取请求自动进行项目发布(CI/CD)...

由于准备发布所需的步骤较多,软件项目的发布过程需要一段时间,并且容易出现人为错误。通过Jenkins Pipeline自动执行某些步骤来简化发布流程将会大大改善发布的工作流程,这种业界一般称为自动持续集成和自动持续部署(CI/CD),一般来说可以结合Jenkins和Github结合来完成,当然如果是私有仓库用的是gitlab做的话,gitlab自有一套强大的CI/CD流程,在自己体系内就可以完成,而无需Jenkins来做了,以后有机会虫虫会和大家一起探讨gitlab的ci/cd功能。

Jenkins Pipeline(或者简称为"Pipeline",带有大写字母"P")是一套插件,支持在Jenkins中实施和集成持续交付的流程。

今天虫虫和大家一起分享一个通过使用Jenkins Pipeline自动创建进行版本发布的过程。

Pull请求管道的发布

通过以下步骤发布pull请求管道监视开发分支的所有提交:

1)创建一个release /x.y.z分支,其版本相应地更新。

2)在GitHub上创建一个pull请求,将通过变化日志文件(changelog)对版本变化做更新描述,并将Galleon Dev团队添加为审阅者

3)通知我们公司Slack中特定的#channel,新的发布拉取请求已准备好进行审查。

安装设置

Jenkins设置

1)在服务器上安装Jenkins。

2)在Jenkins上安装下面的这些插件

Blue Ocean、Global Slack Notifier Plugin、Pipeline、Pipeline Groovy Libraries、SSH Agent、SSH、SSH Slaves、Workspace Cleanup

3)在服务器上安装[email protected]并确保它可以用jenkins用户进行访问。

hub命令允许jenkins用户在shell中创建请求。

4)在Jenkins凭证上创建以下凭证(凭证ID应符合以下规定):

github-machine-user用户名/密码

github-machine-user-token 加密文本

slack-integration-token加密文本

5)在Manage Jenkins的管理后台\Configure System中配置Global Slack Notifier Settings,配置如下图所示:

测试连接并检查通道:

GitHub设置

为了让Pipeline捕获仓库中的事件(例如push),应该在GitHub上正确设置Jenkins GitHub webhook。

在Payload URL中设置xxx/github-webhook/,如下所示:

Jenkins Pipeline设置

1) 创建一个新的Pipeline。点击New item,输入item名称,选择pipeline类型。

2) 填写基本的通用标签页的字段,如下图所示:

3) 为pipeline添加一个VERSION_BUMP构建参数

自动构建通过PATCH(x.x.1)提升版本。拥有此参数将允许MINOR x.1.x版本增加手动构建。

4)将构建触发器设置GitHub hook触发器为GITScm轮询

5)设置Pipeline字段

从SCM中选择Pipeline脚本并填写如下所示的字段:

确保在分支说明符中设置了正确的开发分支,并在脚本路径中设置了正确的Jenkins路径

结果

我在两个仓库中部署了pipline。开发人员就可以不必手动创建发布拉取请求,而只需push版本到开发分支,而pipeline将自动创建发布拉取请求,进行项目的build和发布。这也可以减少产品发布时与Git相关的人为错误。

遇到的问题

1、使用git pull-request或hub pull-request来自动创建合并请求。

团队用来创建pull请求的当前方法是使用来自git-extras的git pull-request。但是这种方法有一个提示,要求输入GitHub密码,当在shell脚本自动执行命令时会有问题。另一个问题是,git pull-reques是从git config中的user.email配置项中获取电子邮件。

我尝试了一种解决方法:echo ${password}|git pull-request master,但它好像在Jenkinsfile无法工作。考虑到我还需要添加审阅者,因此我放弃了git pull-request,因为它不支持这个功能。

我试过hub,它似乎是一个更好的选择,因为可以通过-r参数添加审阅者,并且可以使用OAuth令牌通过HTTPS进行身份验证。

由于hub拉取请求通过在用户$HOMEdirectory中创建一个./config/hub文件来缓存身份验证令牌,我意识到我可以使用pipeline编写配置文件来使用我们的机器用户的OAuth令牌来验证集线器拉取请求,配置如下所示:

withCredentials([

string(credentialsId: env.GITHUB_MACHINE_USER_TOKEN, variable: 'token'),

usernamePassword(credentialsId: env.GITHUB_MACHINE_USER_PASS, passwordVariable: 'password', usernameVariable: 'username')]) {

writeFile file: env.HUB_CONFIG, text: """github.com:

- user: ${username}

oauth_token: ${token}

protocol: https"""

}

2、添加团队审阅者以发布合并请求

根据hub维护官方说法,添加团队审阅人员通过hub pull -request -r /提取请求尚未包含在任何软件包中。他在master分支中:

因此,审阅者从Jenkins配置文件中添加,如下所示:

// Get reviewers from config

configFileProvider([

configFile(fileId: env.REVIEWERS, variable: 'reviewers')]) {

pullRequestMessage = getPullRequestMessage()

createPullRequest = "hub pull-request -m '${pullRequestMessage}' -b ${PRODUCTION_BRANCH} -h ${releaseBranch} -r ${readFile(reviewers)}"

pullRequestUrl = sh(returnStdout: true, script: createPullRequest).trim()

}

也是为什么使用hub的2.3.0-pre10版本的原因,因为它是hub中的唯一允许通过-r选项添加审阅者的版本。

你可能感兴趣的:(git还没有合并再请求pull)