博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
jenkins 手动执行_Jenkins 入门
阅读量:6410 次
发布时间:2019-06-23

本文共 9044 字,大约阅读时间需要 30 分钟。

ef221d9f73a8632abdc5dd904275b8d3.png

Jenkins 入门总结

Jenkins 是 Continous Integration Server,是 Hudson 的继续。 类似的产品: Bamboo,BuildBot,TeamCity,BuildForge 等。

Jenkins 的突出特点:

  • 开源,免费,免费,免费
  • 跨平台,支持所有的平台
  • 支持分布式部署,管理;
  • Web可视化管理;
  • 安装简单,上手快;
  • Plugin Market十分丰富,大部分还都是免费的。

Jenkins 安装

Jenkins的

容易安装,只需要执行 Java -jar jenkins.war, 或者直接部署到服务器中。

  • 首先,安装Java

Java 8或者11 (JRE和Java Development Kit (JDK) 都可以)。

  • 然后,下载Jenkins.war

链接:http://mirrors.jenkins.io/war-stable/latest/jenkins.war

  • 运行

java -jar jenkins.war --httpPort=[端口号]

  • 访问

打开浏览器(推荐Chrome),访问 http://localhost:[端口号]

Jenkins 的主要特点

Jenkins 的主要功能是监视重复工作的执行,例如软件工程的构建或需要反复运行的自动化测试。

具体地:

  • 软件的持续构建和测试

此时 Jenkins 与 CruiseControl 或 DamageControl 相似。本质上提供了一个易于使用的持续集成系统,使 得开发人员更容易地将改变集成到工程中,使得用户更容易获得一个新的 build。自动化,持续的构建提高了软件开发的效率。

  • 监视外部运行 的 job 的执行

例如 cron jobs 或 procmail jobs,即使这些 jobs 是运行在远程的机器上。例如,对于 cron,你将会收到 email 包含 job 的 output,你需要检查 email 来确认是否 job broke。Jenkins 将保持这些 outputs 且使得你更加容易地注意到 job 的 broke。

  • 容易配置

jenkins 可以完全地通过友好的 web GUI 来配置,且配置页面支持配置项的错

误检查和很好的在线帮助。不需要手动地编辑 xml 的配置文件,但是 jenkins 也支持手动

修改 xml 配置文件。

  • 项目源码修改的检测

Jenkins 能够从项目的仓库(例如SVN,Git等等)生成最近修改的集合列表,且改方式非常有效,不会增加 Subversion/CVS Repository的负载。

  • 永久的链接

Jenkins 对于大部分页面都生成清楚的可读的永久的链接,例如''latest build"/"latest successful build",因此可以容易地在其他的地方引用 jenkins 的生成的pages。

  • RSS/EMail/IM 集成

可以通过 RSS,EMail 或 IM 来实时地监视 build 的失败。

  • Build 完成后仍然可以 tag

支持在 build 完成后 tag 或重 tag。

  • Junit/TestNG 测试报告

能够很好地显示各种测试的报告,且可以生成失败的趋向图。也可以根据测试报告的xsl文件(样式文件)对测试报告进行解析。

  • 分布式

Jenkins 能够分发 build/test 的负载到多台机器,能够更好地利用硬件资源,缩短 build 的时间。

  • 文件标识

Jenkins 可以标识 build 产生的文件,例如 jars。

  • 插件支持

jenkins 可以通过第三方的插件来扩展。

  • 跨平台

支持几乎所有的平台:

  1. Arch Linux
  2. Docker
  3. FreeBSD
  4. Gentoo
  5. macOS
  6. OpenBSD
  7. openSUSE
  8. Red Hat/Fedora/CentOS
  9. Ubuntu/Debian
  10. OpenIndiana Hipster
  11. Windows

Jenkins 构建 JavaHelloWorld

JavaHelloworld 运行在 master,即 Jenkins 所在的机器。

  • Java 的 HelloWorld 程序

Ant 构建脚本:c:JavaHelloWorldbuild.xml

 

Java 的 helloworld: c:JavaHelloWorldsrcoatahelloworld.java

package oata;public class HelloWorld {  public static void main(String[] args)    {      System.out.println("Hello World");    }}
  • 创建 job 来运行 JavaHelloWorld

在 ie 中打开 http://localhost:8080,单击 new job 链接,为 javahelloworld 新建 job,且编译 job 的配置如下:

注意 jenkins 默认已经安装了 svn 的 plugin 了

7a5b2d51e79873727b311bd79bc6a042.png
  • 运行 JavaHelloWorld 的 job

进入 JavaHelloWorld 的主页面,点击 build now 链接进行 build,build 后可以在此主页面

上看到所有的 build 历史,如下:

ac6167604b09a459454244e9c6f6e10c.png

然后还可以点击某个 build 的链接,查看某个 build 的详细日志,如下:

