在Kubernetes中创建自托管GitHub Actions Runner

GitHub Actions 是一个持续集成和交付 (CI/CD) 平台,利用工作流(Workflow)可以创建自动化构建、测试和部署管道。GitHub Actions不仅限于构建CI/CD工作流,它可以定义任意的工作流完成某个自动化的功能, 例如,定义一个工作流,当代码仓库中有新的问题创建时自动添加适当的标签。GitHub Action Runner是执行工作流的组件。本文介绍了利用开源项目Actions Runner Controller在Kubernetes中部署和管理自托管的容器版本的GitHub Action Runner。

阅读更多

Git安装与配置

Git是目前使用最广泛的分布式版本管理系统。相对于集中式代码管理系统,例如Subversion, Perforce等,来说,它有着无法比拟的优势,比如轻量级的分支管理,适合不同场景的分支合并策略,离线状态下的版本管理和变更历史查询等,而这些优势也正好符合了当前敏捷和精益的软件开发方法。本文将介绍如何在Linux,Mac和Windows系统中安装并配置Git。

阅读更多

Git加密存储文件

不要将包含用户名、密码、API令牌(Token)等各类敏感信息放在Git代码仓库中已经成为了大家的共识,尤其是代码仓库托管在GitHub、GitLab、Bitbucket等提供公共代码仓库服务的平台上时,更需要且值得任何的代价去尽量避免这种事情的发生。本文介绍并使用git-secret将文件加密后存储在Git代码仓库中,以及基于git-secret的多人协同工作的流程。

阅读更多

从Git仓库中永久清理脏数据

在代码开发的过程中,有时会将不该提交的文件误提交到Git仓库中,比如编译产生的临时二进制文件(忘了添加.gitignore),或者包含账号,密码等敏感信息的文件。临时的二进制文件放在Git仓库中没有意义,而且如果频繁改动的话,也会导致Git仓库逐渐变大,而敏感信息会导致信息泄露且不符合信息安全标准。这些不该提交的文件或内容被称为Git仓库的脏数据,需要被清理掉。重新提交一个新的变更来清理这些脏数据是远远不够的,因为从历史版本中仍然能够找到它们。本文将介绍如何使用开源工具BFG Repo-Cleaner从Git仓库的变更历史中永久清除这些脏数据。

阅读更多

Jenkins构建GitLab合并请求(Merge Request)

写了两篇这样的文章,我们大概可以总结出Jenkins构建合并请求(Merge Request)的原理:首先,需要在Jenkins上安装一个插件以便提供一个Webhook接口,配置插件连通对应的代码协作平台以便将构建状态写回代码协作平台(并不是所有的插件都提供这个功能);其次,在对应的Git仓库中设置Webhook监听Git事件,比如合并请求(Merge Request)的创建、编辑等。当有监听的事件发生时,Webhook触发Jenkins的Webhook接口,Webhook接口解析请求数据,创建一些有用的环境变量,比如合并请求(Merge Request)ID,合并请求(Merge Request)的原分支和目标分支等,并触发对应的Jenkins pipeline;最后,创建一个Jenkins pipeline(目前主要是Pipeline2.0的Jenkinsfile),设置被触发的条件和如何克隆对应的代码,以及实际的构建逻辑。接前面的系列,本文将继续介绍如何配置Jenkins和GitLab来构建GitLab合并请求(Merge Request)。

阅读更多

Jenkins构建GitHub合并请求(Pull Request)

在我的文章“Git合并请求(pull/merge request)的本质”中已经说明了合并请求(pull/merge request)在代码层面上实际是Git仓库中的一个特殊分支,它指向了私有分支和主分支临时合并后产生的合并提交(merge commit)。如果我们能够在这个合并请求(pull/merge request)被真正合并进主分支之前对它做一次构建,就能尽早发现私有分支上的代码是否有问题,从而将问题拦截在主分支之外,减少主分支上持续交付流水线的失败率。对合并请求(pull/merge request)的构建除了编译代码(必要时可增量编译)和单元测试外,还可以增加更多额外的检查,比如代码的静态扫描。业界把这个放在持续交付流水线之前的检查称为preflight流水线(可参考《Continuous Delivery》这本书第三章67页对preflight构建的详细介绍)。本文将介绍如何配置Jenkins和Github来构建Github合并请求(Pull Request)。

阅读更多

Git合并请求(Pull/Merge request)的本质

Git以及基于Git的各代码开发协作平台,比如Github, Gitlab, Bitbucket, TFS Git等正逐渐成为首选的代码版本管理工具,而基于Git的基本开发流程则是开发者创建个人的私有分支并在个人的私有分支上提交代码,代码完成后创建合并请求(pull/merge request)到主分支让相关人员做代码评审,评审通过后将合并请求(pull/merge request)合并到主分支上。合并请求(pull/merge request)不是Git本身的特性,而是各代码协作平台提供的特性,它提供的代码评审功能几乎取代了独立的代码评审工具,同时它也方便了分布于世界各地的开源代码贡献者合并自己的代码。那么合并请求(pull/merge request)到底是什么东西?它看的见摸得着吗?本文将通过目前比较流行的代码开发协作平台(Github, Gitlab, Bitbucket, TFS Git)对合并请求(pull/merget request)的实现来阐明合并请求(pull/merge request)的本质。

阅读更多