容器 & 服务:Jenkins构建实例

简介: 这次准备研究容器相关技术,并不仅仅是学习,而是基于项目的实战。而使用容器的几个典型场景之一,就是通过容器构建/部署应用服务,而这与持续继承是密切相关的。我们可以使用jenkins,也可以使用其他持续继承工具,但最终都离不开对这类工具的理解和应用。在后续的学习中,还会有很多与持续继承工具紧密关联的实践案例,也会有很多问题需要深入调研解决。

系列文章:

容器 & 服务:开篇,压力与资源

容器 & 服务:Jenkins 本地及 docker 安装部署

一 第一个demo

   使用的示例代码为java代码,github地址:https://github.com/flamingstar/simple-java-maven-app.git,是一个maven项目。

1.1 点击新建Item,创建一个新的项目

1.2 输入任务名称,选择任务类型

这里选择Freestyle project(自由风格的软件项目),然后确定即可。

1.3 配置详细内容

点击我们刚刚创建的任务,编辑内容:

需要填写的内容如下图所示,主要有项目参数(选填)、源码管理(必填)、构建脚本(必填):

1.3.1 源码

1.3.2 构建脚本

   这也是必填的一环。因为我们的代码都需要打包后再执行启动,所以脚本就负责做这些事情。另外,也可能会做版本校验(例如简单的md5判断当前执行的是否是最新代码、以及如果是分支代码,那么是否merge了最新的master等等)、邮件/短信消息发送等等。

   支持的构建步骤包括下面几种,我们这里选择shell:

之后就是编写shell脚本内容:

当前示例的脚本内容如下,核心内容就是mvn clean install -DskipTests=true,一个简单的maven打包脚本:

#!/bin/sh
. /etc/profile
mvnpackage(){
    cd $WORKSPACE
    mvn clean install -DskipTests=true
    if [ $? -eq 0 ];then
        echo "mvn package is success!"
    else
        echo -e 'mvn package is Failed!' && exit 1
    fi
    sleep 2
}
mvnpackage

1.3.3 构建参数

选填,不过真实的构建场景中都会包含。我们先设置两个主要参数:部署方式 和 代码分支。其中部署方式是选择类型参数:

代码分支设置成字符串参数:

这个可以根据实际情况,如果开发环境是固定上线分支,那么这里也可以设置为选择参数,避免随意填写代码分支导致失控。

1.4 执行

使用Build with Parameters,这里使用默认的参数配置即可,点击“开始构建”,构建执行:

点击Build History中正在进行中的构建任务,可以看到构建日志:

Started by user flamingsky
Running as SYSTEM
Building in workspace /Users/qingclass/.jenkins/workspace/第一个示例项目
The recommended git tool is: NONE
No credentials specified
Cloning the remote Git repository
Cloning repository https://github.com/flamingstar/simple-java-maven-app.git/
 > /usr/bin/git init /Users/qingclass/.jenkins/workspace/第一个示例项目 # timeout=10
