北京48小时:记一次参加 DevOps 训练营

本周二下班我没有像往常一样加会班(我一般都会赶在晚6点后下班来躲过晚高峰期),而是直接挤地铁奔向机场,准备坐八点半去往北京的一班飞机,因为第二天要参加 JFrog 中国在北京望京举办的 Jenkins, Artifactory & Kubernetes 实战训练营。

Read More

Docker 版本概述

Docker 可分为三个版本

  • Docker Engine - Community
  • Docker Engine - Enterprise
  • Docker Enterprise

Docker Engine - Community 是希望开始使用 Docker 并尝试基于容器的应用程序的个人开发人员和小型团队的理想选择。

Docker Engine - Enterprise 专为企业开发容器运行时而设计,同时考虑了安全性和企业级SLA。

Docker Enterprise 专为企业开发和IT团队而设计,他们可以大规模构建,交付和运行关键业务应用程序。

能力 Docker Engine - Community Docker Engine - Enterprise Docker Enterprise
容器引擎和内建的编配,网络,安全
认证的基础设施,插件和ISV容器
镜像管理
容器应用程序管理
镜像安全扫描

安装 Docker 社区版本

其他 Docker 版本安装

定制一个 Docker 版 Jenkins 镜像

对于如何备份 Jenkins 除了用 Jenkins 插件来定期备份之外,如果把 Jenkins 安装到 Docker 里,定期备份一个 Docker Image 最后传到 Artifactory 中,也是一个不错的方案。

Read More

Artifactory 与 Jenkins 集成

上一篇 初识 JFrog Artifactory,介绍了什么是 Artifactory,以及如何安装、启动和升级。

本篇介绍 Artifactory 与 Jenkins 的集成,因为没有与 CI 工具集成的 Artifactory 是没有灵魂的。

通过集成,可以让 Jenkins 在完成构建之后,可以直接将制品(比如 build)推送到 Artifactory,供测试下载、部署或是后续的 Jenkins 任务去继续进行持续集成。

Read More

初识 JFrog Artifactory

什么是 Artifactory

Artifactory 是 JFrog 的一个产品,用作二进制存储库管理器。二进制存储库可以将所有这些二进制统一托管,从而使团队的管理更加高效和简单。

就跟你用 Git 一样,Git 是用来管理代码的,Artifactory 是用来管理二进制文件的,通常是指 jar, war, pypi, DLL, EXE 等 build 文件。

我觉得使用 Artifactory 的最大优势是创造了更好的持续集成环境,有助于其他持续集成任务去 Artifactory 里调用,再部署到不同的测试或开发环境,这对于实施 DevOps 至关重要。

Read More

Jenkins Console Output 显示彩色

如果想让 Jenkins Console Output 出来一些重要日志醒目的显示,可以让一些日志显示颜色方便查看

  1. 首先需要安装插件: https://wiki.jenkins.io/display/JENKINS/AnsiColor+Plugin
  2. 安装成功后进入系统设置

Jenkins privilege management

如何针对 Jenkins 里的不同 Job 进行不同的策略管理。比如某个 Job 所有人都可以查看,但仅限于某些人可以执行,这时候就需要对 Job 行程权限设置。

这里用的插件是 Role-based Authorization Strategy。安装成功后,打开要设置的 Job, 设置如下:

Enable project-based security

如何设置 NFS 共享以及在不同的平台 Windows/Linux/Unix 进行挂载

例如我有一个共享仓库的代码所在用的空间非常大(超过 20 G),在每个产品构建时候都需要用到这个仓库的代码(从里面 copy 第三方库),如果每个人都要 git clone 这个第三方仓库,一是网络开销非常大,二是 git clone 时间长,而且占用大量的物理空间。

这可以通过 NFS 共享来解决。

另外希望这个代码仓库能自动更新,这里引入了 Jenkins。用它来检查如果这个容量巨大的仓库有代码提交就自动执行 git pull 操作,更新最新的代码到共享服务器上。

Read More

解决 Could not read from remote repository 问题

最近我在运行 Jenkins Job 时候突然发现 git clone 代码的时候突然报了这个错误:

$ git clone ssh://git@git.companyname.com:7999/repo/opensrc.git
Cloning into 'opensrc'...
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.

这个错误只在我刚开始使用 git 的时候遇到过,那时候我还不知道如何使用 ssh 的方式来 clone 代码。怎么会出现这个错误呢?我也没改过什么,非常不理解。

常见解决方案

Read More

Git Commit Squash

If your commits on local not pushed to remote

combine local commits, you could follow this flow

Here is short video (only 3 minutes) and good explanation of git rebase -i usage.

list your local repository log

list your logs in oneline

If you want to combine these 3 commits (add6152, 3650100, 396a652) to 1 commit, execute this command

git rebase -i HEAD~3      # last three commits

list last three commits

Select which commit you want to squash (type s or squash are OK)

combine three commits to one

then press ESC, enter :wq! to save and exit.

comment out some commits message you don't need

Comment out some commits message you don’t need, press ESC, enter :wq! to save and exit.

comment out some commits message you don't need

Check log, you will see your local repository logs has combine to one commit

comment out some commits message you don't need

If your commits had pushed to remote

combine remote commits, you could follow this flow

list your repository logs

list your logs in oneline

# so you can create another branch from bugfix/UNV-1234 named bugfix/UNV-1234-for-squash
xshen@dln-l-xs01 MINGW64 /c/U2GitCode/git-test (bugfix/UNV-1234)
$ git checkout -b bugfix/UNV-1234-for-squash
Switched to a new branch 'bugfix/UNV-1234-for-squash'

# combine last 2 commits
$ git rebase -i HEAD~2

change one commit from pick to squash, see the screenshot below. press ESC, enter :wq! to save and exit.

select a commit you want to squash

change commit message, for example “UNV-1234 combine all commit to one commit”, then press ESC, enter :wq! to save and exit.

comment out commit message you don't want to display

# push your new create branch to remote.
git push -u origin bugfix/UNV-1234-for-squash