写点什么

容器 & 服务:Jenkins 构建实例

发布于: 2021 年 02 月 09 日
容器 & 服务: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 flamingskyRunning as SYSTEMBuilding in workspace /Users/qingclass/.jenkins/workspace/第一个示例项目The recommended git tool is: NONENo credentials specifiedCloning the remote Git repositoryCloning repository https://github.com/flamingstar/simple-java-maven-app.git/ > /usr/bin/git init /Users/qingclass/.jenkins/workspace/第一个示例项目 # timeout=10Fetching 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=10Avoid second fetch > /usr/bin/git rev-parse origin/master^{commit} # timeout=10Checking out Revision 0d85b7e1fd39bc6978511f92381aa10534ca4c1b (origin/master) > /usr/bin/git config core.sparsecheckout # timeout=10 > /usr/bin/git checkout -f 0d85b7e1fd39bc6978511f92381aa10534ca4c1b # timeout=10Commit 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,也可以使用其他持续继承工具,但最终都离不开对这类工具的理解和应用。在后续的学习中,还会有很多与持续继承工具紧密关联的实践案例,也会有很多问题需要深入调研解决。基础很重要。


发布于: 2021 年 02 月 09 日阅读数: 24
用户头像

磨炼中成长,痛苦中前行 2017.10.22 加入

微信公众号【程序员架构进阶】。多年项目实践,架构设计经验。曲折中向前,分享经验和教训

评论

发布
暂无评论
容器 & 服务:Jenkins构建实例