2ac999c829bd4b944dfcedeca96bd26c.png

参考:http://ant.apache.org/manual/tutorial-HelloWorldWithAnt.html

Jenkins 的配置

  • 修改Jenkins的根目录

默认地在 C:Documents and SettingsAAA.jenkins。

.jenkins

├─jobs

│ └─JavaHelloWorld

│ ├─builds

│ │ ├─2011-11-03_16-48-17

│ │ ├─2011-11-03_16-49-05

│ │ ├─2011-11-03_16-49-29

│ │ ├─2011-11-03_17-01-49

│ │ └─2011-11-03_17-11-42

│ └─workspace

│ ├─build

│ │ ├─classes

│ │ │ └─oata

│ │ └─jar

│ └─src

│ └─oata

├─plugins

├─usercontent

├─war

可以通过设置环境变量来修改,例如: set JENKINS_HOME=C:jenkins

然后重新启动 jenkins。

  • 备份和恢复Jenkins

只需要备份 JENKINS_HOME 下的所有文件和文件夹,恢复的时候需要先停止 jenkins。

  • 移动,删除或修改 jobs

对于移动或删除 jobs,只需要简单地移动或删除%JENKINS_HOEM%jobs 目录。

对于修改 jobs 的名字,只需要简单地修改%JENKINS_HOEM%jobs 下对应 job 的文件夹的名字。

对于不经常使用的 job,只需要对%JENKINS_HOEM%jobs 下对应的 jobs 的目录 zip 或 tar后存储到其他的地方。

  • url 中执行命令

如下:

http://[jenkins-server]/[command]

命令可以为:

exit shutdown jenkinsrestart restart jenkinsreload to reload the configuration
  • Jenkins 启动时的命令行参数

--httpPort=$HTTP_PORT,用来设置 jenkins 运行时的 web 端口。

--httpsPort=$HTTP_PORT,表示使用 https 协议。

--httpListenAddress=$HTTP_HOST,用来指定 jenkins 监听的 ip 范围,默认为所有的 ip 都可以访问

此 jenkins server。

  • 修改 jenkins 的 timezone

如果Jenkins所在的server的timezone不同于用户的timezone,这时候需要修改 jenkins 的timezone,需要在 jenkins 启动的时候增加下列参数:

-Dorg.apache.commons.jelly.tags.fmt.timeZone=TZ
  • 最好通过一个脚本来启动 jenkins,确保 jenkins 每次都运行在相同的环境下

例如 startjenkins.bat

set JENKINS_HOME=c:jenkinscd /d %JENKINS_HOME%java -jar %JENKINS_HOME%jenkins.war --httpPort=8000
  • Jenkins在后台运行

如果 jenkins 是部署在 servlet 容器中,例如 apache,tomcat 中。因为 servlet 容器一般都在后台运行,所以 jenkins 也就已经在后台运行了。

对于Windows用户需要在Jenkins的管理页面中点击 insall as windows service 来将Jenkins部署为 service。但是感觉比较好的方法还是手动将启动Jenkins 的脚本部署为Windows Service,从而可以更灵活地设置更多的参数。

  • Jenkins的系统信息

可以在Jenkins 的管理页面下的系统信息中,查看所有的 jenkins 的信息,例如Jenkins的启动配置,所依赖的系统的环境变量,所安装的plugins。

  • 内置的环境变量
  1. BUILD_NUMBER, 唯一标识一次 build,例如 23;
  2. BUILD_ID,基本上等同于 BUILD_NUMBER,但是是字符串,例如 2011-11-15_16-06-21;
  3. JOB_NAME, job 的名字,例如 JavaHelloWorld;
  4. BUILD_TAG, 作用同 BUILD_ID,BUILD_NUMBER,用来全局地唯一标识一此 build,例如 jenkins-JavaHelloWorld-23;
  5. EXECUTOR_NUMBER, 例如 0;
  6. NODE_NAME,slave 的名字,例如 MyServer01;
  7. NODE_LABELS,slave 的 label,标识 slave 的用处,例如 JavaHelloWorld MyServer01;
  8. JAVA_HOME, java 的 home 目录,例如 C:Program Files (x86)Javajdk1.7.0_01;
  9. WORKSPACE,job 的当前工作目录,例如 c:jenkinsworkspaceJavaHelloWorld;
  10. HUDSON_URL = JENKINS_URL, jenkins 的 url,例如 http://localhost:8000/ ;
  11. BUILD_URL,build 的 url 例如 http://localhost:8000/job/JavaHelloWorld/23/;
  12. JOB_URL, job 的 url,例如 http://localhost:8000/job/JavaHelloWorld/;
  13. SVN_REVISION,svn 的 revison, 例如 4。

Windows Slave 配置

