本周二下班我没有像往常一样加会班(我一般都会赶在晚6点后下班来躲过晚高峰期),而是直接挤地铁奔向机场,准备坐八点半去往北京的一班飞机,因为第二天要参加 JFrog 中国在北京望京举办的 Jenkins, Artifactory & Kubernetes 实战训练营。
定制一个 Docker 版 Jenkins 镜像
对于如何备份 Jenkins 除了用 Jenkins 插件来定期备份之外,如果把 Jenkins 安装到 Docker 里,定期备份一个 Docker Image 最后传到 Artifactory 中,也是一个不错的方案。
Artifactory 与 Jenkins 集成
上一篇 初识 JFrog Artifactory,介绍了什么是 Artifactory,以及如何安装、启动和升级。
本篇介绍 Artifactory 与 Jenkins 的集成,因为没有与 CI 工具集成的 Artifactory 是没有灵魂的。
通过集成,可以让 Jenkins 在完成构建之后,可以直接将制品(比如 build)推送到 Artifactory,供测试下载、部署或是后续的 Jenkins 任务去继续进行持续集成。
初识 JFrog Artifactory
Jenkins Console Output 显示彩色
如果想让 Jenkins Console Output 出来一些重要日志醒目的显示,可以让一些日志显示颜色方便查看
Jenkins privilege management
如何针对 Jenkins 里的不同 Job 进行不同的策略管理。比如某个 Job 所有人都可以查看,但仅限于某些人可以执行,这时候就需要对 Job 行程权限设置。
这里用的插件是 Role-based Authorization Strategy。安装成功后,打开要设置的 Job, 设置如下:
如何设置 NFS 共享以及在不同的平台 Windows/Linux/Unix 进行挂载
例如我有一个共享仓库的代码所在用的空间非常大(超过 20 G),在每个产品构建时候都需要用到这个仓库的代码(从里面 copy 第三方库),如果每个人都要 git clone 这个第三方仓库,一是网络开销非常大,二是 git clone 时间长,而且占用大量的物理空间。
这可以通过 NFS 共享来解决。
另外希望这个代码仓库能自动更新,这里引入了 Jenkins。用它来检查如果这个容量巨大的仓库有代码提交就自动执行 git pull 操作,更新最新的代码到共享服务器上。
解决 Could not read from remote repository 问题
最近我在运行 Jenkins Job 时候突然发现 git clone 代码的时候突然报了这个错误:
$ git clone ssh://git@git.companyname.com:7999/repo/opensrc.git |
这个错误只在我刚开始使用 git 的时候遇到过,那时候我还不知道如何使用 ssh 的方式来 clone 代码。怎么会出现这个错误呢?我也没改过什么,非常不理解。
常见解决方案
Git Commit Squash
Jenkins troubleshooting summary
ERROR: Error cloning remote repo ‘origin’ timeout=10
Recently, my Jenkins build failed when execute git clone
with following this error message: ERROR: Error cloning remote repo ‘origin’.
- first I suspect it is the network reason, maybe because clone from Bitbucket need took up a lot bandwidth during
git clone
and causing this disconnection. but when I try to git clone on the agent, it works well. - Then I noticed the there is
timeout=10
in the Jenkins console log, I suddenly remembered that I deleted a very large folder a few days ago from git repo, and this may cause the repo more bigger, so it may take more time do a complete clone and it exceeds the Jenkins default clone timeout10
.
Googling and finally I found this issue JENKINS-47660 which is the same problem as mine.
如何通过 Jenkins 进行资源的锁定和释放
在大型企业里维护多分支流水线
Jenkins 是 DevOps 领域里非常好的 CI/CD 工具,它凭借其独特的功能,几乎可以满足你一切的的业务要求。其中一个独特的功能是多分支流水线(Multi-branch 流水线),可以动态配置流水线。但是,随着公司的发展,单独的多分支流水线并不能完全满足你的所有需求,特别是在涉及大型企业时,你需要考虑流水线的集中管理,治理,稳定性,限制和安全性等其他事项。因此对于具有 Jenkins 流水线的大规模 CI/CD 环境,你需要添加之前没有想到的更多功能。
Git branching strategy
随着近些年 Git 的快速普及,想必无论开发还是测试在日常工作中都要用到 Git。
对于刚刚接触的 Git 的人来说,打开一个 Git 仓库,面对十几个甚至几十个分支时,有的人不理解,有的人云里雾里,为什么会创建这么多分支?
对于开发需要知道如何通过 Git 分支来管理产品的开发和发布,尤其是对于大型的项目的开发,只有 master 和 develop 分支是无法满足产品管理和发布要求的,我们还需要其他分支以便更好的管理产品代码。
对于测试更多的了解开发过程及分支管理有助于测试及开展自动化测试用例,可以针对不同的分支进行测试用例的编写,在以后回归测试里可以通过分支或是 tag 找到对应的测试用例。
通过 Jenkins 来提交修改的代码 git push by Jenkins
在持续集成中,你可能需要通过 Jenkins 来修改代码,并且将修改后的代码提交到Git仓库里。怎么做呢?最方便的做法还是 Jenkins 提供对应的插件,但是很遗憾我没找到合适的。另外我也觉得通过脚本的方式来实现会更加稳定,不用担心 Jenkins 以及插件升级带来潜在不好用的可能。