Fetching upstream changes from https://github.com/flamingstar/simple-java-maven-app.git/
 > /usr/bin/git --version # timeout=10
 > git --version # 'git version 2.20.1 (Apple Git-117)'
 > /usr/bin/git fetch --tags --force --progress -- https://github.com/flamingstar/simple-java-maven-app.git/ +refs/heads/*:refs/remotes/origin/* # timeout=10
 > /usr/bin/git config remote.origin.url https://github.com/flamingstar/simple-java-maven-app.git/ # timeout=10
 > /usr/bin/git config --add remote.origin.fetch +refs/heads/*:refs/remotes/origin/* # timeout=10
Avoid second fetch
 > /usr/bin/git rev-parse origin/master^{commit} # timeout=10
Checking out Revision 0d85b7e1fd39bc6978511f92381aa10534ca4c1b (origin/master)
 > /usr/bin/git config core.sparsecheckout # timeout=10
 > /usr/bin/git checkout -f 0d85b7e1fd39bc6978511f92381aa10534ca4c1b # timeout=10
Commit message: "Amend README.md"
First time build. Skipping changelog.
[第一个示例项目] $ /bin/sh /var/folders/kp/g1qyjcd51zd3wn3l5jv4s4g00000gn/T/jenkins5354467303233794554.sh
[INFO] Scanning for projects...
[INFO] 
[INFO] ----------------------< com.mycompany.app:my-app >----------------------
[INFO] Building my-app 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:2.5:clean (default-clean) @ my-app ---
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ my-app ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/qingclass/.jenkins/workspace/第一个示例项目/src/main/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:compile (default-compile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to /Users/qingclass/.jenkins/workspace/第一个示例项目/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:2.6:testResources (default-testResources) @ my-app ---
[WARNING] Using platform encoding (UTF-8 actually) to copy filtered resources, i.e. build is platform dependent!
[INFO] skip non existing resourceDirectory /Users/qingclass/.jenkins/workspace/第一个示例项目/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.1:testCompile (default-testCompile) @ my-app ---
[INFO] Changes detected - recompiling the module!
[WARNING] File encoding has not been set, using platform encoding UTF-8, i.e. build is platform dependent!
[INFO] Compiling 1 source file to /Users/qingclass/.jenkins/workspace/第一个示例项目/target/test-classes
[INFO] 
[INFO] --- maven-surefire-plugin:2.12.4:test (default-test) @ my-app ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:3.0.2:jar (default-jar) @ my-app ---
[INFO] Building jar: /Users/qingclass/.jenkins/workspace/第一个示例项目/target/my-app-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ my-app ---
[INFO] Installing /Users/qingclass/.jenkins/workspace/第一个示例项目/target/my-app-1.0-SNAPSHOT.jar to /Users/qingclass/develop/tools/maven/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.jar
[INFO] Installing /Users/qingclass/.jenkins/workspace/第一个示例项目/pom.xml to /Users/qingclass/develop/tools/maven/repository/com/mycompany/app/my-app/1.0-SNAPSHOT/my-app-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  1.482 s
[INFO] Finished at: 2021-02-09T17:15:58+08:00
[INFO] ------------------------------------------------------------------------
mvn package is success!
Finished: SUCCESS

至此,第一个构建示例成功。

二 为什么要搭建jenkins

前面提到,我们是要深入研究容器和服务,那么为什么会花这么多篇幅来介绍jenkins?

这里做个说明。这次准备研究容器相关技术,并不仅仅是学习,而是基于项目的实战。而使用容器的几个典型场景之一,就是通过容器构建/部署应用服务,而这与持续继承是密切相关的。我们可以使用jenkins,也可以使用其他持续继承工具,但最终都离不开对这类工具的理解和应用。在后续的学习中,还会有很多与持续继承工具紧密关联的实践案例,也会有很多问题需要深入调研解决。基础很重要。

相关文章
|
4天前
|
jenkins Devops 机器人
【DevOps】(五)Jenkins构建给企业微信推送消息
【DevOps】(五)Jenkins构建给企业微信推送消息
13 1
|
2天前
|
机器学习/深度学习 监控 Kubernetes
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
【5月更文挑战第9天】本文探讨了Docker容器服务的自动扩展与缩容原理及实践,强调其在动态业务环境中的重要性。通过选择监控指标(如CPU使用率)、设定触发条件和制定扩展策略,实现资源的动态调整。方法包括云平台集成和使用Kubernetes等框架。实践中,电商平台和实时数据处理系统受益于此技术。注意点涉及监控数据准确性、扩展速度和资源分配。未来,智能算法将提升扩展缩容的效率和准确性,成为关键技术支持。
【Docker 专栏】Docker 容器内服务的自动扩展与缩容
|
3天前
|
运维 安全 Linux
深入理解Docker自定义网络:构建高效的容器网络环境
深入理解Docker自定义网络:构建高效的容器网络环境
|
3天前
|
存储 弹性计算 运维
Docker数据集与自定义镜像:构建高效容器的关键要素
Docker数据集与自定义镜像:构建高效容器的关键要素
|
3天前
|
算法 计算机视觉 Docker
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
Docker容器中的OpenCV:轻松构建可移植的计算机视觉环境
|
4天前
|
应用服务中间件 持续交付 nginx
【Docker专栏】Docker入门指南:快速构建你的第一个容器
【5月更文挑战第7天】Docker 入门指南:容器化应用利器。了解 Docker 核心概念——镜像、容器和仓库。安装 Docker 后,运行官方 `hello-world` 验证安装,再尝试运行 `nginx` Web 服务器。通过端口映射访问容器内服务,学习管理容器命令。创建自定义镜像,编写 Dockerfile,实现 Python Web 应用容器化。Docker 助力高效开发与运维,探索更多自动化部署与微服务场景。
【Docker专栏】Docker入门指南:快速构建你的第一个容器
|
5天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器化技术融合实践
【5月更文挑战第6天】随着企业IT架构的复杂化以及快速迭代的市场需求,传统的运维模式已难以满足高效率和高质量的交付标准。本文将探讨如何通过结合DevOps理念和容器化技术来构建一个高效的自动化运维体系,旨在实现持续集成、持续部署和自动化管理,提升系统的可靠性、可维护性和敏捷性。
|
10天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【5月更文挑战第1天】 随着云计算的普及和企业数字化转型的加速,传统的IT运维模式已无法满足快速迭代和高可用性的要求。本文探讨了如何通过DevOps文化和容器化技术的融合来构建一个高效、稳定且可扩展的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作的影响,随后详细介绍了容器化技术的基本概念、优势以及在现代云环境中的关键作用。接着,文中以一系列真实案例为基础,分析了将DevOps与容器化相结合时所面临的挑战和解决方案,并提出了一套实施框架。最后,文章总结了这种融合实践对提高运维效率、加快产品上市速度和保障系统稳定性的积极影响,同时对未来的技术趋势进行了展望。
|
11天前
|
敏捷开发 运维 测试技术
构建高效自动化运维体系:基于容器技术的持续集成与持续部署实践
【4月更文挑战第30天】在数字化转型的浪潮中,企业对软件交付速度和质量的要求日益提高。自动化运维作为提升效率、确保稳定性的关键手段,其重要性不言而喻。本文将探讨如何利用容器技术构建一个高效的自动化运维体系,实现从代码提交到产品上线的持续集成(CI)与持续部署(CD)。通过分析现代容器技术与传统虚拟化的差异,阐述容器化带来的轻量化、快速部署及易于管理的优势,并结合实例讲解如何在实际环境中搭建起一套完善的CI/CD流程。
|
11天前
|
Kubernetes Devops Docker
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第30天】 在当今快速迭代和持续交付的软件发展环境中,传统的IT运维模式已不足以满足企业对效率和稳定性的双重需求。本文将深入探讨如何通过整合DevOps理念和容器化技术来构建一个既高效又稳定的云基础设施。文中不仅阐述了DevOps的核心原则、流程自动化的重要性以及容器化技术的基础知识,还提供了一个详细的实施案例,帮助读者理解这两种技术如何协同工作,以支持复杂的应用程序部署和管理。

热门文章

最新文章