GitHub + VSTS 开源代码双向同步

GitHub已是全球开源代码的大本营了,经过如下统计你能够看到仅仅javascript在github就有超过32万个活动的repo。不少开发人员都会把本身的一部分代码分享到github上进行开源,一方面能够提升本身在编程领域的知名度,也能够吸引其余的开发人员帮助你一块儿改进,固然还能够认识更多的朋友,要不怎么说github实际上是个交友网站呢。javascript

github-code-stats

可是github上免费的repo只能是公开的,对于一些咱们不但愿彻底开源的项目,就没有办法免费分享了,固然你能够付费升级到专业版,这样就能够托管私有repo了。java

Visual Studio Team System是微软提供的免费的企业级软件开发Saas服务,提供免费的私有git repo服务。我周围的不少朋友都将本身或者公司的项目托管在VSTS上,其中也有一部分是开源的。git

结合GitHub免费的公有repo和VSTS上免费的私有repo,咱们能够搭建一套内外结合的开源代码开发平台,让咱们能够控制哪些代码开源,同时接受社区对开源代码的贡献。常见场景主要有:github

  • 将私有的repo的master分支与公有repo的master分支进行双向同步,支持主要发行版与社区的分享,接受PR。
  • 将私有repo的特定分支与公有repo的master分支进行双向同步,支持特定发行版与社区的分享,接受PR;在内部通过新一轮PR后并入私有master分支。
  • 支持私有发行版与公有发行版的差别化发布。
  • 支持自动和手动同步。

在VSTS上建立CI来完成同步配置

VSTS上的CI引擎内置对GitHub和VSTS自己自带的git的支持,借助这个功能咱们能够很容易的创建同步机制。编程

1. 创建从VSTS到GitHub的同步做业微信

创建一个构建定义,使用Empty的模版,选择VSTS上的repo做为代码来源运维

build-def-from-vsts

在里面添加2个Command line的任务,分别配置成如下命令测试

Git pull https://github.com/ups216/vsalm-hols.git master
Git push https://$(githubtoken)@github.com/ups216/vsalm-hols.git head:master

build-def-vsts-cmd1

build-def-vsts-cmd2

你会注意到在第二个命令中我使用了一个叫作$(githubtoken)的参数。你能够经过GitHub生成这样一个Personal Access Token,并使用如下页面绑定到构建定义,这样在运行的时候用户是看不到这个token的具体内容的。网站

build-def-vsts-pat

注意图中箭头所指向的加锁标注,VSTS会采用加密的方式存储密钥,确保用户看不到具体内容。ui

2. 创建从GitHub到VSTS的同步做业

这里的配置过程相反,在第一步咱们建立一个从GitHub上获取代码的构建定义

build-def-from-github

而后运行如下两个命令

Git pull https://$(vststoken)@almnetworks.visualstudio.com/DefaultCollection/_git/vsalm-hols master
Git push https://$(vststoken)@almnetworks.visualstudio.com/DefaultCollection/_git/vsalm-hols head:master

你会注意到这里在pull和push的命令上都用了$(vststoken)参数,这是由于咱们所操做的vsts上的repo是一个私有的repo,读取和写入都须要认证。

创建好以上配置咱们就能够测试这个双向同步过程了,如下是测试视频:

以上是最简单的针对master分支的双向同步配置,若是须要同步特定分支,咱们只须要对git命令进行简单修改便可。

本文基于如下博客:
https://nkdagility.com/open-source-vsts-tfs-github-better-devops/


请关注微信公众号 【devopshub】,获取更多关于DevOps研发运维一体化的信息

qrcode_for_gh_b7c158df1fd1_430