参考:https://wiki.jenkinsci.org/display/JENKINS/Step+by+step+guide+to+set+up+master+and+slave+machines

  • 创建新的Slave

注意 Jenkins 中 slave 称为 node。 所以下面文章中的slave和node指的是一回事。

在 Manage Jenkins-->Manage Nodes -->New Node 下:输入 Node Name,且选择Dumb Slave作为Slave 的类型,然后 OK。

1e280efe090c439e395930e608fa4ab8.png

在 Slave 的配置页面,输入如下:

  1. *executors 的数量,1 或多个;
  2. *输入 Slave 上的跟目录,例如 c:jenkins;
  3. *Usage 选择:Leave this machine for tied jobs only;
  4. *Lunch Method 选择:Launch slave agents via Java Web Start;
  5. * Avaliablitiy选择:Keep this slave online as much as possible;
  6. * 然后保存。

在Slave所在的机器登录Jenkins master,且进入Manage Jenkins-->Manage Nodes-->新

建的 Note,点击 launch,然后安装 slave 为 service 如下:

f90554271272c19cab20eca62d5182e9.png

安装成功后显示如下:

34ff7f55e8fb5047d7fab747f96901e5.png
  • 在Slave上运行Job

对上面的 slave 增加 label,从而表示此 slave 的用处,且同时对 uage 选择 leave this machine for tied jobs only:

769ce66dc5ed9dc248867306e3114fa5.png

对 Jenkins 构建 JavaHelloWorld 中的 job 修改如下:

选择 restrict where this project can be run 且输入 note(slave)的 label;

另外注意 SVN 的地址因该正确,jenkins 会提示输入 svn 的用户名和密码。

055d06ab881b4562885ff69a40139678.png

此时 job 将会在slave所在的机器运行,当然 build 所需要的环境要在slave上配置好,运行如下:

4fdabff8d56e0f3f57b54c6fcfce7bfd.png

注 意: 对Slave系统环境变量的修改,Jenkins slave 不会立即生效,需要重启Jenkins Slave Service。

参考:

https://wiki.jenkins-ci.org/display/JENKINS/Distributed+builds

http://community.jboss.org/wiki/HudsonWindowsSlavesSetup

Jenkins的Linux的Slave的配置

作为 slave 的 Linux 机器为 centos 系统。

  • Linux的Slave设置

创建Jenkins用户

sudo /usr/sbin/useradd -m jenkins -d /home/jenkins

查看Jenkins 用户及组的信息 id jenkins

uid=506(jenkins) gid=506(jenkins) groups=506(jenkins) 

使用 sudo /usr/bin/passwd jenkins 来设置用户 jenkins 的密码为 0;

切换到用户 jenkins 环境下

su - jenkins

安装 ant

yum install ant
  • 在Slave的Linux机器上创建public/private key pair

确保当前用户为 jenkins

执行 ssh-keygen 来创建 public/private key pair,直接 enter,表示 key将存储在/home/jenkins/.ssh/id_rsa 下,再直接 enter,表示不设置密码,再次 enter 确认密码为空;

创建 authorized_keys

cd .sshcat id_rsa.pub > authorized_keyschmod 700 authorized_keys

将 id_rsa(相当于 privatekey)拷贝到 jenkins master 机器上,例如 c:jenkinsid_rsa 下。

  • 创建Slave(node)
e9c618179ccae2efdf3d4f8a797818b9.png

确保 jenkins 中 ssh slave plugin 正确安装,一般默认安装。

然后 lunch slave,使得 master 和 slave 通过 ssh 成功连接。其实 launch 的时候 jenkins 自动地从http://yourserver:port/jnlpJars/slave.jar拷贝slave.jar 到 slave,然后通过命令运行

java -jar slave.jar

来运行 slave。

  • 在新建的 Linux 的 Slave 上运行上节中的 JavaHelloWorld(Jenkins 构建JavaHelloWorld)

且需要修改 JavaHelloWorld job 的 Label 为 JavaHelloWorldLinux 来使用此 slave,运行如下:

d846dbafcdc8d4accfaa923d9f6db839.png

Jenkins Master/Slave 架构

  • Jenkins Master/Slave架构

Master/Slave相当于Server和agent的概念。Master 提供 web 接口让用户来管理job和slave,job可以运行在master本机或者被分配到slave上运行。一个master可以关联多个slave用来为不同的job或相同的job的不同配置来服务。

c0e5ba330d93d4ba07f60b01380d9f5b.png

当job被分配到slave上运行的时候,此时master和slave其实是建立的双向字节流的连接,其中连接方法主要有如下几种:

  • master通过ssh来启动slave

