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