容器 & 服务: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,也可以使用其他持续继承工具,但最终都离不开对这类工具的理解和应用。在后续的学习中,还会有很多与持续继承工具紧密关联的实践案例,也会有很多问题需要深入调研解决。基础很重要。

相关文章
|
7天前
|
供应链 监控 安全
|
10天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
随着云计算和DevOps的兴起,容器技术和自动化在软件开发中扮演着愈发重要的角色,但也带来了新的安全挑战。阿里云针对这些挑战,组织了一场关于云上安全的深度访谈,邀请了内部专家穆寰、匡大虎和黄竹刚,深入探讨了容器安全与软件供应链安全的关系,分析了当前的安全隐患及应对策略,并介绍了阿里云提供的安全解决方案,包括容器镜像服务ACR、容器服务ACK、网格服务ASM等,旨在帮助企业构建涵盖整个软件开发生命周期的安全防护体系。通过加强基础设施安全性、技术创新以及倡导协同安全理念,阿里云致力于与客户共同建设更加安全可靠的软件供应链环境。
150263 11
|
4天前
|
供应链 监控 安全
对话|企业如何构建更完善的容器供应链安全防护体系
本期节目围绕软件供应链安全、容器安全的主要挑战以及阿里云如何帮助用户等维度展开了深入的讨论。
|
1月前
|
供应链 安全 Cloud Native
阿里云容器服务助力企业构建云原生软件供应链安全
本文基于2024云栖大会演讲,探讨了软件供应链攻击的快速增长趋势及对企业安全的挑战。文中介绍了如何利用阿里云容器服务ACK、ACR和ASM构建云原生软件供应链安全,涵盖容器镜像的可信生产、管理和分发,以及服务网格ASM实现应用无感的零信任安全,确保企业在软件开发和部署过程中的安全性。
|
1月前
|
运维 jenkins Java
Jenkins 自动化局域网管控软件构建与部署流程
在企业局域网管理中,Jenkins 作为自动化工具,通过配置源码管理、构建及部署步骤,实现了高效、稳定的软件开发与部署流程,显著提升局域网管控软件的开发与运维效率。
47 5
|
2月前
|
Kubernetes Cloud Native Docker
云原生之旅:从传统架构到容器化服务的演变
随着技术的快速发展,云计算已经从简单的虚拟化服务演进到了更加灵活和高效的云原生时代。本文将带你了解云原生的概念、优势以及如何通过容器化技术实现应用的快速部署和扩展。我们将以一个简单的Python Web应用为例,展示如何利用Docker容器进行打包和部署,进而探索Kubernetes如何管理这些容器,确保服务的高可用性和弹性伸缩。
|
2月前
|
机器学习/深度学习 数据采集 Docker
Docker容器化实战:构建并部署一个简单的Web应用
Docker容器化实战:构建并部署一个简单的Web应用
|
3月前
|
Kubernetes 监控 数据中心
容器化与微服务:构建高效开发环境的双剑合璧
【10月更文挑战第20天】本文探讨了容器化技术(如Docker和Kubernetes)与微服务架构的结合,如何共同构建高效、灵活的开发环境。容器化解决了环境一致性、快速部署和资源隔离的问题,而微服务架构则提升了系统的可维护性和可扩展性。通过容器编排工具、CI/CD流程和服务网格,两者的结合进一步优化了开发和运维效率。文章还分享了实施这两项技术的最佳实践和职业心得。
|
3月前
|
运维 监控 jenkins
运维自动化实战:利用Jenkins构建高效CI/CD流程
【10月更文挑战第18天】运维自动化实战:利用Jenkins构建高效CI/CD流程
|
3月前
|
Kubernetes Cloud Native 云计算
云原生之旅:构建你的第一个容器化应用
【8月更文挑战第75天】在数字化浪潮中,云原生技术成为推动企业创新和效率提升的关键动力。本篇文章将引导你开启云原生之旅,通过一个简易的步骤指南,帮助你构建并部署第一个容器化应用。我们将一起探索Docker容器的魅力,以及如何利用Kubernetes进行集群管理,实现服务的自动化部署、扩展和管理。无论你是云原生新手还是希望深化理解,这篇文章都将为你提供实践操作的启示和深入思考的契机。