Jenkins 内置有 ssh 客户端实现,可以用来与远程的 sshd 通信,从而启动 slave agent。这是对unix系统的slave最方便的方法,因为unix系统一般默认安装有 sshd。在创建ssh连接的 slave 的时候,你需要提供slave的host名字,用户名和ssh证书。创建public/private keys,然后将public key拷贝到slave 的~/.ssh/authorized_keys 中,将 private key 保存到master上某ppk文件中。Jenkins将会自动地完成其他的配置工作。

  • master通过WMI+DCOM来启动Windows slave

对 于Windows的Slave,Jenkins可以使用Windows2000及以后内置的远程管理功能(WMI+DCOM),你只需要提供对 slave 有管理员访问权限的用户名和密码,Jenkins将远程地创建Windows Service然后远程地启动和停止他们。

对于Windows 的系统,这是最方便的方法,但是此方法不允许运行有显示交互的GUI程序。

  • 实现脚本来启动Slave

如果上面成套的方法不够灵活,你可以实现自己的脚本来启动 slave。你需要将启动脚本放到master,然后告诉Jenkins Master 在需要的时候调用此脚本来启动 slave。

典型地,你的脚本使用远程程序执行机制,例如SSH,RSH或类似的方法(在Windows,可以通过cygwin 或 psexec 来完成),在脚本的最后需要执行类似 java -jar slave.jar 来启动 slave。slave.jar 可以从http://yourjenkinsserver:port/jnlpjars/slave.jar 下载,从而保证 slave.jar 正确的版本。 但是如果使用 ssh slave plugin 的话,此 plugin 将自动地更新 slave.jar。

  • 通过Java web start启动Slave

jave web start(jnlp)是另一种启动 slave 的方法。用这种方法你需要登录到 slave,打开浏览器,打开Slave 的配置页面来连接。还可以安装为Windows Service 来使得Slave在后台运行。

如果你需要运行的程序需要 UI的交互,使用下面的方法:在 slave 系统上创建 jenkins 用

户,设置自动登录,在系统的 startup items 增加 slave JNLP 文件的快捷方式,使得 slave

在系统登录的时候自动启动。

  • 直接启动Slave

此方式类似于 java web start,可以方便地在*unix 系统上将 slave 运行为 daemon。需要配置 slave 为 JNLP 类型连接,然后在 slave 机器上执行

java -jar slave.jar -jnlpUrl http://yourserver:port/computer/slave-name/slave-agent.jnlp

Slave 配置的建议

  • 每个 slave 都有用户 jenkins,所有的机器使用相同的 UID 和 GID,使得 slave 的管理更加简单;
  • 每个机器上 jenkins 用户的 home 目录都相同/home/jenkins, 拥有相同的目录结构使得维护简单;
  • 所有的 slave 运行 sshd,windows 运行 cygwin sshd;
  • 所有的 slave 安装 ntp client,用来与相同的 ntp server 同步;
  • 使用脚本 sh 来自动地配置 slave 的环境,例如创建 jenkins 用户,安装 sshd,安装 java,ant,maven 等;
  • 使用脚本来启动 slave,保证 slave 总是运行在相同的参数下:
#!/bin/bash JAVA_HOME=/opt/SUN/jdk1.6.0_04 PATH=$PATH:$JAVA_HOME/bin exportPATH java -jar /var/jenkins/bin/slave.jar
010fc3f83e67f537b13efe9b25b5ca8e.png

写在最后

Jenkins作为一款开源的CI/CD工具,结合插件使用,功能已经十分强大。可以满足大部分中小公司的需求。

美中不足的是,Jenkins对于artifact(编译产物)的管理做的不是很好,即使使用插件,这方面的短板还是无法的大力解决(Bamboo做的就很好)。所以在这里就不得不说到另外的两个工具,JFrog和Nexus。

下次继续。

转载地址:http://cowra.baihongyu.com/

你可能感兴趣的文章
职称英语
查看>>
用JavaScript生成Android SDK的下载地址(4)——按“API Level”分类
查看>>
SQL Server 自动增长清零
查看>>
多核与云计算
查看>>
C++中的头文件和源文件
查看>>
SQLite在Android中使用
查看>>
Spring 3 MVC And RSS Feed Example
查看>>
【转】Linux 下修改Tomcat使用的JVM内存大小
查看>>
【uTenux实验】事件标志
查看>>
利用Python进行数据分析(15) pandas基础: 字符串操作
查看>>
busybox inetd tftpd
查看>>
函数可重入性及编写规范
查看>>
Scribe应用实例
查看>>
一个通过BackgroundWorker实现WinForm异步操作的例子
查看>>
net中System.Diagnostics.Process.Start用法
查看>>
Ural_1090. In the Army Now (数状数组)
查看>>
Gridview中生成的属性rules="all",在Firefox出现内线框解决办法
查看>>
10容易实现基于Flash的MP3播放器为您的网站
查看>>
轻松实现QQ用户接入
查看>>
ToString精确到毫秒
查看>>