容器 & 服务: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月前
|
Linux 网络安全 Docker
盘古栈云,创建带ssh服务的linux容器
创建带ssh服务的linux容器
366 146
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
阿里云与企业共筑容器供应链安全
171936 127
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150544 32
|
10月前
|
jenkins Java Linux
Jenkins环境的部署及任务构建
以上就是Jenkins环境的部署及任务构建的全部内容。希望可以帮助你轻松上手Jenkins,让你的CI/CD之旅更加顺畅!
646 68
|
9月前
|
jenkins 持续交付 开发工具
利用Dockerfile自主构建Jenkins镜像
希望这个过程能善用你的野马般想象,把自己置身于和计算机的卓尔不凡的对话中,让编程的过程充满趣味。
350 36
|
8月前
|
Ubuntu jenkins 机器人
在Jenkins上配置触发Ubuntu环境的图形用户界面(GUI)构建任务。
以上,这趟融合了技术与艺术的Jenkins配置之旅就告一段落了。记住,技术应当像艺术一样有趣和生动,这样才能激发出最大的创新和效率。
239 2
|
12月前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
对话|企业如何构建更完善的容器供应链安全防护体系
对话|企业如何构建更完善的容器供应链安全防护体系
|
11月前
|
Kubernetes 安全 数据安全/隐私保护
容器云服务是什么?
容器云基于容器技术,实现应用及其依赖的标准化封装,支持跨平台快速部署和高效管理。与传统虚拟机相比,容器共享宿主机操作系统内核,资源占用少、启动快,但隔离性稍弱。Docker Engine通过Dockerfile定义应用环境并生成容器镜像,适合单机场景;Kubernetes作为行业标准编排工具,支持自动扩缩容和服务发现,适用于大规模集群管理;OpenShift提供企业级全流程平台,满足合规要求;Rancher简化多云环境下的Kubernetes管理;CoreOS Tectonic专注于安全性,适用于高安全需求领域。容器云正朝着无服务器化、智能运维和边缘协同等方向发展。
791 2
|
12月前
|
人工智能 监控 安全
容器化AI模型的安全防护:构建可信的AI服务
在AI模型广泛应用的背景下,容器化AI模型的安全防护至关重要。主要安全威胁包括数据窃取、模型窃取、对抗样本攻击和模型后门攻击等。为应对这些威胁,需采取多层次防护措施:容器安全(如使用可信镜像、限制权限)、模型安全(如加密、水印)、数据安全(如加密、脱敏)和推理安全(如输入验证、异常检测)。此外,利用开源工具如Anchore Engine、Falco和ART等,可进一步加强防护。遵循安全开发生命周期、最小权限原则和深度防御等最佳实践,确保AI服务的安全性和可信度。
|
12月前
|
机器学习/深度学习 数据采集 人工智能
容器化机器学习流水线:构建可复用的AI工作流
本文介绍了如何构建容器化的机器学习流水线,以提高AI模型开发和部署的效率与可重复性。首先,我们探讨了机器学习流水线的概念及其优势,包括自动化任务、确保一致性、简化协作和实现CI/CD。接着,详细说明了使用Kubeflow Pipelines在Kubernetes上构建流水线的步骤,涵盖安装、定义流水线、构建组件镜像及上传运行。容器化流水线不仅提升了环境一致性和可移植性,还通过资源隔离和扩展性支持更大规模的数据处理。

推荐镜像

更多