提交 305158fe 编写于 作者: LinuxSuRen's avatar LinuxSuRen

deploy

上级 8296d5e6
...@@ -33,7 +33,7 @@ ...@@ -33,7 +33,7 @@
<meta property="og:description" content="" /> <meta property="og:description" content="" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.github.io/" /> <meta property="og:url" content="https://jenkins-zh.github.io/" />
<meta property="og:updated_time" content="2019-04-10T00:00:00&#43;00:00"/> <meta property="og:updated_time" content="2019-04-12T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Jenkins 中文社区"> <meta itemprop="name" content="Jenkins 中文社区">
<meta itemprop="description" content=""> <meta itemprop="description" content="">
...@@ -241,36 +241,36 @@ ...@@ -241,36 +241,36 @@
<a href="/event/wuhang/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5"> <a href="/event/beijing-2019-11/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/hacktberfest.jpg"></img> <img width="400px" height="200px" src="/images/meetup/hacktberfest.jpg"></img>
</a> </a>
<a href="/event/hangzhou-2019-05/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5"> <a href="/event/shenzhen/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/hangzhou.jpeg"></img> <img width="400px" height="200px" src="/images/meetup/shenzhen.jpeg"></img>
</a> </a>
<a href="/event/shenzhen/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5"> <a href="/event/hangzhou-2019-05/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/shenzhen.jpeg"></img> <img width="400px" height="200px" src="/images/meetup/hangzhou.jpeg"></img>
</a> </a>
<a href="/event/beijing-2019-11/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5"> <a href="/event/shanghai-2019-06/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/hacktberfest.jpg"></img> <img width="400px" height="200px" src="/images/meetup/shanghai.jpeg"></img>
</a> </a>
<a href="/event/shanghai-2019-06/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5"> <a href="/event/wuhang/" class="tile lazyload cover dib f4 ml1 mr4 bg-black relative mw-100 shadow-5">
<img width="400px" height="200px" src="/images/meetup/shanghai.jpeg"></img> <img width="400px" height="200px" src="/images/meetup/hacktberfest.jpg"></img>
</a> </a>
......
...@@ -6,6 +6,13 @@ ...@@ -6,6 +6,13 @@
"description": "行为规范", "description": "行为规范",
"content": " 留言 留言之前需要使用 GitHub 账号登陆。大家要注意文明用语,严禁攻击、诋毁、灌水、广告等无关的话。对于违反人,一经发现将会被拉入黑名单。\n提问 欢迎每一位朋友在这里提出与 Jenkins 或相关领域的技术问题,但是,在提问之前建议先在搜索引擎和本站中进行搜索。\n问题至少要包含如下部分:\n 场景以及问题是如何发生的,方便阅读的人复现 软件、环境相关版本信息 日志、截图等(建议使用附件的方式) 出于对回答问题者的尊重,请得到解决方案后及时表示感谢,或者从其他地方得到答案后添加相关链接以及说明。\nGitHub 请您使用同一个 GitHub 账号来与大家交流,不欢迎使用所谓的“小号”。\n" "content": " 留言 留言之前需要使用 GitHub 账号登陆。大家要注意文明用语,严禁攻击、诋毁、灌水、广告等无关的话。对于违反人,一经发现将会被拉入黑名单。\n提问 欢迎每一位朋友在这里提出与 Jenkins 或相关领域的技术问题,但是,在提问之前建议先在搜索引擎和本站中进行搜索。\n问题至少要包含如下部分:\n 场景以及问题是如何发生的,方便阅读的人复现 软件、环境相关版本信息 日志、截图等(建议使用附件的方式) 出于对回答问题者的尊重,请得到解决方案后及时表示感谢,或者从其他地方得到答案后添加相关链接以及说明。\nGitHub 请您使用同一个 GitHub 账号来与大家交流,不欢迎使用所谓的“小号”。\n"
}, },
{
"uri": "https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/",
"title": "简析 Jenkins 专有用户数据库加密算法",
"tags": ["jenkins"],
"description": "本文对 Jenkins 专有用户数据库加密算法进行简要分析",
"content": " 认识Jenkins专有用户数据库 Jenkins 访问控制分为:安全域(即认证)与授权策略。\n其中,安全域可以采用三种形式,分别为:Jenkins 专有用户数据库、LDAP、Servlet 容器代理。 在哪里看到加密后的用户密码信息? Jenkins 专有用户的数据信息存放位置:$JENKINS_HOME/users/\n每个用户的相关信息存放在各自的 config.xml 文件中: $JENKINS_HOME/users/$user/config.xml\n在 config.xml 文件中的 passwordHash 节点可以看到用户密码加密后的密文哈希值: 用户密码是用什么算法加密的呢? 那么问题来了,用户密码是用何种加密方式加密的呢?可否通过解密密文得到明文呢?\n在 GitHub 上查看其源码,通过关键字 #jbcrypt 搜索定位到 HudsonPrivateSecurityRealm.java 这个文件。 HudsonPrivateSecurityRealm.java 具体路径是:jenkins/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java\n源码片段如下:\n/** * {@link PasswordEncoder} that uses jBCrypt. */ private static final PasswordEncoder JBCRYPT_ENCODER = new PasswordEncoder() { public String encodePassword(String rawPass, Object _) throws DataAccessException { return BCrypt.hashpw(rawPass,BCrypt.gensalt()); } public boolean isPasswordValid(String encPass, String rawPass, Object _) throws DataAccessException { return BCrypt.checkpw(rawPass,encPass); } }; /** * Combines {@link #JBCRYPT_ENCODER} and {@link #CLASSIC} into one so that we can continue * to accept {@link #CLASSIC} format but new encoding will always done via {@link #JBCRYPT_ENCODER}. */ public static final PasswordEncoder PASSWORD_ENCODER = new PasswordEncoder() { /* CLASSIC encoder outputs \u0026quot;salt:hash\u0026quot; where salt is [a-z]+, so we use unique prefix '#jbcyrpt\u0026quot; to designate JBCRYPT-format hash. '#' is neither in base64 nor hex, which makes it a good choice. */ public String encodePassword(String rawPass, Object salt) throws DataAccessException { return JBCRYPT_HEADER+JBCRYPT_ENCODER.encodePassword(rawPass,salt); } public boolean isPasswordValid(String encPass, String rawPass, Object salt) throws DataAccessException { if (encPass.startsWith(JBCRYPT_HEADER)) return JBCRYPT_ENCODER.isPasswordValid(encPass.substring(JBCRYPT_HEADER.length()),rawPass,salt); else return CLASSIC.isPasswordValid(encPass,rawPass,salt); } private static final String JBCRYPT_HEADER = \u0026quot;#jbcrypt:\u0026quot;; }; 通过分析该源码得知: 1. 明文通过 jbcrypt 算法得到密文 encPass 2. 密文的格式为:salt: encPass,其中以 #jbcrypt 表示 salt 作为数据头\njbcrypt 是什么? jbcrypt 是 bcrypt 加密工具的 java 实现。 它的 API 非常简单,DEMO 如下,在 HudsonPrivateSecurityRealm.java 中可以看到加密和校验时使用了如下 API:\n// Hash a password for the first time String hashed = BCrypt.hashpw(password, BCrypt.gensalt()); // gensalt's log_rounds parameter determines the complexity the work factor is 2**log_rounds, and the default is 10 String hashed = BCrypt.hashpw(password, BCrypt.gensalt(12)); // Check that an unencrypted password matches one that has previously been hashed if (BCrypt.checkpw(candidate, hashed)) System.out.println(\u0026quot;It matches\u0026quot;); else System.out.println(\u0026quot;It does not match\u0026quot;); 经验证,用 jbcrypt 对同一个明文加密后因为 salt 一般不同,加密后的密文一般不同。\nbcrypt 精要概况 bcrypt 是不可逆的加密算法,无法通过解密密文得到明文。 bcrypt 和其他对称或非对称加密方式不同的是,不是直接解密得到明文,也不是二次加密比较密文,而是把明文和存储的密文一块运算得到另一个密文,如果这两个密文相同则验证成功。 总结 综上, Jenkins 专有用户数据库使用了 jbcrypt 加密, jbcrypt 加密是不可逆的,而且对于同一个明文的加密结果一般不同。\n"
},
{ {
"uri": "https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/", "uri": "https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/",
"title": "Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线", "title": "Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线",
...@@ -503,6 +510,13 @@ ...@@ -503,6 +510,13 @@
"description": "平台特别兴趣小组提供了 Windows 安装程序的更新", "description": "平台特别兴趣小组提供了 Windows 安装程序的更新",
"content": " Jenkins 的 Windows 安装程序已经存在很多年了,它是用户在 Windows 上安装 Jenkins Master 作为服务的一种方式。 从被开发出来至今,它还没有什么新特性,但现在是时候做出改变了。\n首先,让我们瞧瞧现版本安装程序的使用经验。\n第1步 启动安装程序 这是使用 WiX Toolset Windows 安装程序的默认界面外观,算不上太好看,而且没有太多对安装程序进行说明的品牌信息。\n第2步 安装目录 同样,没有太多的品牌信息。\n第3步 安装 除了选择安装位置外,安装程序大体上没有提供一些安装 Jenkins 的选项。\n问题 现在的安装程序存在一些问题,平台特别兴趣小组会修复这些问题,并为用户提供新的安装体验。\n 安装程序只支持32位安装。 用户不能选择 Jenkins 作为 Windows 服务启动时的端口以及账户。 安装程序捆绑了32位的 Java Runtime,而没有使用已存在的 JRE。 安装程序不支持 Jenkins for Java 11中的实验性支持。 JENKINS_HOME 目录并不适合现代 Windows。 安装程序中没有品牌。 前进 使用实验性的 Jenkins Windows 安装程序,大部分问题都已解决!\n 安装程序将只支持64位系统,这也是如今大多数 Windows 系统的现状,所以能让更多的用户能够使用安装包来安装 Jenkins。 用户能够为服务输入用户信息,同时选择端口以便于 Jenkins 验证端口是否可用。 安装程序不再捆绑 JRE 而是在操作系统中寻找合适的 JRE。如果用户想要使用一个不同的 JRE,可以在安装时指定。 安装程序已经支持 Java 11,包括在 Java 11 预览上面列出的组件。 JENKINS_HOME 目录被放置在启动服务用户的 LocalAppData 目录下,这与现代 Windows 文件系统布局一致。 安装程序已经升级带有品牌了,这让它看起来更酷并能提供一个更好的用户体验。 截图 以下是新安装程序的系列屏幕截图:\n第1步 启动安装程序 Jenkins logo 现在是安装程序 UI 的重要组成部分。\n第2步 安装目录 在安装程序的所有阶段,Jenkins logo 和名称都出现在标题中。\n第3步 选择账户 安装程序现在允许您指定要运行的帐户的用户名/密码,并检查该帐户是否具有 LogonAsService 权限。\n第4步 端口选择 安装程序还允许您指定 Jenkins 运行的端口,并且在输入和测试有效端口之前不会继续。\n第5步 JRE 选择 安装程序现在不再捆绑 JRE,而是在系统上搜索兼容的 JRE (现在是 JRE 8)。 如果你想使用与安装程序搜索到不同的 JRE,你可以浏览目录并指定它。只支持 JRE 8 和 JRE 11 Runtime。如果发现选定的 JRE 是版本11,安装程序将自动添加必要的参数和其他 jar 文件,以便在 Java 11下运行。\n第6步 安装 用户能在安装程序中输入的所有选项也可以在命令行上覆盖以进行自动部署。可以覆盖的完整属性列表即将推出。\n接下来的步骤 新版本安装程序正在被平台特别兴趣小组的成员 Review 中,但我们需要人测试安装程序并给予反馈。你过你对测试新安装程序感兴趣的话,请加入平台特别兴趣小组 gitter room 获取更多信息。\n在新安装程序中还使用了许多一些正在研发的东西(例如,在进行升级时保留端口和其他选择),但它已接近发布。\n除了基于 MSI 的 Windows 安装程序的更新之外,平台特别兴趣小组还在努力接管 Chocolatey Jenkins 软件包并为每次更新发布一个版本。\n" "content": " Jenkins 的 Windows 安装程序已经存在很多年了,它是用户在 Windows 上安装 Jenkins Master 作为服务的一种方式。 从被开发出来至今,它还没有什么新特性,但现在是时候做出改变了。\n首先,让我们瞧瞧现版本安装程序的使用经验。\n第1步 启动安装程序 这是使用 WiX Toolset Windows 安装程序的默认界面外观,算不上太好看,而且没有太多对安装程序进行说明的品牌信息。\n第2步 安装目录 同样,没有太多的品牌信息。\n第3步 安装 除了选择安装位置外,安装程序大体上没有提供一些安装 Jenkins 的选项。\n问题 现在的安装程序存在一些问题,平台特别兴趣小组会修复这些问题,并为用户提供新的安装体验。\n 安装程序只支持32位安装。 用户不能选择 Jenkins 作为 Windows 服务启动时的端口以及账户。 安装程序捆绑了32位的 Java Runtime,而没有使用已存在的 JRE。 安装程序不支持 Jenkins for Java 11中的实验性支持。 JENKINS_HOME 目录并不适合现代 Windows。 安装程序中没有品牌。 前进 使用实验性的 Jenkins Windows 安装程序,大部分问题都已解决!\n 安装程序将只支持64位系统,这也是如今大多数 Windows 系统的现状,所以能让更多的用户能够使用安装包来安装 Jenkins。 用户能够为服务输入用户信息,同时选择端口以便于 Jenkins 验证端口是否可用。 安装程序不再捆绑 JRE 而是在操作系统中寻找合适的 JRE。如果用户想要使用一个不同的 JRE,可以在安装时指定。 安装程序已经支持 Java 11,包括在 Java 11 预览上面列出的组件。 JENKINS_HOME 目录被放置在启动服务用户的 LocalAppData 目录下,这与现代 Windows 文件系统布局一致。 安装程序已经升级带有品牌了,这让它看起来更酷并能提供一个更好的用户体验。 截图 以下是新安装程序的系列屏幕截图:\n第1步 启动安装程序 Jenkins logo 现在是安装程序 UI 的重要组成部分。\n第2步 安装目录 在安装程序的所有阶段,Jenkins logo 和名称都出现在标题中。\n第3步 选择账户 安装程序现在允许您指定要运行的帐户的用户名/密码,并检查该帐户是否具有 LogonAsService 权限。\n第4步 端口选择 安装程序还允许您指定 Jenkins 运行的端口,并且在输入和测试有效端口之前不会继续。\n第5步 JRE 选择 安装程序现在不再捆绑 JRE,而是在系统上搜索兼容的 JRE (现在是 JRE 8)。 如果你想使用与安装程序搜索到不同的 JRE,你可以浏览目录并指定它。只支持 JRE 8 和 JRE 11 Runtime。如果发现选定的 JRE 是版本11,安装程序将自动添加必要的参数和其他 jar 文件,以便在 Java 11下运行。\n第6步 安装 用户能在安装程序中输入的所有选项也可以在命令行上覆盖以进行自动部署。可以覆盖的完整属性列表即将推出。\n接下来的步骤 新版本安装程序正在被平台特别兴趣小组的成员 Review 中,但我们需要人测试安装程序并给予反馈。你过你对测试新安装程序感兴趣的话,请加入平台特别兴趣小组 gitter room 获取更多信息。\n在新安装程序中还使用了许多一些正在研发的东西(例如,在进行升级时保留端口和其他选择),但它已接近发布。\n除了基于 MSI 的 Windows 安装程序的更新之外,平台特别兴趣小组还在努力接管 Chocolatey Jenkins 软件包并为每次更新发布一个版本。\n"
}, },
{
"uri": "https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/",
"title": "什么是 CI/CD?",
"tags": ["ci", "cd"],
"description": "",
"content": " CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。\n从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。\n开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。\n持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。\n以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: \u0026ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。\u0026rdquo;\n持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。\n这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。\n当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。\nCI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。\n持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。\nCD 集中依赖于部署流水线,团队通过流水线自动化测试和部署过程。此流水线是一个自动化系统, 可以针对构建执行一组渐进的测试套件。CD 具有高度的自动化,并且在一些云计算环境中也易于配置。\n在流水线的每个阶段,如果构建无法通过关键测试会向团队发出警报。否则,将继续进入下一个测试, 并在连续通过测试后自动进入下一个阶段。流水线的最后一个部分会将构建部署到和生产环境等效的环境中。 这是一个整体的过程,因为构建、部署和环境都是一起执行和测试的,它能让构建在实际的生产环境可部署和可验证。\nAWS 上提供了可靠的当前 CI/CD 的展示,亚马逊是云计算的提供商之一,提供出色的 CI/CD 流水线环境和实验过程, 有众多开发资源可供选择,您可以将它们在一个易于配置和监控的流水线中组合起来。\n许多人认为持续交付的吸引力主要在于,它自动化了从提交代码到仓库,再到测试和发布产品过程的所有步骤。 这是构建和测试过程细致的自动化,但是如何发布以及发布什么仍然是需要人工操作,持续部署可以改变这一点。\n持续部署(CD) 持续部署扩展了持续交付,以便软件构建在通过所有测试时自动部署。在这样的流程中, 不需要人为决定何时及如何投入生产环境。CI/CD 系统的最后一步将在构建后的组件/包退出流水线时自动部署。 此类自动部署可以配置为快速向客户分发组件、功能模块或修复补丁,并准确说明当前提供的内容。\n采用持续部署的组织可以将新功能快速传递给用户,得到用户对于新版本的快速反馈,并且可以迅速处理任何明显的缺陷。 用户对无用或者误解需求的功能的快速反馈有助于团队规划投入,避免将精力集中于不容易产生回报的地方。\n随着 DevOps 的发展,新的用来实现 CI/CD 流水线的自动化工具也在不断涌现。这些工具通常能与各种开发工具配合, 包括像 GitHub 这样的代码仓库和 Jira 这样的 bug 跟踪工具。此外,随着 SaaS 这种交付方式变得更受欢迎, 许多工具都可以在现代开发人员运行应用程序的云环境中运行,例如 GCP 和 AWS。\n最受欢迎的自动化工具是 Jenkins(以前的 Hudson), 这是一个由数百名贡献者和商业公司 Cloudbees 支持的开源项目。 Cloudbees 甚至聘请了 Jenkins 的创始人,并提供了一些 Jenkins 培训项目和附加组件。 除了开源项目之外,还有一些更现代化的商业产品例如 CircleCI,Codeship 和 Shippable。 这些产品各有优缺点,我鼓励开发人员在开发流程中一一尝试它们,以了解它们在您的环境中的工作方式, 以及它们如何与您的工具、云平台、容器系统等协作。\n在 mabl 中,我们在 Google Cloud Platform 上进行构建, 因此,我们正在寻找与 GSP 兼容或者最好是已经集成进 GSO 的产品。我们尝试过 CircleCI,Codeship 和 Shippable, 下面有一个简单的表格,展示了每个工具的一些细节:\n我们最终选择了 Codeship,我认为我们的选择是正确的, 也感谢 Codeship 团队的支持。\n接下来? 一旦部署了现代化的 CI/CD 流水线,您可能会意识到开发人员工作流程中的一些工具和流程也需要进行现代化改造。 测试是一个要着重关注的领域,如果您的部署频率是每天或者一天多次,您的每次测试可能需要数小时甚至一晚上才能完成。 mabl 正在使用机器学习解决这个问题。\n"
},
{ {
"uri": "https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/", "uri": "https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/",
"title": "使用 YAML 文件配置 Jenkins 流水线", "title": "使用 YAML 文件配置 Jenkins 流水线",
......
...@@ -6,7 +6,7 @@ ...@@ -6,7 +6,7 @@
<description>Recent content on Jenkins 中文社区</description> <description>Recent content on Jenkins 中文社区</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>zh-CN</language> <language>zh-CN</language>
<lastBuildDate>Wed, 10 Apr 2019 00:00:00 +0000</lastBuildDate> <lastBuildDate>Fri, 12 Apr 2019 00:00:00 +0000</lastBuildDate>
<atom:link href="https://jenkins-zh.github.io/index.xml" rel="self" type="application/rss+xml" /> <atom:link href="https://jenkins-zh.github.io/index.xml" rel="self" type="application/rss+xml" />
...@@ -24,6 +24,21 @@ ...@@ -24,6 +24,21 @@
GitHub 请您使用同一个 GitHub 账号来与大家交流,不欢迎使用所谓的“小号”。</description> GitHub 请您使用同一个 GitHub 账号来与大家交流,不欢迎使用所谓的“小号”。</description>
</item> </item>
<item>
<title>简析 Jenkins 专有用户数据库加密算法</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/</link>
<pubDate>Fri, 12 Apr 2019 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/</guid>
<description>认识Jenkins专有用户数据库 Jenkins 访问控制分为:安全域(即认证)与授权策略。
其中,安全域可以采用三种形式,分别为:Jenkins 专有用户数据库、LDAP、Servlet 容器代理。 在哪里看到加密后的用户密码信息? Jenkins 专有用户的数据信息存放位置:$JENKINS_HOME/users/
每个用户的相关信息存放在各自的 config.xml 文件中: $JENKINS_HOME/users/$user/config.xml
在 config.xml 文件中的 passwordHash 节点可以看到用户密码加密后的密文哈希值: 用户密码是用什么算法加密的呢? 那么问题来了,用户密码是用何种加密方式加密的呢?可否通过解密密文得到明文呢?
在 GitHub 上查看其源码,通过关键字 #jbcrypt 搜索定位到 HudsonPrivateSecurityRealm.java 这个文件。 HudsonPrivateSecurityRealm.java 具体路径是:jenkins/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java
源码片段如下:
/** * {@link PasswordEncoder} that uses jBCrypt. */ private static final PasswordEncoder JBCRYPT_ENCODER = new PasswordEncoder() { public String encodePassword(String rawPass, Object _) throws DataAccessException { return BCrypt.hashpw(rawPass,BCrypt.gensalt()); } public boolean isPasswordValid(String encPass, String rawPass, Object _) throws DataAccessException { return BCrypt.</description>
</item>
<item> <item>
<title>Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</title> <title>Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</link> <link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</link>
...@@ -399,6 +414,24 @@ Jenkins 的 简体中文语言插件 也热切地期待你的 Pull Request 。 ...@@ -399,6 +414,24 @@ Jenkins 的 简体中文语言插件 也热切地期待你的 Pull Request 。
安装程序将只支持64位系统,这也是如今大多数 Windows 系统的现状,所以能让更多的用户能够使用安装包来安装 Jenkins。 用户能够为服务输入用户信息,同时选择端口以便于 Jenkins 验证端口是否可用。 安装程序不再捆绑 JRE 而是在操作系统中寻找合适的 JRE。如果用户想要使用一个不同的 JRE,可以在安装时指定。 安装程序已经支持 Java 11,包括在 Java 11 预览上面列出的组件。 JENKINS_HOME 目录被放置在启动服务用户的 LocalAppData 目录下,这与现代 Windows 文件系统布局一致。 安装程序已经升级带有品牌了,这让它看起来更酷并能提供一个更好的用户体验。 截图 以下是新安装程序的系列屏幕截图:</description> 安装程序将只支持64位系统,这也是如今大多数 Windows 系统的现状,所以能让更多的用户能够使用安装包来安装 Jenkins。 用户能够为服务输入用户信息,同时选择端口以便于 Jenkins 验证端口是否可用。 安装程序不再捆绑 JRE 而是在操作系统中寻找合适的 JRE。如果用户想要使用一个不同的 JRE,可以在安装时指定。 安装程序已经支持 Java 11,包括在 Java 11 预览上面列出的组件。 JENKINS_HOME 目录被放置在启动服务用户的 LocalAppData 目录下,这与现代 Windows 文件系统布局一致。 安装程序已经升级带有品牌了,这让它看起来更酷并能提供一个更好的用户体验。 截图 以下是新安装程序的系列屏幕截图:</description>
</item> </item>
<item>
<title>什么是 CI/CD?</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</guid>
<description>CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。
开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: &amp;ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。&amp;rdquo;
持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。
这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。
当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。
CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。</description>
</item>
<item> <item>
<title>使用 YAML 文件配置 Jenkins 流水线</title> <title>使用 YAML 文件配置 Jenkins 流水线</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/</link> <link>https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/</link>
......
...@@ -6,6 +6,11 @@ ...@@ -6,6 +6,11 @@
<loc>https://jenkins-zh.github.io/about/code-of-conduct/</loc> <loc>https://jenkins-zh.github.io/about/code-of-conduct/</loc>
</url> </url>
<url>
<loc>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/</loc>
<lastmod>2019-04-12T00:00:00+00:00</lastmod>
</url>
<url> <url>
<loc>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</loc> <loc>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</loc>
<lastmod>2019-04-10T00:00:00+00:00</lastmod> <lastmod>2019-04-10T00:00:00+00:00</lastmod>
...@@ -249,7 +254,7 @@ ...@@ -249,7 +254,7 @@
<url> <url>
<loc>https://jenkins-zh.github.io/tags/jenkins/</loc> <loc>https://jenkins-zh.github.io/tags/jenkins/</loc>
<lastmod>2019-04-10T00:00:00+00:00</lastmod> <lastmod>2019-04-12T00:00:00+00:00</lastmod>
<priority>0</priority> <priority>0</priority>
</url> </url>
...@@ -259,7 +264,7 @@ ...@@ -259,7 +264,7 @@
<url> <url>
<loc>https://jenkins-zh.github.io/</loc> <loc>https://jenkins-zh.github.io/</loc>
<lastmod>2019-04-10T00:00:00+00:00</lastmod> <lastmod>2019-04-12T00:00:00+00:00</lastmod>
<priority>0</priority> <priority>0</priority>
</url> </url>
...@@ -351,7 +356,7 @@ ...@@ -351,7 +356,7 @@
<url> <url>
<loc>https://jenkins-zh.github.io/wechat/</loc> <loc>https://jenkins-zh.github.io/wechat/</loc>
<lastmod>2019-04-10T00:00:00+00:00</lastmod> <lastmod>2019-04-12T00:00:00+00:00</lastmod>
<priority>0</priority> <priority>0</priority>
</url> </url>
...@@ -375,6 +380,10 @@ ...@@ -375,6 +380,10 @@
<loc>https://jenkins-zh.github.io/wechat/articles/2019/02/2019-02-27-windows-installers/</loc> <loc>https://jenkins-zh.github.io/wechat/articles/2019/02/2019-02-27-windows-installers/</loc>
</url> </url>
<url>
<loc>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</loc>
</url>
<url> <url>
<loc>https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/</loc> <loc>https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/</loc>
</url> </url>
......
...@@ -156,6 +156,67 @@ ...@@ -156,6 +156,67 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link primary-color dim">Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</a>
</h1>
<div class="lh-copy links">
本文是容器化现有 Java 应用以及使用 Jenkins 建立一个端到端部署流水线的指南
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="link primary-color dim">什么是 CI/CD?</a>
</h1>
<div class="lh-copy links">
CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。
开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: &ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。&rdquo;
持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。
这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。
当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。
CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。
<a href="/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section> </section>
</div> </div>
......
...@@ -24,5 +24,23 @@ ...@@ -24,5 +24,23 @@
node { stage &#39;checkout&#39; git &#39;https://gitlab.com/RavisankarCts/hello-world.git&#39; stage &#39;build&#39; sh &#39;mvn clean install&#39; stage(&#39;Results - 1&#39;) { junit &#39;**/target/surefire-reports/TEST-*.xml&#39; archive &#39;target/*.jar&#39; } stage &#39;bake image&#39; docker.withRegistry(&#39;https://registry.hub.docker.com&#39;,&#39;docker-hub-credentials&#39;) { def image = docker.build(&amp;quot;ravisankar/ravisankardevops:${env.BUILD_TAG}&amp;quot;,&#39;.&#39;) stage &#39;test image&#39; image.withRun(&#39;-p 8888:8888&#39;) {springboot -&amp;gt; sh &#39;while !</description> node { stage &#39;checkout&#39; git &#39;https://gitlab.com/RavisankarCts/hello-world.git&#39; stage &#39;build&#39; sh &#39;mvn clean install&#39; stage(&#39;Results - 1&#39;) { junit &#39;**/target/surefire-reports/TEST-*.xml&#39; archive &#39;target/*.jar&#39; } stage &#39;bake image&#39; docker.withRegistry(&#39;https://registry.hub.docker.com&#39;,&#39;docker-hub-credentials&#39;) { def image = docker.build(&amp;quot;ravisankar/ravisankardevops:${env.BUILD_TAG}&amp;quot;,&#39;.&#39;) stage &#39;test image&#39; image.withRun(&#39;-p 8888:8888&#39;) {springboot -&amp;gt; sh &#39;while !</description>
</item> </item>
<item>
<title>什么是 CI/CD?</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</guid>
<description>CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。
开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: &amp;ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。&amp;rdquo;
持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。
这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。
当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。
CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。</description>
</item>
</channel> </channel>
</rss> </rss>
\ No newline at end of file
...@@ -156,6 +156,31 @@ ...@@ -156,6 +156,31 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link primary-color dim">Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</a>
</h1>
<div class="lh-copy links">
本文是容器化现有 Java 应用以及使用 Jenkins 建立一个端到端部署流水线的指南
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px"> <div class="relative weight-0" style="max-width: 350px">
...@@ -184,6 +209,42 @@ ...@@ -184,6 +209,42 @@
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="link primary-color dim">什么是 CI/CD?</a>
</h1>
<div class="lh-copy links">
CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。
开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: &ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。&rdquo;
持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。
这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。
当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。
CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。
<a href="/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section> </section>
</div> </div>
......
...@@ -41,5 +41,23 @@ node { stage &#39;checkout&#39; git &#39;https://gitlab.com/RavisankarCts/hello- ...@@ -41,5 +41,23 @@ node { stage &#39;checkout&#39; git &#39;https://gitlab.com/RavisankarCts/hello-
3、大量的错误信息 对于较大的开发团队,他们可能每天都会看到 CI 错误消息,并开始忽略它们,因为它们还有其他任务和关注点。 他们可能会开始将一个破坏的构建视为一个正常的事情,并且缺陷可能开始堆积在一起。</description> 3、大量的错误信息 对于较大的开发团队,他们可能每天都会看到 CI 错误消息,并开始忽略它们,因为它们还有其他任务和关注点。 他们可能会开始将一个破坏的构建视为一个正常的事情,并且缺陷可能开始堆积在一起。</description>
</item> </item>
<item>
<title>什么是 CI/CD?</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</guid>
<description>CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。
开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: &amp;ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。&amp;rdquo;
持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。
这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。
当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。
CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。</description>
</item>
</channel> </channel>
</rss> </rss>
\ No newline at end of file
...@@ -156,6 +156,31 @@ ...@@ -156,6 +156,31 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link primary-color dim">介绍:成为一名 Jenkins 贡献者的旅程</a>
</h1>
<div class="lh-copy links">
如何从零开始成为开源社区贡献者
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px"> <div class="relative weight-0" style="max-width: 350px">
......
...@@ -156,6 +156,31 @@ ...@@ -156,6 +156,31 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link primary-color dim">介绍:成为一名 Jenkins 贡献者的旅程</a>
</h1>
<div class="lh-copy links">
如何从零开始成为开源社区贡献者
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section> </section>
</div> </div>
......
...@@ -156,6 +156,31 @@ ...@@ -156,6 +156,31 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link primary-color dim">介绍:成为一名 Jenkins 贡献者的旅程</a>
</h1>
<div class="lh-copy links">
如何从零开始成为开源社区贡献者
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px"> <div class="relative weight-0" style="max-width: 350px">
......
...@@ -156,6 +156,31 @@ ...@@ -156,6 +156,31 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link primary-color dim">Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</a>
</h1>
<div class="lh-copy links">
本文是容器化现有 Java 应用以及使用 Jenkins 建立一个端到端部署流水线的指南
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section> </section>
</div> </div>
......
...@@ -167,6 +167,12 @@ ...@@ -167,6 +167,12 @@
</a> </a>
</h3> </h3>
<h3>
<a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="link blue">
什么是 CI/CD?
</a>
</h3>
</div> </div>
...@@ -211,6 +217,12 @@ ...@@ -211,6 +217,12 @@
</a> </a>
</h3> </h3>
<h3>
<a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="link blue">
什么是 CI/CD?
</a>
</h3>
</div> </div>
...@@ -507,6 +519,12 @@ ...@@ -507,6 +519,12 @@
</a> </a>
</h2> </h2>
<h3>
<a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/" class="link blue">
简析 Jenkins 专有用户数据库加密算法
</a>
</h3>
<h3> <h3>
<a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link blue"> <a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link blue">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线 Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线
......
...@@ -185,7 +185,7 @@ ...@@ -185,7 +185,7 @@
<item> <item>
<title>Jenkins</title> <title>Jenkins</title>
<link>https://jenkins-zh.github.io/tags/jenkins/</link> <link>https://jenkins-zh.github.io/tags/jenkins/</link>
<pubDate>Wed, 10 Apr 2019 00:00:00 +0000</pubDate> <pubDate>Fri, 12 Apr 2019 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/tags/jenkins/</guid> <guid>https://jenkins-zh.github.io/tags/jenkins/</guid>
<description></description> <description></description>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<meta property="og:description" content="" /> <meta property="og:description" content="" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.github.io/tags/jenkins/" /> <meta property="og:url" content="https://jenkins-zh.github.io/tags/jenkins/" />
<meta property="og:updated_time" content="2019-04-10T00:00:00&#43;00:00"/> <meta property="og:updated_time" content="2019-04-12T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Jenkins"> <meta itemprop="name" content="Jenkins">
<meta itemprop="description" content=""> <meta itemprop="description" content="">
...@@ -158,6 +158,58 @@ ...@@ -158,6 +158,58 @@
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link primary-color dim">Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</a>
</h1>
<div class="lh-copy links">
本文是容器化现有 Java 应用以及使用 Jenkins 建立一个端到端部署流水线的指南
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link primary-color dim">介绍:成为一名 Jenkins 贡献者的旅程</a>
</h1>
<div class="lh-copy links">
如何从零开始成为开源社区贡献者
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px"> <div class="relative weight-0" style="max-width: 350px">
......
...@@ -6,11 +6,26 @@ ...@@ -6,11 +6,26 @@
<description>Recent content in Jenkins on Jenkins 中文社区</description> <description>Recent content in Jenkins on Jenkins 中文社区</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>zh-CN</language> <language>zh-CN</language>
<lastBuildDate>Wed, 10 Apr 2019 00:00:00 +0000</lastBuildDate> <lastBuildDate>Fri, 12 Apr 2019 00:00:00 +0000</lastBuildDate>
<atom:link href="https://jenkins-zh.github.io/tags/jenkins/index.xml" rel="self" type="application/rss+xml" /> <atom:link href="https://jenkins-zh.github.io/tags/jenkins/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>简析 Jenkins 专有用户数据库加密算法</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/</link>
<pubDate>Fri, 12 Apr 2019 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/</guid>
<description>认识Jenkins专有用户数据库 Jenkins 访问控制分为:安全域(即认证)与授权策略。
其中,安全域可以采用三种形式,分别为:Jenkins 专有用户数据库、LDAP、Servlet 容器代理。 在哪里看到加密后的用户密码信息? Jenkins 专有用户的数据信息存放位置:$JENKINS_HOME/users/
每个用户的相关信息存放在各自的 config.xml 文件中: $JENKINS_HOME/users/$user/config.xml
在 config.xml 文件中的 passwordHash 节点可以看到用户密码加密后的密文哈希值: 用户密码是用什么算法加密的呢? 那么问题来了,用户密码是用何种加密方式加密的呢?可否通过解密密文得到明文呢?
在 GitHub 上查看其源码,通过关键字 #jbcrypt 搜索定位到 HudsonPrivateSecurityRealm.java 这个文件。 HudsonPrivateSecurityRealm.java 具体路径是:jenkins/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java
源码片段如下:
/** * {@link PasswordEncoder} that uses jBCrypt. */ private static final PasswordEncoder JBCRYPT_ENCODER = new PasswordEncoder() { public String encodePassword(String rawPass, Object _) throws DataAccessException { return BCrypt.hashpw(rawPass,BCrypt.gensalt()); } public boolean isPasswordValid(String encPass, String rawPass, Object _) throws DataAccessException { return BCrypt.</description>
</item>
<item> <item>
<title>Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</title> <title>Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</link> <link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</link>
......
...@@ -156,6 +156,31 @@ ...@@ -156,6 +156,31 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link primary-color dim">介绍:成为一名 Jenkins 贡献者的旅程</a>
</h1>
<div class="lh-copy links">
如何从零开始成为开源社区贡献者
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
</section> </section>
</div> </div>
......
...@@ -156,6 +156,31 @@ ...@@ -156,6 +156,31 @@
<section class="flex-ns flex-wrap justify-between w-100"> <section class="flex-ns flex-wrap justify-between w-100">
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link primary-color dim">Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</a>
</h1>
<div class="lh-copy links">
本文是容器化现有 Java 应用以及使用 Jenkins 建立一个端到端部署流水线的指南
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px"> <div class="relative weight-0" style="max-width: 350px">
......
...@@ -418,8 +418,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -418,8 +418,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link"> <a href="/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线 简析 Jenkins 专有用户数据库加密算法
</a> </a>
</li> </li>
...@@ -430,6 +430,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -430,6 +430,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
</li> </li>
<li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线
</a>
</li>
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link"> <a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link">
介绍:成为一名 Jenkins 贡献者的旅程 介绍:成为一名 Jenkins 贡献者的旅程
......
...@@ -212,7 +212,7 @@ ...@@ -212,7 +212,7 @@
</a> </a>
<a href="https://jenkins-zh.github.io/wechat/articles/2019/02/2019-02-27-windows-installers/" class="dib f6 pl1 hover-bg-light-gray br-100" title="Windows 安装程序更新 "> <a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="dib f6 pl1 hover-bg-light-gray br-100" title="什么是 CI/CD? ">
<svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg"> <svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg">
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/> <path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
<path d="M0 0h24v24H0z" fill="none"/> <path d="M0 0h24v24H0z" fill="none"/>
......
...@@ -239,7 +239,7 @@ ...@@ -239,7 +239,7 @@
在 12 月 18 号(UTC时间下午4点)我们也会在 Jenkins 在线 Meetup 展示对 Java 11 的预览支持。(<a href="https://www.meetup.com/Jenkins-online-meetup/events/257008190/">链接</a></p> 在 12 月 18 号(UTC时间下午4点)我们也会在 Jenkins 在线 Meetup 展示对 Java 11 的预览支持。(<a href="https://www.meetup.com/Jenkins-online-meetup/events/257008190/">链接</a></p>
</blockquote> </blockquote>
<p><img src="images/logos/formal/256.png" alt="Jenkins Java" /></p> <p><img src="../../../images/logos/formal/256.png" alt="Jenkins Java" /></p>
<p>Jenkins 作为领先的开源自动化服务器之一,目前仍然只支持到 Java 8。在 9 月 25 日 OpenJDK 11 发布了。这是一个长期支持版本,并将持续多年,我们想要在 Jenkins 项目中对这个版本进行全面的支持。在过去的一年中,许多贡献者一直致力于在项目中支持 Java 11(Jenkins JEP-211)。这是一条艰辛的道路,但是现在,代表 <a href="https://jenkins.io/sigs/platform">Jenkins Platform SIG</a>,我们很高兴的宣布在 Jenkins 每周发布提供 Java 11 预览!</p> <p>Jenkins 作为领先的开源自动化服务器之一,目前仍然只支持到 Java 8。在 9 月 25 日 OpenJDK 11 发布了。这是一个长期支持版本,并将持续多年,我们想要在 Jenkins 项目中对这个版本进行全面的支持。在过去的一年中,许多贡献者一直致力于在项目中支持 Java 11(Jenkins JEP-211)。这是一条艰辛的道路,但是现在,代表 <a href="https://jenkins.io/sigs/platform">Jenkins Platform SIG</a>,我们很高兴的宣布在 Jenkins 每周发布提供 Java 11 预览!</p>
......
...@@ -361,8 +361,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -361,8 +361,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link"> <a href="/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线 简析 Jenkins 专有用户数据库加密算法
</a> </a>
</li> </li>
...@@ -373,6 +373,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -373,6 +373,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
</li> </li>
<li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线
</a>
</li>
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link"> <a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link">
介绍:成为一名 Jenkins 贡献者的旅程 介绍:成为一名 Jenkins 贡献者的旅程
......
...@@ -194,7 +194,7 @@ ...@@ -194,7 +194,7 @@
<a href="https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="dib f6 pr1 hover-bg-light-gray br-100" title="使用 YAML 文件配置 Jenkins 流水线"> <a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="dib f6 pr1 hover-bg-light-gray br-100" title="什么是 CI/CD?">
<svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg"> <svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg">
<path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/> <path d="M10 6L8.59 7.41 13.17 12l-4.58 4.59L10 18l6-6z"/>
<path d="M0 0h24v24H0z" fill="none"/> <path d="M0 0h24v24H0z" fill="none"/>
......
...@@ -518,8 +518,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -518,8 +518,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link"> <a href="/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线 简析 Jenkins 专有用户数据库加密算法
</a> </a>
</li> </li>
...@@ -530,6 +530,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -530,6 +530,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
</li> </li>
<li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线
</a>
</li>
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link"> <a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link">
介绍:成为一名 Jenkins 贡献者的旅程 介绍:成为一名 Jenkins 贡献者的旅程
......
...@@ -442,8 +442,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -442,8 +442,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link"> <a href="/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线 简析 Jenkins 专有用户数据库加密算法
</a> </a>
</li> </li>
...@@ -454,6 +454,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -454,6 +454,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
</li> </li>
<li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线
</a>
</li>
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link"> <a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link">
介绍:成为一名 Jenkins 贡献者的旅程 介绍:成为一名 Jenkins 贡献者的旅程
......
...@@ -160,6 +160,10 @@ ...@@ -160,6 +160,10 @@
<p class="lh-copy measure center mt0 f6 black-60">
致力于做一个卓越的实践者
</p>
<a href="https://github.com/donhui" target="_blank" class="link dim v-mid dib"> <a href="https://github.com/donhui" target="_blank" class="link dim v-mid dib">
<svg version="1.1" fill="gray" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="18" viewBox="0 0 27 32"> <svg version="1.1" fill="gray" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="18" viewBox="0 0 27 32">
<path d="M9.28 21.44q0.064-0.128-0.064-0.256-0.16-0.128-0.256-0.032-0.064 0.128 0.064 0.224 0.16 0.128 0.256 0.064zM8.768 20.704q-0.096-0.128-0.224-0.096-0.096 0.096 0 0.224 0.128 0.16 0.224 0.096t0-0.224zM8.032 19.968q0.032-0.064-0.096-0.128-0.128-0.032-0.128 0.032-0.064 0.096 0.064 0.16 0.16 0.032 0.16-0.064zM8.416 20.384q0.032 0 0.032-0.064t-0.064-0.096q-0.128-0.128-0.192-0.064t0.032 0.192q0.096 0.096 0.192 0.032zM9.952 21.728q0.032-0.128-0.16-0.192-0.16-0.064-0.224 0.064t0.16 0.192q0.16 0.064 0.224-0.064zM10.688 21.792q0-0.16-0.192-0.16t-0.192 0.16 0.192 0.128 0.192-0.128zM11.392 21.664q-0.032-0.128-0.224-0.096t-0.16 0.16q0.032 0.16 0.192 0.096t0.192-0.16zM22.848 16q0-3.776-2.656-6.464t-6.464-2.688-6.464 2.688-2.688 6.464q0 2.976 1.76 5.376t4.48 3.296q0.32 0.064 0.48-0.096t0.16-0.352q0-0.928-0.032-1.696-0.096 0.032-0.256 0.064t-0.64 0.032-0.864-0.096-0.768-0.352-0.544-0.736q-0.416-1.056-1.024-1.312-0.032-0.032-0.064-0.064l-0.16-0.16t-0.096-0.16 0.064-0.128 0.352-0.064q0.096 0 0.256 0.032t0.544 0.288 0.576 0.64q0.288 0.48 0.672 0.736t0.768 0.256 0.704-0.064 0.512-0.16q0.128-0.864 0.608-1.248-0.896-0.096-1.536-0.32t-1.312-0.704-0.992-1.344-0.352-2.144q0-1.408 0.96-2.464-0.448-1.088 0.096-2.4 0.32-0.128 0.96 0.128t1.088 0.512l0.448 0.288q1.056-0.288 2.304-0.288t2.272 0.288q0.192-0.128 0.512-0.32t0.992-0.448 1.024-0.16q0.512 1.312 0.096 2.4 0.928 1.056 0.928 2.464 0 1.024-0.256 1.792t-0.64 1.248-0.928 0.8-1.12 0.448-1.216 0.224q0.608 0.544 0.608 1.696 0 0.704 0 1.6t-0.032 0.896q0 0.224 0.16 0.352t0.48 0.096q2.752-0.928 4.512-3.296t1.728-5.376zM27.424 7.424v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z"></path> <path d="M9.28 21.44q0.064-0.128-0.064-0.256-0.16-0.128-0.256-0.032-0.064 0.128 0.064 0.224 0.16 0.128 0.256 0.064zM8.768 20.704q-0.096-0.128-0.224-0.096-0.096 0.096 0 0.224 0.128 0.16 0.224 0.096t0-0.224zM8.032 19.968q0.032-0.064-0.096-0.128-0.128-0.032-0.128 0.032-0.064 0.096 0.064 0.16 0.16 0.032 0.16-0.064zM8.416 20.384q0.032 0 0.032-0.064t-0.064-0.096q-0.128-0.128-0.192-0.064t0.032 0.192q0.096 0.096 0.192 0.032zM9.952 21.728q0.032-0.128-0.16-0.192-0.16-0.064-0.224 0.064t0.16 0.192q0.16 0.064 0.224-0.064zM10.688 21.792q0-0.16-0.192-0.16t-0.192 0.16 0.192 0.128 0.192-0.128zM11.392 21.664q-0.032-0.128-0.224-0.096t-0.16 0.16q0.032 0.16 0.192 0.096t0.192-0.16zM22.848 16q0-3.776-2.656-6.464t-6.464-2.688-6.464 2.688-2.688 6.464q0 2.976 1.76 5.376t4.48 3.296q0.32 0.064 0.48-0.096t0.16-0.352q0-0.928-0.032-1.696-0.096 0.032-0.256 0.064t-0.64 0.032-0.864-0.096-0.768-0.352-0.544-0.736q-0.416-1.056-1.024-1.312-0.032-0.032-0.064-0.064l-0.16-0.16t-0.096-0.16 0.064-0.128 0.352-0.064q0.096 0 0.256 0.032t0.544 0.288 0.576 0.64q0.288 0.48 0.672 0.736t0.768 0.256 0.704-0.064 0.512-0.16q0.128-0.864 0.608-1.248-0.896-0.096-1.536-0.32t-1.312-0.704-0.992-1.344-0.352-2.144q0-1.408 0.96-2.464-0.448-1.088 0.096-2.4 0.32-0.128 0.96 0.128t1.088 0.512l0.448 0.288q1.056-0.288 2.304-0.288t2.272 0.288q0.192-0.128 0.512-0.32t0.992-0.448 1.024-0.16q0.512 1.312 0.096 2.4 0.928 1.056 0.928 2.464 0 1.024-0.256 1.792t-0.64 1.248-0.928 0.8-1.12 0.448-1.216 0.224q0.608 0.544 0.608 1.696 0 0.704 0 1.6t-0.032 0.896q0 0.224 0.16 0.352t0.48 0.096q2.752-0.928 4.512-3.296t1.728-5.376zM27.424 7.424v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z"></path>
......
...@@ -451,8 +451,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -451,8 +451,8 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
<li class="db dib-l mb2 mr3"> <li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link"> <a href="/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线 简析 Jenkins 专有用户数据库加密算法
</a> </a>
</li> </li>
...@@ -463,6 +463,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -463,6 +463,15 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
</li> </li>
<li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link">
Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线
</a>
</li>
......
...@@ -160,6 +160,10 @@ ...@@ -160,6 +160,10 @@
<p class="lh-copy measure center mt0 f6 black-60">
致力于做一个卓越的实践者
</p>
<a href="https://github.com/donhui" target="_blank" class="link dim v-mid dib"> <a href="https://github.com/donhui" target="_blank" class="link dim v-mid dib">
<svg version="1.1" fill="gray" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="18" viewBox="0 0 27 32"> <svg version="1.1" fill="gray" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="16" height="18" viewBox="0 0 27 32">
<path d="M9.28 21.44q0.064-0.128-0.064-0.256-0.16-0.128-0.256-0.032-0.064 0.128 0.064 0.224 0.16 0.128 0.256 0.064zM8.768 20.704q-0.096-0.128-0.224-0.096-0.096 0.096 0 0.224 0.128 0.16 0.224 0.096t0-0.224zM8.032 19.968q0.032-0.064-0.096-0.128-0.128-0.032-0.128 0.032-0.064 0.096 0.064 0.16 0.16 0.032 0.16-0.064zM8.416 20.384q0.032 0 0.032-0.064t-0.064-0.096q-0.128-0.128-0.192-0.064t0.032 0.192q0.096 0.096 0.192 0.032zM9.952 21.728q0.032-0.128-0.16-0.192-0.16-0.064-0.224 0.064t0.16 0.192q0.16 0.064 0.224-0.064zM10.688 21.792q0-0.16-0.192-0.16t-0.192 0.16 0.192 0.128 0.192-0.128zM11.392 21.664q-0.032-0.128-0.224-0.096t-0.16 0.16q0.032 0.16 0.192 0.096t0.192-0.16zM22.848 16q0-3.776-2.656-6.464t-6.464-2.688-6.464 2.688-2.688 6.464q0 2.976 1.76 5.376t4.48 3.296q0.32 0.064 0.48-0.096t0.16-0.352q0-0.928-0.032-1.696-0.096 0.032-0.256 0.064t-0.64 0.032-0.864-0.096-0.768-0.352-0.544-0.736q-0.416-1.056-1.024-1.312-0.032-0.032-0.064-0.064l-0.16-0.16t-0.096-0.16 0.064-0.128 0.352-0.064q0.096 0 0.256 0.032t0.544 0.288 0.576 0.64q0.288 0.48 0.672 0.736t0.768 0.256 0.704-0.064 0.512-0.16q0.128-0.864 0.608-1.248-0.896-0.096-1.536-0.32t-1.312-0.704-0.992-1.344-0.352-2.144q0-1.408 0.96-2.464-0.448-1.088 0.096-2.4 0.32-0.128 0.96 0.128t1.088 0.512l0.448 0.288q1.056-0.288 2.304-0.288t2.272 0.288q0.192-0.128 0.512-0.32t0.992-0.448 1.024-0.16q0.512 1.312 0.096 2.4 0.928 1.056 0.928 2.464 0 1.024-0.256 1.792t-0.64 1.248-0.928 0.8-1.12 0.448-1.216 0.224q0.608 0.544 0.608 1.696 0 0.704 0 1.6t-0.032 0.896q0 0.224 0.16 0.352t0.48 0.096q2.752-0.928 4.512-3.296t1.728-5.376zM27.424 7.424v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z"></path> <path d="M9.28 21.44q0.064-0.128-0.064-0.256-0.16-0.128-0.256-0.032-0.064 0.128 0.064 0.224 0.16 0.128 0.256 0.064zM8.768 20.704q-0.096-0.128-0.224-0.096-0.096 0.096 0 0.224 0.128 0.16 0.224 0.096t0-0.224zM8.032 19.968q0.032-0.064-0.096-0.128-0.128-0.032-0.128 0.032-0.064 0.096 0.064 0.16 0.16 0.032 0.16-0.064zM8.416 20.384q0.032 0 0.032-0.064t-0.064-0.096q-0.128-0.128-0.192-0.064t0.032 0.192q0.096 0.096 0.192 0.032zM9.952 21.728q0.032-0.128-0.16-0.192-0.16-0.064-0.224 0.064t0.16 0.192q0.16 0.064 0.224-0.064zM10.688 21.792q0-0.16-0.192-0.16t-0.192 0.16 0.192 0.128 0.192-0.128zM11.392 21.664q-0.032-0.128-0.224-0.096t-0.16 0.16q0.032 0.16 0.192 0.096t0.192-0.16zM22.848 16q0-3.776-2.656-6.464t-6.464-2.688-6.464 2.688-2.688 6.464q0 2.976 1.76 5.376t4.48 3.296q0.32 0.064 0.48-0.096t0.16-0.352q0-0.928-0.032-1.696-0.096 0.032-0.256 0.064t-0.64 0.032-0.864-0.096-0.768-0.352-0.544-0.736q-0.416-1.056-1.024-1.312-0.032-0.032-0.064-0.064l-0.16-0.16t-0.096-0.16 0.064-0.128 0.352-0.064q0.096 0 0.256 0.032t0.544 0.288 0.576 0.64q0.288 0.48 0.672 0.736t0.768 0.256 0.704-0.064 0.512-0.16q0.128-0.864 0.608-1.248-0.896-0.096-1.536-0.32t-1.312-0.704-0.992-1.344-0.352-2.144q0-1.408 0.96-2.464-0.448-1.088 0.096-2.4 0.32-0.128 0.96 0.128t1.088 0.512l0.448 0.288q1.056-0.288 2.304-0.288t2.272 0.288q0.192-0.128 0.512-0.32t0.992-0.448 1.024-0.16q0.512 1.312 0.096 2.4 0.928 1.056 0.928 2.464 0 1.024-0.256 1.792t-0.64 1.248-0.928 0.8-1.12 0.448-1.216 0.224q0.608 0.544 0.608 1.696 0 0.704 0 1.6t-0.032 0.896q0 0.224 0.16 0.352t0.48 0.096q2.752-0.928 4.512-3.296t1.728-5.376zM27.424 7.424v17.152q0 2.112-1.504 3.616t-3.648 1.536h-17.12q-2.144 0-3.648-1.536t-1.504-3.616v-17.152q0-2.112 1.504-3.616t3.648-1.536h17.12q2.144 0 3.648 1.536t1.504 3.616z"></path>
...@@ -182,6 +186,14 @@ ...@@ -182,6 +186,14 @@
</a> </a>
<a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/" class="dib f6 pl1 hover-bg-light-gray br-100" title="简析 Jenkins 专有用户数据库加密算法 ">
<svg class="fill-current" height="30px" viewBox="0 0 24 24" width="30px" xmlns="http://www.w3.org/2000/svg">
<path d="M15.41 7.41L14 6l-6 6 6 6 1.41-1.41L10.83 12z"/>
<path d="M0 0h24v24H0z" fill="none"/>
</svg>
</a>
<a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="dib f6 pr1 hover-bg-light-gray br-100" title="介绍:成为一名 Jenkins 贡献者的旅程"> <a href="https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="dib f6 pr1 hover-bg-light-gray br-100" title="介绍:成为一名 Jenkins 贡献者的旅程">
...@@ -404,6 +416,19 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link ...@@ -404,6 +416,19 @@ f6 ph3 pv1 br2 dib tc ttu mv3 bg-primary-color white hover-bg-green link
<li class="db b mt4 mb2 mr2">
Related entries:
</li>
<li class="db dib-l mb2 mr3">
<a href="/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="link">
什么是 CI/CD?
</a>
</li>
</ul> </ul>
</div> </div>
......
...@@ -32,7 +32,7 @@ ...@@ -32,7 +32,7 @@
<meta property="og:description" content="" /> <meta property="og:description" content="" />
<meta property="og:type" content="website" /> <meta property="og:type" content="website" />
<meta property="og:url" content="https://jenkins-zh.github.io/wechat/" /> <meta property="og:url" content="https://jenkins-zh.github.io/wechat/" />
<meta property="og:updated_time" content="2019-04-10T00:00:00&#43;00:00"/> <meta property="og:updated_time" content="2019-04-12T00:00:00&#43;00:00"/>
<meta itemprop="name" content="Wechats"> <meta itemprop="name" content="Wechats">
<meta itemprop="description" content=""> <meta itemprop="description" content="">
...@@ -158,6 +158,31 @@ ...@@ -158,6 +158,31 @@
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="link primary-color dim">Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</a>
</h1>
<div class="lh-copy links">
本文是容器化现有 Java 应用以及使用 Jenkins 建立一个端到端部署流水线的指南
<a href="/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px"> <div class="relative weight-0" style="max-width: 350px">
...@@ -166,15 +191,15 @@ ...@@ -166,15 +191,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/04/2019-04-03-the-benefits-and-challenges-of-continuous-integration/" class="link primary-color dim">持续集成的收益与挑战</a> <a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="link primary-color dim">介绍:成为一名 Jenkins 贡献者的旅程</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
本文介绍了持续集成的定义,并解释了实施CI的各种收益与挑战 如何从零开始成为开源社区贡献者
<a href="/wechat/articles/2019/04/2019-04-03-the-benefits-and-challenges-of-continuous-integration/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/04/2019-04-08-becoming-contributor-intro/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -193,15 +218,15 @@ ...@@ -193,15 +218,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-18-weekly-version/" class="link primary-color dim">Jenkins 更新通知</a> <a href="/wechat/articles/2019/04/2019-04-03-the-benefits-and-challenges-of-continuous-integration/" class="link primary-color dim">持续集成的收益与挑战</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
Jenkins LTS、Weekly 以及简体中文插件更新 本文介绍了持续集成的定义,并解释了实施CI的各种收益与挑战
<a href="/wechat/articles/2019/03/2019-03-18-weekly-version/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/04/2019-04-03-the-benefits-and-challenges-of-continuous-integration/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -220,15 +245,15 @@ ...@@ -220,15 +245,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-20-cdf-launch/" class="link primary-color dim">Jenkins 正在加入持续交付基金会</a> <a href="/wechat/articles/2019/03/2019-03-18-weekly-version/" class="link primary-color dim">Jenkins 更新通知</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
Jenkins 社区牵头成立 CDF Jenkins LTS、Weekly 以及简体中文插件更新
<a href="/wechat/articles/2019/03/2019-03-20-cdf-launch/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/03/2019-03-18-weekly-version/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -247,15 +272,15 @@ ...@@ -247,15 +272,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="link primary-color dim">Electron 应用的流水线设计</a> <a href="/wechat/articles/2019/03/2019-03-20-cdf-launch/" class="link primary-color dim">Jenkins 正在加入持续交付基金会</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
跨平台构建的流水线 demo Jenkins 社区牵头成立 CDF
<a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/03/2019-03-20-cdf-launch/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -274,15 +299,15 @@ ...@@ -274,15 +299,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-13-gsoc2019-announcement/" class="link primary-color dim">Jenkins 已经被 Google Summer Of Code 2019 接受!</a> <a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="link primary-color dim">Electron 应用的流水线设计</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
19年的 Google Summer Of Code 正式起航 跨平台构建的流水线 demo
<a href="/wechat/articles/2019/03/2019-03-13-gsoc2019-announcement/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/03/2019-03-13-electron-pipeline-demo/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -301,15 +326,15 @@ ...@@ -301,15 +326,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-03-13-ready-for-cdf/" class="link primary-color dim">为 Continuous Delivery Foundation 的成立感到兴奋</a> <a href="/wechat/articles/2019/03/2019-03-13-gsoc2019-announcement/" class="link primary-color dim">Jenkins 已经被 Google Summer Of Code 2019 接受!</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
CDF 就要来啦 19年的 Google Summer Of Code 正式起航
<a href="/wechat/articles/2019/03/2019-03-13-ready-for-cdf/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/03/2019-03-13-gsoc2019-announcement/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -328,15 +353,15 @@ ...@@ -328,15 +353,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/03/2019-01-08-mpl-modular-pipeline-library/" class="link primary-color dim">MPL - 模块化的流水线库</a> <a href="/wechat/articles/2019/03/2019-03-13-ready-for-cdf/" class="link primary-color dim">为 Continuous Delivery Foundation 的成立感到兴奋</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
Jenkins 流水线共享库技术实践 CDF 就要来啦
<a href="/wechat/articles/2019/03/2019-01-08-mpl-modular-pipeline-library/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/03/2019-03-13-ready-for-cdf/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -355,15 +380,15 @@ ...@@ -355,15 +380,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/02/2019-02-27-jenkins-script-console-in-practice/" class="link primary-color dim">批量修改 Jenkins 任务的技巧</a> <a href="/wechat/articles/2019/03/2019-01-08-mpl-modular-pipeline-library/" class="link primary-color dim">MPL - 模块化的流水线库</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
Jenkins 脚本命令行的一种实践 Jenkins 流水线共享库技术实践
<a href="/wechat/articles/2019/02/2019-02-27-jenkins-script-console-in-practice/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/03/2019-01-08-mpl-modular-pipeline-library/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -413,12 +438,23 @@ ...@@ -413,12 +438,23 @@
<li class="page-item"><a class="page-link" href="/wechat/page/2/">2</a></li> <li class="page-item"><a class="page-link" href="/wechat/page/2/">2</a></li>
<li class="page-item"><a class="page-link" href="/wechat/page/3/">3</a></li>
<li class="page-item"> <li class="page-item">
<a href="/wechat/page/2/" class="page-link" aria-label="Next"><span aria-hidden="true">&raquo;</span></a> <a href="/wechat/page/2/" class="page-link" aria-label="Next"><span aria-hidden="true">&raquo;</span></a>
</li> </li>
<li class="page-item"> <li class="page-item">
<a href="/wechat/page/2/" class="page-link" aria-label="Last"><span aria-hidden="true">&raquo;&raquo;</span></a> <a href="/wechat/page/3/" class="page-link" aria-label="Last"><span aria-hidden="true">&raquo;&raquo;</span></a>
</li> </li>
</ul> </ul>
......
...@@ -6,11 +6,26 @@ ...@@ -6,11 +6,26 @@
<description>Recent content in Wechats on Jenkins 中文社区</description> <description>Recent content in Wechats on Jenkins 中文社区</description>
<generator>Hugo -- gohugo.io</generator> <generator>Hugo -- gohugo.io</generator>
<language>zh-CN</language> <language>zh-CN</language>
<lastBuildDate>Wed, 10 Apr 2019 00:00:00 +0000</lastBuildDate> <lastBuildDate>Fri, 12 Apr 2019 00:00:00 +0000</lastBuildDate>
<atom:link href="https://jenkins-zh.github.io/wechat/index.xml" rel="self" type="application/rss+xml" /> <atom:link href="https://jenkins-zh.github.io/wechat/index.xml" rel="self" type="application/rss+xml" />
<item>
<title>简析 Jenkins 专有用户数据库加密算法</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/</link>
<pubDate>Fri, 12 Apr 2019 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-brief-analysis-the-encryption-algorithm-of-the-built-in-jenkins-user-database/</guid>
<description>认识Jenkins专有用户数据库 Jenkins 访问控制分为:安全域(即认证)与授权策略。
其中,安全域可以采用三种形式,分别为:Jenkins 专有用户数据库、LDAP、Servlet 容器代理。 在哪里看到加密后的用户密码信息? Jenkins 专有用户的数据信息存放位置:$JENKINS_HOME/users/
每个用户的相关信息存放在各自的 config.xml 文件中: $JENKINS_HOME/users/$user/config.xml
在 config.xml 文件中的 passwordHash 节点可以看到用户密码加密后的密文哈希值: 用户密码是用什么算法加密的呢? 那么问题来了,用户密码是用何种加密方式加密的呢?可否通过解密密文得到明文呢?
在 GitHub 上查看其源码,通过关键字 #jbcrypt 搜索定位到 HudsonPrivateSecurityRealm.java 这个文件。 HudsonPrivateSecurityRealm.java 具体路径是:jenkins/core/src/main/java/hudson/security/HudsonPrivateSecurityRealm.java
源码片段如下:
/** * {@link PasswordEncoder} that uses jBCrypt. */ private static final PasswordEncoder JBCRYPT_ENCODER = new PasswordEncoder() { public String encodePassword(String rawPass, Object _) throws DataAccessException { return BCrypt.hashpw(rawPass,BCrypt.gensalt()); } public boolean isPasswordValid(String encPass, String rawPass, Object _) throws DataAccessException { return BCrypt.</description>
</item>
<item> <item>
<title>Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</title> <title>Java 应用使用 Docker 的入门指南:建立一个 CI/CD 流水线</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</link> <link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-10-getting-started-with-docker-for-java-applications/</link>
...@@ -254,6 +269,24 @@ import jenkins.model.Jenkins import hudson.model.Job import jenkins.model.BuildD ...@@ -254,6 +269,24 @@ import jenkins.model.Jenkins import hudson.model.Job import jenkins.model.BuildD
安装程序将只支持64位系统,这也是如今大多数 Windows 系统的现状,所以能让更多的用户能够使用安装包来安装 Jenkins。 用户能够为服务输入用户信息,同时选择端口以便于 Jenkins 验证端口是否可用。 安装程序不再捆绑 JRE 而是在操作系统中寻找合适的 JRE。如果用户想要使用一个不同的 JRE,可以在安装时指定。 安装程序已经支持 Java 11,包括在 Java 11 预览上面列出的组件。 JENKINS_HOME 目录被放置在启动服务用户的 LocalAppData 目录下,这与现代 Windows 文件系统布局一致。 安装程序已经升级带有品牌了,这让它看起来更酷并能提供一个更好的用户体验。 截图 以下是新安装程序的系列屏幕截图:</description> 安装程序将只支持64位系统,这也是如今大多数 Windows 系统的现状,所以能让更多的用户能够使用安装包来安装 Jenkins。 用户能够为服务输入用户信息,同时选择端口以便于 Jenkins 验证端口是否可用。 安装程序不再捆绑 JRE 而是在操作系统中寻找合适的 JRE。如果用户想要使用一个不同的 JRE,可以在安装时指定。 安装程序已经支持 Java 11,包括在 Java 11 预览上面列出的组件。 JENKINS_HOME 目录被放置在启动服务用户的 LocalAppData 目录下,这与现代 Windows 文件系统布局一致。 安装程序已经升级带有品牌了,这让它看起来更酷并能提供一个更好的用户体验。 截图 以下是新安装程序的系列屏幕截图:</description>
</item> </item>
<item>
<title>什么是 CI/CD?</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</link>
<pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate>
<guid>https://jenkins-zh.github.io/wechat/articles/2019/04/2019-04-12-what-is-cicd/</guid>
<description>CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。
开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。
持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: &amp;ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。&amp;rdquo;
持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。
这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。
当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。
CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。</description>
</item>
<item> <item>
<title>使用 YAML 文件配置 Jenkins 流水线</title> <title>使用 YAML 文件配置 Jenkins 流水线</title>
<link>https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/</link> <link>https://jenkins-zh.github.io/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/</link>
......
...@@ -161,6 +161,33 @@ ...@@ -161,6 +161,33 @@
<div class="bg-white mb2 pa3 pa4-l gray"> <div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/02/2019-02-27-jenkins-script-console-in-practice/" class="link primary-color dim">批量修改 Jenkins 任务的技巧</a>
</h1>
<div class="lh-copy links">
Jenkins 脚本命令行的一种实践
<a href="/wechat/articles/2019/02/2019-02-27-jenkins-script-console-in-practice/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/02/2019-02-27-contribution-inspire/" class="link primary-color dim">社区贡献激励活动</a> <a href="/wechat/articles/2019/02/2019-02-27-contribution-inspire/" class="link primary-color dim">社区贡献激励活动</a>
</h1> </h1>
...@@ -354,42 +381,24 @@ ...@@ -354,42 +381,24 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="link primary-color dim">使用 YAML 文件配置 Jenkins 流水线</a> <a href="/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="link primary-color dim">什么是 CI/CD?</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
这也是一种自定义流水线 DSL 的方法 CI/CD 的出现改变了开发人员和测试人员发布软件的方式。本文是描述这一变化的系列文章第一篇, 这些文章将提供各种工具和流程的讲解,以帮助开发人员更好的使用 CI/CD。
从最初的 瀑布模型, 到后来的 敏捷开发, 再到今天的 DevOps, 这是现代开发人员构建出色产品的技术路线。 随着 DevOps 的兴起,出现了持续集成,持续交付(CI/CD)和持续部署的新方法, 而传统的软件开发和交付方式在迅速变得过时。过去的敏捷时代里, 大多数公司的软件发布周期是每月、每季度甚至每年(还记得那些日子吗?), 而在现在 DevOps 时代,每周、每天甚至每天多次都是常态。 当 SaaS 成为业界主流后尤其如此,您可以轻松地动态更新应用程序, 而无需强迫用户下载更新组件。很多时候,用户甚至都不会注意到正在发生变化。
开发团队通过软件交付流水线(Pipeline)实现自动化,以缩短交付周期, 大多数团队都有自动化流程来检查代码并部署到新环境。 我们一直在关注自动化测试流程,但这将在之后的文章中介绍。 今天,我们将介绍什么是 CI/CD/CD ,以及现代软件公司如何使用工具将部署代码的流程自动化。
<a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="f6 mt2 db link primary-color dim"> 持续集成注重将各个开发者的工作集合到一个代码仓库中,通常每天会进行几次, 主要目的是尽早发现集成错误,使团队更加紧密结合,更好地协作。 持续交付的目的是最小化部署或发布过程中团队固有的摩擦, 它的实现通常能够将构建部署的每个步骤自动化,以便任何时刻能够安全地完成代码发布(理想情况下)。 持续部署是一种更高程度的自动化,无论何时代码有较大改动, 都会自动进行构建/部署。
查看更多 &raquo; 以上的每一个阶段都是交付流水线的一部分。 Humble 和 Ferley 在他们的书作《持续交付:通过自动化构建、测试和部署实现可靠软件版本发布》中解释说: &ldquo;对软件的每次更改都要经过一个复杂的过程才能发布,该过程包括多个测试和部署阶段进行软件的构建。 反过来看,这个过程需要许多人之间的合作,甚至可能需要几个团队间合作。 部署流水线对这一过程进行建模,并且它的持续集成和发布管理工具能让您在代码从版本控制转移到各种测试和部署时, 查看和控制每次更改的过程。&rdquo;
</a> 持续集成(CI) 通过持续集成,开发人员能够频繁地将其代码集成到公共代码仓库的主分支中。 开发人员能够在任何时候多次向仓库提交作品,而不是独立地开发每个功能模块并在开发周期结束时一一提交。
这里的一个重要思想就是让开发人员更快更、频繁地做到这一点,从而降低集成的开销。 实际情况中,开发人员在集成时经常会发现新代码和已有代码存在冲突。 如果集成较早并更加频繁,那么冲突将更容易解决且执行成本更低。
</div> 当然,这里也有一些权衡,这个流程不提供额外的质量保障。 事实上,许多组织发现这样的集成方式开销更大,因为它们依赖人工确保新代码不会引起新的 bug 或者破坏现有代码。 为了减少集成期间的摩擦,持续集成依赖于测试套件和自动化测试。 然而,要认识到自动化测试和持续测试是完全不同的这一点很重要,我们会在文章结尾处详细说明。
CI 的目标是将集成简化成一个简单、易于重复的日常开发任务, 这样有助于降低总体的构建成本并在开发周期的早期发现缺陷。 要想有效地使用 CI 必须转变开发团队的习惯,要鼓励频繁迭代构建, 并且在发现 bug 的早期积极解决。
持续交付(CD)实际上是 CI 的扩展,其中软件交付流程进一步自动化,以便随时轻松地部署到生成环境中。 成熟的持续交付方案也展示了一个始终可部署的代码库。使用 CD 后,软件发布将成为一个没有任何紧张感的例行事件。 开发团队可以在日常开发的任何时间进行产品级的发布,而不需要详细的发布方案或者特殊的后期测试。
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019/01/2019-01-16-webhook-firewalls/" class="link primary-color dim">在安全防火墙内通过 WebHook 触发构建</a>
</h1>
<div class="lh-copy links">
谁说局域网里就不能带 GitHub 的 WebHook 玩?
<a href="/wechat/articles/2019/01/2019-01-16-webhook-firewalls/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/04/2019-04-12-what-is-cicd/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -408,15 +417,15 @@ ...@@ -408,15 +417,15 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019/01/2019-01-09-jenkins-evergreen/" class="link primary-color dim">自动更新、易于使用的 Jenkins</a> <a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="link primary-color dim">使用 YAML 文件配置 Jenkins 流水线</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
借助 Evergreen 持续提供易于使用的 Jenkins 这也是一种自定义流水线 DSL 的方法
<a href="/wechat/articles/2019/01/2019-01-09-jenkins-evergreen/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/01/2019-01-23-configuring-jenkins-pipeline-with-yaml-file/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -466,12 +475,23 @@ ...@@ -466,12 +475,23 @@
<li class="page-item active"><a class="page-link" href="/wechat/page/2/">2</a></li> <li class="page-item active"><a class="page-link" href="/wechat/page/2/">2</a></li>
<li class="page-item disabled">
<a href="" class="page-link" aria-label="Next"><span aria-hidden="true">&raquo;</span></a>
<li class="page-item"><a class="page-link" href="/wechat/page/3/">3</a></li>
<li class="page-item">
<a href="/wechat/page/3/" class="page-link" aria-label="Next"><span aria-hidden="true">&raquo;</span></a>
</li> </li>
<li class="page-item"> <li class="page-item">
<a href="/wechat/page/2/" class="page-link" aria-label="Last"><span aria-hidden="true">&raquo;&raquo;</span></a> <a href="/wechat/page/3/" class="page-link" aria-label="Last"><span aria-hidden="true">&raquo;&raquo;</span></a>
</li> </li>
</ul> </ul>
......
...@@ -161,34 +161,7 @@ ...@@ -161,34 +161,7 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2018-11-21-validate-jenkinsfile/" class="link primary-color dim">在 VS Code 中校验 Jenkinsfile</a> <a href="/wechat/articles/2019/01/2019-01-16-webhook-firewalls/" class="link primary-color dim">在安全防火墙内通过 WebHook 触发构建</a>
</h1>
<div class="lh-copy links">
VS Code 中的 Jenkinsfile 插件
<a href="/wechat/articles/2018-11-21-validate-jenkinsfile/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo;
</a>
</div>
</div>
</div>
<div class="relative weight-0" style="max-width: 350px">
<div class="bg-white mb2 pa3 pa4-l gray">
<h1 class="near-black f3">
<a href="/wechat/articles/2019-01-16-webhook-firewalls/" class="link primary-color dim">在安全防火墙内通过 WebHook 触发构建</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
...@@ -196,7 +169,7 @@ ...@@ -196,7 +169,7 @@
谁说局域网里就不能带 GitHub 的 WebHook 玩? 谁说局域网里就不能带 GitHub 的 WebHook 玩?
<a href="/wechat/articles/2019-01-16-webhook-firewalls/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/01/2019-01-16-webhook-firewalls/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
...@@ -215,7 +188,7 @@ ...@@ -215,7 +188,7 @@
<h1 class="near-black f3"> <h1 class="near-black f3">
<a href="/wechat/articles/2019-01-09-jenkins-evergreen/" class="link primary-color dim">自动更新、易于使用的 Jenkins</a> <a href="/wechat/articles/2019/01/2019-01-09-jenkins-evergreen/" class="link primary-color dim">自动更新、易于使用的 Jenkins</a>
</h1> </h1>
<div class="lh-copy links"> <div class="lh-copy links">
...@@ -223,7 +196,7 @@ ...@@ -223,7 +196,7 @@
借助 Evergreen 持续提供易于使用的 Jenkins 借助 Evergreen 持续提供易于使用的 Jenkins
<a href="/wechat/articles/2019-01-09-jenkins-evergreen/" class="f6 mt2 db link primary-color dim"> <a href="/wechat/articles/2019/01/2019-01-09-jenkins-evergreen/" class="f6 mt2 db link primary-color dim">
查看更多 &raquo; 查看更多 &raquo;
</a> </a>
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册