持续集成

1.什么是持续集成:
Continuous integration (CI)
持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个成员每天至少集成一次,也就意味着每天可能会发生多次集成。每次集成都通过自动化的构建(包括编译,发布,自动化测试)来验证,从而尽快地发现集成错误。许多团队发现这个过程可以大大减少集成的问题,让团队能够更快的开发内聚的软件。

2.没有持续集成的状况:

3.持续集成最佳实践

  • 维护一个单一的代码库     【不要使用多个代码库,避免每个组使用单独得git/svn,减轻权限管理】
  • 使构建自动化
  • 执行测试是构建的一部分 【构建一个项目得时候,测试就包含在里面了,可以及时得发现问题】
  • 集成日志及历史记录
  • 使用统一的依赖包管理库 【很容易出错,所以要统一得管理】
  • 每天至少集成一次            【持续集成得时候,是最容易发现问题得时候】

4.持续集成概览

持续集成得过程:
先把代码放到git、Jenkins从git获取代码进行构建、测试、生成结果再返回给客户端。

Jenkins安装

什么是Jenkins:

Jenkins is an automation engine with an unparalleled plugin ecosystem to support all of your favorite tools in your delivery pipelines, whether your goal is continuous integration, automated testing, or continuous delivery.
持续集成、自动测试、持续部署的超级引擎,支持自定义工具集、多种交付通道。

Jenkins的缺点:
Jenkins是开发人员开发得,没有照顾到运维人员得感受。CMDB得对接是Jenkins得短板。

操作步骤:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
# 服务器环境:
[root@linux-node2 ~]# cat /etc/redhat-release
CentOS release 6.5 (Final)
 
# 安装依赖包
[root@linux-node2 ~]# yum install java-1.8.0-openjdk java-1.8.0-openjdk-devel
 
# 下载地址:【版本选择之前得一个或两个版本,选择redhat-stable稳定版】
# 官方下载地址:https://pkg.jenkins.io/redhat-stable/
# 国内下载地址:https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
 
# 安装jenkins
[root@linux-node2 ~]# rpm -ivh jenkins-2.32.3-1.1.noarch.rpm
warning: jenkins-2.32.3-1.1.noarch.rpm: Header V4 DSA/SHA1 Signature, key ID d50582e6: NOKEY
Preparing...                ########################################### [100%]
   1:jenkins                ########################################### [100%]
 
# 查看服务状态
[root@linux-node2 ~]# service jenkins status
jenkins 已停
 
# 启动jenkins
[root@linux-node2 ~]# service jenkins start
Starting Jenkins                                           [确定]
 
# 查看端口8080是否已启动
[root@linux-node2 ~]# netstat -lunpt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address               Foreign Address             State       PID/Program name  
tcp        0      0 0.0.0.0:22                  0.0.0.0:*                   LISTEN      1068/sshd          
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      1144/master        
tcp        0      0 :::8080                     :::*                        LISTEN      1523/java          
tcp        0      0 :::22                       :::*                        LISTEN      1068/sshd          
tcp        0      0 ::1:25                      :::*                        LISTEN      1144/master        
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               954/dhclient

注意:YUM安装方式【不推荐】

1
2
3
4
5
6
7
8
9
10
# 下载镜像源
wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins.io/redhat-stable/jenkins.repo
rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
or
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key
 
# yum安装jenkins
yum –y install jenkins
service jenkins start
ckconfig Jenkins on

Jenkins初始化

第一步:

1
2
3
4
5
6
# 访问Jenkins
http://192.168.152.129:8080
 
# 查找admin默认密码,输入密码,点击继续
[root@linux-node2 ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
637060046b114f6d92255944ab312940

第二步:

注意:卡启动问题【采用离线模式】

Jenkins在第一次安装启动时会向官网回传信息
如果网络离线可以正常安装。
当网络在线,但是https://jenkins-ci.io 无法打开时,卡住。
解决:
如果出现卡启动,把网络关掉即可。

以后再出现问题,都是jenkins服务器内存不够了。

第三步:

第四步:

第五步:

第六步:

注意:【如果采用是联网模式,有两种方式,一种是安装默认插件,时间比较长。一种是跳过安装插件,点击右上角得叉。】

Jenkins插件

更新插件、下载安装、代理设置、可用插件

1. 默认插件:

插件用途:

Pipeline 工作流用到
Git plugin 拉代码会用到
SSH Slaves plugin 做集群

......

2.常用插件:

3.插件管理:

系统设置>插件管理

# 第一步:

# 第二步:

# 第三步:

4.批量更新插件

1
2
3
4
5
6
7
8
9
10
# 解压到插件目录中
[root@linux-node2 ~]# mv plugins.tar.gz /var/lib/jenkins/
[root@linux-node2 jenkins]# tar zxf plugins.tar.gz 
# 添加jenkins权限
[root@linux-node2 jenkins]# chown -R jenkins.jenkins plugins
 
# 重启下jenkins服务
[root@linux-node2 jenkins]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [确定]
Starting Jenkins                                           [确定]

5.手动安装插件

a.手动安装ssh插件,下载到桌面:

执行过程:设置--管理插件--高级--上传

1
地址:http://updates.jenkins-ci.org/2.32/latest/ssh.hpi

注意:【插件更新】

插件安装一定要对应大版本。
如果更新某个插件之后,报依赖问题,就恢复之前得插件。

# 第一步:

# 第二步:安装中

# 第三步:安装完成

b.通过可选插件进行升级安装

可更新--选择Git plugin

Jenkins配置

镜像管理:

1
2
3
4
5
6
7
8
9
10
Jenkins所有镜像地址:
http://mirrors.jenkins-ci.org/status.html
 
官方镜像地址:http://updates.jenkins-ci.org/update-center.json
 
更换镜像:【目前镜像还是推荐使用官网,比较好用些】
http://updates.jenkins-ci.org/update-center.json
https://mirrors.tuna.tsinghua.edu.cn/
http://mirror.esuni.jp/jenkins/updates/update-center.json
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

系统管理--插件管理--高级--升级站点,地址:http://updates.jenkins-ci.org/update-center.json

Jenkin目录:

1
2
3
4
5
6
7
8
9
10
[root@linux-node2 ~]# rpm -ql jenkins
/etc/init.d/jenkins         【启动文件】
/etc/logrotate.d/jenkins   
/etc/sysconfig/jenkins           【配置文件】
/usr/lib/jenkins
/usr/lib/jenkins/jenkins.war
/usr/sbin/rcjenkins
/var/cache/jenkins          【程序文件,备份就需要备份该目录下war目录】
/var/lib/jenkins            【主目录,升级得话直接把war包放到该目录,升级完成后jenkins会把war自动解压到/var/cache/Jenkins目录】
/var/log/jenkins            【日志文件】

配置文件参数:/etc/sysconfig/jenkins

1
2
3
4
JENKINS_USER=“root”
因为Jenkins需要调用系统命令,采用root用户会比较方便,生产环境建议采用jenkins用户,多一步授权过程。
JENKINS_JAVA_OPTIONS=“-Djava.awt.headless=true
jenkins是依赖jvm启动得,如果内存不够用了,需要指定堆,就需要在这里做。

用户权限:【不推荐,知道在这里可以修改就可以。生成环境修改配置文件,做修改】

1
2
3
4
5
6
7
8
9
10
修改/etc/init.d/jenkins
 
将用户修改为root,可以调用root工具
 
106行,113行
 
修改启动端口85行,$JENKINS_PORT
 
systemctl daemon-reload
service jenkins restart

备份:【如果体积比较大,不建议采用全量备份,可以使用rsync来进行增量备份】

1
2
tar zcvf jenknis.tar.gz /var/lib/jenkins/
每天定时备份的脚本,保留15天的备份

/var/lib/jenkins/ 目录结构:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[root@linux-node2 jenkins]# ll
总用量 172136
-rw-r--r--.   1 root    root          604 10月 29 22:02 com.dabsquared.gitlabjenkins.connection.GitLabConnectionConfig.xml
-rw-r--r--.   1 jenkins jenkins       365 10月 29 02:35 com.dabsquared.gitlabjenkins.GitLabPushTrigger.xml
-rw-r--r--.   1 jenkins jenkins      1592 10月 28 22:26 config.xml
-rw-r--r--.   1 root    root          159 10月 29 22:02 hudson.model.UpdateCenter.xml
-rw-r--r--.   1 jenkins jenkins       370 10月 29 02:35 hudson.plugins.git.GitTool.xml
-rw-------.   1 jenkins jenkins      1712 10月 28 22:25 identity.key.enc
-rw-r--r--.   1 jenkins jenkins         6 10月 29 22:02 jenkins.install.InstallUtil.lastExecVersion
-rw-r--r--.   1 jenkins jenkins         6 10月 28 22:54 jenkins.install.UpgradeWizard.state
drwxr-xr-x.   2 jenkins jenkins      4096 10月 28 22:24 jobs 【任务】
drwxr-xr-x.   4 jenkins jenkins      4096 10月 29 02:36 logs 【日志】
-rw-r--r--.   1 root    root          907 10月 29 22:02 nodeMonitors.xml
drwxr-xr-x.   2 jenkins jenkins      4096 10月 28 22:25 nodes    【集群节点】
drwxr-xr-x. 104 jenkins jenkins     12288 10月 29 03:54 plugins  【插件】
-rw-r--r--.   1 root    root    176176562 10月 29 00:50 plugins.tar.gz
-rw-r--r--.   1 jenkins jenkins       129 10月 29 22:00 queue.xml.bak
-rw-r--r--.   1 jenkins jenkins        64 10月 28 22:24 secret.key
-rw-r--r--.   1 jenkins jenkins         0 10月 28 22:24 secret.key.not-so-secret
drwx------.   4 jenkins jenkins      4096 10月 29 02:22 secrets
drwxr-xr-x.   2 jenkins jenkins      4096 10月 29 04:08 updates
drwxr-xr-x.   2 jenkins jenkins      4096 10月 28 22:25 userContent
drwxr-xr-x.   3 jenkins jenkins      4096 10月 28 22:26 users
drwxr-xr-x.   2 jenkins jenkins      4096 10月 29 02:35 workflow-libs
 
xml文件都是jenkins的安全或者其他设置,jenkins是没有数据库得,都是存在xml文档中得。

系统设置:【系统管理--系统设置】

  • 工作目录设置
  • Maven项目配置
  • 设置系统JDK ANT MAVEN
  • Jenkins Location
  • 邮件通知
  • Configure Global Security

系统设置几个注意事项:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
执行者数量   【不建议超过10个,太多得话,服务器可能会坑不住,一般5个就可以了。】
用法       【如果是从级得话一定要选择只允许运行绑定到这台机器的Job,不然会随机分别,可能会分配到别的机器跑任务,如果主得话就无所谓了。】
生成前等待时间 【建议改成10秒,可以有个反悔得余地。】
SCM签出重试次数   【建议改成不重试0,也可以设置为1。】
 
Jenkins Location:
Jenkin URL 【设置域名地址】
系统管理员邮件地址   【设置邮件地址】
 
Subversion:
Subversion Workspace Version    【改成相对比较近点得版本】
 
邮件通知:
根据提示设置即可。

Jenkins备份与恢复

先构建两个任务,分别为php和java:

a.构建php任务:

b.构建java任务:

jenkins备份操作:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 对/var/lib/jenkins 进行备份
[root@linux-node2 jenkins]# mkdir -p /data/backup/jenkins
# 拷贝时保留之前得目录和文件属性
[root@linux-node2 jenkins]# rsync -raz --delete --progress /var/lib/jenkins/ /data/backup/jenkins/
# 不建议使用scp,采用rsync进行增量备份:scp -r /var/lib/jenkins/ /data/backup/jenkins/,scp是支持断点续传得。
# 删除/var/lib/jenkins
[root@linux-node2 jenkins]# rm -rf /var/lib/jenkins/
 
# 重启jenkin,还是能启动,启动之后,jenkins会生成默认得目录和配置文件,进入到初始化界面。
[root@linux-node2 jenkins]# /etc/init.d/jenkins restart
Shutting down Jenkins                                      [确定]
Starting Jenkins                                           [确定]
[root@linux-node2 jenkins]# cd /var/lib/jenkins/
[root@linux-node2 jenkins]# ll
总用量 64
-rw-r--r--. 1 root root 1592 10月 30 02:09 config.xml
-rw-r--r--. 1 root root  159 10月 30 02:09 hudson.model.UpdateCenter.xml
-rw-------. 1 root root 1712 10月 30 02:09 identity.key.enc
-rw-r--r--. 1 root root   94 10月 30 02:09 jenkins.CLI.xml
-rw-r--r--. 1 root root    6 10月 30 02:09 jenkins.install.UpgradeWizard.state
drwxr-xr-x. 2 root root 4096 10月 30 02:08 jobs
drwxr-xr-x. 3 root root 4096 10月 30 02:09 logs
-rw-r--r--. 1 root root  907 10月 30 02:09 nodeMonitors.xml
drwxr-xr-x. 2 root root 4096 10月 30 02:09 nodes
drwxr-xr-x. 2 root root 4096 10月 30 02:08 plugins
-rw-r--r--. 1 root root  129 10月 30 02:08 queue.xml.bak
-rw-r--r--. 1 root root   64 10月 30 02:08 secret.key
-rw-r--r--. 1 root root    0 10月 30 02:08 secret.key.not-so-secret
drwxr-xr-x. 4 root root 4096 10月 30 02:09 secrets
drwxr-xr-x. 2 root root 4096 10月 30 02:11 updates
drwxr-xr-x. 2 root root 4096 10月 30 02:09 userContent
drwxr-xr-x. 3 root root 4096 10月 30 02:09 users

jenkins恢复操作:

1
2
3
4
5
6
7
8
# 进行恢复
[root@linux-node2 ~]# /etc/init.d/jenkins stop
Shutting down Jenkins                                      [确定]
[root@linux-node2 ~]# rm -rf /var/lib/jenkins/*
[root@linux-node2 ~]# rsync -arz --delete --progress /data/backup/jenkins/ /var/lib/jenkins/
[root@linux-node2 jenkins]# /etc/init.d/jenkins start
Starting Jenkins                                           [确定]
[root@linux-node2 jenkins]#

发布PHP项目

构建自由风格项目
Throttle builds,构建时限
丢弃旧的构建
填写源码信息

丢弃旧的构建:
保持构建的天数 【超过一定天数就删除】
保持构建的最大个数 【超过一定数量就删除】

创建SSH KYE:

注意deploy key和ssh key的区别:

deploy keys有两种,一种是代表全部,一种是只针对某个项目。

注意和项目的deploy key区别:

点击启动:

添加Git有两种方式,一种是ssh,一种是http:

使用ssh方式比较多。

ssh添加方式:

如果是报以上错误,是因为ssh需要加known_hosts文件:

使用git 使用http:

添加用户名和密码:

构建:

从jenkins上拷贝/root/.ssh/id_rsa.pub,放入被远程的服务器:

执行shell命令:

添加进任务里:

SVN

  • 确保subversion plugin已经安装
  • 在系统设置里选择SVN版本
  • 获取程序的SVN路径
  • 填写SVN用户权限
  • 指定其它配置
  • 构建周期
  • 构建环境
  • Execute shell

查看构建结果

  • 状态集 查看代码变更记录
  • Console Output 构建过程中的输出结果,主要用于查看构建过程
  • 编辑编译信息 定制信息编译信息
  • Tag this build 对这次构建进行tag(svn),SVN必须已经建立tags目录

发布Maven项目

什么是maven?

  • Maven是一个项目管理和综合工具。Maven提供给开发人员构建一个完整的生命周期框架。
  • 开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。
  • Apache的开源项目
  • 主要服务于JAVA平台的构建、依赖管理、项目管理。

安装maven:

1
2
3
4
5
6
wget http://mirrors.cnnic.cn/apache/maven/maven3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar zxvf apache-maven-3.3.9-bin.tar.gz
配置环境变量 vim /etc/profile
     export PATH=$PATH:/root/apache-maven-3.3.9/bin
测试
    mvn -v

POM:

  • Project Object Model,项目对象模型。
  • 通过xml格式保存的pom.xml文件。
  • 作用类似ant的build.xml文件,功能更强大。
  • 该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等.

以上红色标记内容,会变成构建后文件的名字。

MAVEN 命令:

1
2
3
4
5
6
7
8
9
10
11
1. 创建Maven的普通java项目:
  mvn archetype:create
 -DgroupId=packageName
  -DartifactId=projectName 
2. 创建Maven的Web项目:
    mvn archetype:create
    -DgroupId=packageName   
    -DartifactId=webappName
    -DarchetypeArtifactId=maven-archetype-webapp   
3. 清除后再编译  
    mvn clean install

配置系统MAVEN:

1
2
3
4
5
6
7
系统管理> Global Tool Configuration
 
新增maven
 
取消自动安装
 
填写maven实际安装路径 /data/server/apache-maven-3.3.9/

新建maven项目:

1
2
3
4
5
6
7
8
9
10
新建maven项目
指定源码位置(git或svn)
指定build选项
   clean install
   clean install -Dmaven.test.skip=true
指定execute shell
   java -jar target/testweb-0.0.1-SNAPSHOT.jar
    
# 注意
这个命令是跳过单元测试命令:clean install -Dmaven.test.skip=true

配置maven:

1
2
3
settings.xml 是maven的主要配置文件
位置 $home/.m2 用户
meven安装目录/conf 全局

开始构建maven项目:

配置maven:

自动安装maven,系统管理--Global Tool Configuration

手动安装maven:

1
2
3
4
5
6
7
8
9
10
11
12
13
# maven安装命令
[root@localhost src]# tar -xf apache-maven-3.3.9-bin.tar.gz
[root@localhost src]# mv apache-maven-3.3.9 /data/
[root@localhost src]# export PATH=$PATH:/data/apache-maven-3.3.9/bin
[root@localhost src]# mvn -v
Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00)
Maven home: /data/apache-maven-3.3.9
Java version: 1.8.0_151, vendor: Oracle Corporation
Java home: /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.151-1.b12.el7_4.x86_64/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "3.10.0-514.el7.x86_64", arch: "amd64", family: "unix"
[root@localhost src]# echo "export PATH=$PATH:/data/apache-maven-3.3.9/bin" >> /etc/profile
[root@localhost src]# source /etc/profile

开始构建 ,第一次执行会下载各种插件:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 构建时下载的包,会下载到这里:
[root@localhost ~]# cd .m2/
[root@localhost .m2]# ll
total 0
drwxr-xr-x 13 root root 190 Dec 10 23:00 repository
[root@localhost .m2]# cd repository/
[root@localhost repository]# ll
total 0
drwxr-xr-x 6 root root 70 Dec 10 23:00 asm
drwxr-xr-x 3 root root 38 Dec 10 22:58 backport-util-concurrent
drwxr-xr-x 3 root root 25 Dec 10 22:56 classworlds
drwxr-xr-x 4 root root 31 Dec 10 23:01 com
drwxr-xr-x 3 root root 25 Dec 10 22:57 commons-cli
drwxr-xr-x 3 root root 26 Dec 10 23:00 commons-lang
drwxr-xr-x 3 root root 33 Dec 10 22:58 commons-logging
drwxr-xr-x 3 root root 18 Dec 10 23:00 jdom
drwxr-xr-x 3 root root 19 Dec 10 22:56 junit
drwxr-xr-x 3 root root 19 Dec 10 22:58 log4j
drwxr-xr-x 6 root root 65 Dec 10 22:58 org
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 构建成功,会再/var/lib/jenkins/workspace/java2目录中生成一个target目录,里面有构建完成的文件testweb-0.0.1-SNAPSHOT.jar
[root@localhost java2]# pwd
/var/lib/jenkins/workspace/java2
[root@localhost java2]# ll
total 4
-rw-r--r-- 1 root root 1574 Dec 10 22:55 pom.xml
drwxr-xr-x 4 root root   30 Dec 10 22:55 src
drwxr-xr-x 7 root root  184 Dec 10 23:00 target
[root@localhost java2]# cd target/
[root@localhost target]# ll
total 8
drwxr-xr-x 3 root root   17 Dec 10 22:59 classes
drwxr-xr-x 2 root root   28 Dec 10 23:00 maven-archiver
drwxr-xr-x 3 root root   35 Dec 10 22:59 maven-status
-rw-r--r-- 1 root root 2437 Dec 10 23:00 original-testweb-0.0.1-SNAPSHOT.jar
drwxr-xr-x 2 root root   81 Dec 10 23:00 surefire-reports
drwxr-xr-x 3 root root   17 Dec 10 22:59 test-classes
-rw-r--r-- 1 root root 2663 Dec 10 23:00 testweb-0.0.1-SNAPSHOT.jar
 
# 启动测试下
[root@localhost target]# java -jar testweb-0.0.1-SNAPSHOT.jar
Hello World! i am guo2

注意:如果下载插件错误,需要更改镜像地址:

以下是改成阿里的镜像地址,在/data/apache-maven-3.3.9/conf目录中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
[root@localhost conf]# vim settings.xml
<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
<mirrors>  
 <mirror>
            <id>baijia</id>
            <mirrorOf>*</mirrorOf>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </mirror>
    </mirrors>
        <profiles>
         <profile>
            <id>default</id>
            <repositories>
                <repository>
                    <id>public</id>
                    <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
                    <releases>
                        <enabled>true</enabled>
                    </releases>
                    <snapshots>
                        <enabled>true</enabled>
                    </snapshots>
                </repository>
            </repositories>
        </profile>
</profiles>
    <activeProfiles>
        <activeProfile>default</activeProfile>
    </activeProfiles>
</settings>

按版本发布

  • 安装git parameter plugin插件
  • 任务配置中勾选<参数化构建过程>
  • 选择 git parameter
  • 创建变量名release
  • 选择发布类型:
  1. tag 按标签发布
  2. branch按分支分布
  3. Revision 按修订发布

只演示tag标签发布,以java2项目为例:

共分为三个标签:v1.0,v1.2,v1.3

v1.1、v1.2 的tag和以上步骤一样:

Jenkins上配置:

构建成功:

远程管理

  • SSH plugin
  • Shell ssh
  • ansible【推荐】
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
1.安装ssh plugin插件:
系统管理>SSH remote hosts 增加主机信息
在项目中选择execute shell scripts on remote host using ssh
 
2.Shell SSH:
制作jenkins主机免密登录
 
直接在 execute shell界面执行ssh命令
 
或在脚本中接调用ssh语句
ssh root@192.168.152.140 “ifconfig”
scp love root@192.168.152.141/love/
 
3.ansible:
安装ansible
配置ansible hosts
配置ansible对其它机器的免密权限
执行ansible 命令

War文件部署设置

安装好Deploy Plugin插件,然后在tomcat的conf目录配置tomcat-users.xml文件,在<tomcat-users>节点里添加如下内容:
<role rolename="manager-gui"/>
<role rolename="manager-script"/>
<role rolename="manager-jmx"/>
<role rolename="manager-status"/>
<user username="username" password="password" roles="manager-gui,manager-script,manager-jmx,manager-status"/>
引号里的username和password可以随便替换,用于部署时认证。

操作界面:
选择Add post-build action,然后选择Deploy war/ear to a container,如下图:

部署说明:

  • WAR/EAR files:war文件的存放位置,如:target/test.war 注意:相对路径,target前是没有/的。
  • Context path:访问时需要输入的内容,如ofCard访问时如下:http://192.168.x.x:8080/ofCard/如果为空,默认是war包的名字。
  • Container:选择你的web容器,如tomca 6.x
  • Manager user name:填入tomcat-users.xml配置的username内容
  • Manager password:填入tomcat-users.xml配置的password内容
  • Tomcat URL:填入http://192.168.x.x:8080/
  • Deploy on failure:构建失败依然部署,一般不选择

任务

  • 构建一个定时清理目标机器日志的任务
  • 构建一个定时重启目标机器tomcat进程的任务
  • 执行一次全量备份或增量备份
  • 执行一次版本升级
  • 在完成全部课程之后构建一个PIPLINE。

Jenkins集群

创建节点:

  1. 在系统管理中的Configure Global Security中开启TCP port for JNLP agents,随机选取或指定端口
  2. 新建节点
  3. 节点名
  4. 执行器数量
  5. 远程工作目录(可以不存在)
  6. 用法-只允许绑定到这台机器的job
  7. Lanch slave agents on unix machines vis SSH
  8. 增加认证权限
  9. 节点的构建环境要符合job的要求

操作:

# 点击系统管理--管理节点--新建节点

连接成功:

分配任务到节点:

在任务配置中勾选Restrict where this project can be run

操作:

使用场景:

  1. IOS构建
  2. Android构建
  3. Windows项目构建
  4. 大规模高并发任务构建
  5. 特定环境构建

任务:指定一个maven项目在节点01上构建并成功

整合LDAP

Jenkins配置LDAP:

配置说明:

Rootdn 可以登入jenkins的用户组
用户搜索过滤器
uid={0} linux openladp
sAMAccountName={0} windows AD
ManagerDN LDAP超管

超管授权:

按角色授权

用户设置:

1
2
3
4
5
6
7
超管root
team1用户
team2用户
用户关联自己团队相关job,无法查看或执行其它job
 
每个team新建两个任务
新建两个用户

按角色授权:

1
2
安装 Role-based Authorization Strategy 插件
Configure Global Security>授权策略>选择Role-Based Strategy

设置全局角色:

1
2
3
Jekins>系统管理>Manage and Assign Roles>Manage Roles
创建全局角色member(项目用户进入后可以读取和创建Job)
Overall允许read

设置项目角色:

1
2
3
新建project roles
注意pattern的匹配模式是xxx.*
这样team1只能看到team1开头的job

全局授权:

1
2
进入Assign Roles
在Global roles中加入team1/team2并授权member

项目授权:

1
在Projects roles中加入team1/team2并进行相应授权

验证授权:

1
注意如果开放新建权限,则team1创建的job名必须符合规则

Pipeline

Pipeline是部署流水线

Pipline将整个交付过程代码化

创建pipeline:

创建pipeline
配置pipeline
Hello world
node {
stage 'Stage 1'
echo 'Hello World 1'
stage 'Stage 2'
echo 'Hello World 2‘
}

语法生成:

在项目界面点击Pipeline Syntax

Build a job
Git
Node
sh
Stage 任务:通过pipeline制作一个部署流水线

转载:https://www.cnblogs.com/luchuangao/p/7748575.html

【转】基于Jenkins实现持续集成【持续更新中】的更多相关文章

  1. Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    Net 项目构建基于Jenkins + Github + Mono 的持续集成环境 阅读目录 1 安装 2 配置 3 测试 在Redhat enterprise 6.5 的服务器上,为在gutub 上 ...

  2. 构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境

    构建gitlab+Jenkins+harbor+kubernetes的DevOps持续集成持续部署环境 整个环境的结构图. 一.准备工作 gitlab和harbor我是安装在kubernetes集群外 ...

  3. CI/CD持续集成/持续部署 敏捷开发

    敏捷软件开发(英语:Agile software development),又称敏捷开发,是一种从1990年代开始逐渐引起广泛关注的一些新型软件开发方法,是一种应对快速变化的需求的一种软件开发能力.它 ...

  4. SAP开源的持续集成-持续交付的解决方案

    SAP开源的持续集成/持续交付的解决方案: (1) 一个叫做piper的github项目,包含一个针对Jenkins的共享库和一个方便大家快速搭建CI/CD环境的Docker镜像: (2) 一套SAP ...

  5. CI / CD /CD 持续集成 持续交付 持续部署

    CI / CD /CD 持续集成 持续交付 持续部署 CI CD 是啥?干了啥? CI continuous integration 持续集成 CD continuous delivery 持续交付 ...

  6. 持续集成:TestNG中case之间的关系

    持续集成:TestNG中case之间的关系   poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq: ...

  7. 使用 CircleCI 2.0 进行持续集成/持续部署

    使用 CircleCI 2.0 进行持续集成/持续部署 - 简书https://www.jianshu.com/p/36af6af74dfc Signup - CircleCIhttps://circ ...

  8. 在Redhat上为.Net 项目构建基于Jenkins + Github + Mono 的持续集成环境

    在Redhat enterprise 6.5 的服务器上,为在gutub 上的 .net 项目构建一个持续集成环境,用到了Jenkins和mono.因公司的服务器在内网,访问外网时要通过代理,所以在很 ...

  9. 【.NetCore】基于jenkins以及gitlab的持续编译及发布

    前沿 其实本来是想把标题叫做持续集成的,只是后来看看研究出的内容,就只有发布这一个动作,自动化测试等内容也未涉及到,所以改名叫持续编译及发布应该更加贴切吧? 问题背景 其实目前我们传统方式上的发布方式 ...

  10. Jenkins 持续集成持续发布使用搭建基础

    一.环境搭建基础 1.持续集成.持续交付.持续部署概念 ①.集成: 是指软件多人研发的部分软件代码整合交付,以便尽早发现个人开发部分的问题:持续集成:强调开发人员提交了新代码之后,立刻进行构建(单元) ...

随机推荐

  1. JavaScript(一)

    JavaScript介绍 JavaScript是运行在浏览器端的脚步语言,JavaScript主要解决的是前端与用户交互的问题,包括使用交互与数据交互. JavaScript是浏览器解释执行的,前端脚 ...

  2. css 基本语法及页面引用:

    css基本语法: css的定义方法是: 选择器{ 属性:值; 属性:值; 属性:值; } 选择器是将样式和页面元素关联起来的名称,属性是希望设置的样式属性,每个属性有一个或多个值. 如: div{ w ...

  3. mysql 连接超慢

    cd /etc/mysql/mysql.conf.dsudo vi mysqld.cnf加上最后一句skip-name-resolve, 如下:[mysqld]## * Basic Settings# ...

  4. IOS开发中发布的时候取消日志打印

    在PCH文件中定义如下宏 #if DEBUG #define NSLog(...) NSLog(__VA_ARGS__) #define debugMethod() NSLog(@"%s&q ...

  5. GMA Round 1 空降

    传送门 空降 在一块100m*100m的平地上,10位战士从天而降!他们每人会均匀随机地落在这个地图上的一个点. 紧随其后,BOSS随机出现在这个地图上的某一点,然后它会奔向位于左上角的出口,而战士们 ...

  6. JavaScript学习day3 (基本语法下)

    if/else for while 函数的使用 JavaScript语句 if/else 语句 JavaScript 中的if/else 判断选择,语法格式是这样的 switch/case 语句 在做 ...

  7. Python练手例子(1)

    1.有四个数字:1.2.3.4,能组成多少个互不相同且无重复数字的三位数?各是多少? 程序分析:可填在百位.十位.个位的数字都是1.2.3.4.组成所有的排列后再去 掉不满足条件的排列. #本人的运行 ...

  8. Asch PK Lisk系列之一:安全性

    在币圈,听到对数字货币的质疑之声从来没少过.为什么有人会质疑呢?他们列出了很多理由(以下四点内容摘自网络): 数字货币是依附于网络的,而中国并没有独立自主的网络技术,容易被敌对势力利用数字货币损害中国 ...

  9. Lucene.net 的性能探究--Lucene.net 的并发处理能力到底有多强?

    这篇博客并不是证明Lucene.net的性能有多强悍,实际上Lucene.net的并发能力并不让人很满意,这得看你怎么用它. 因为Lucene 本身就是一个搜索引擎的基础框架,相当于一辆车子的发动机, ...

  10. 好大一个坑: EF Core 异步读取大字符串字段比同步慢100多倍

    这两天遇到一个奇怪的问题,通过 EF/EF Core 查询数据库速度奇慢,先是在传统的 ASP.NET 项目中遇到(用的是EF6.0),后来将该项目迁移至 ASP.NET Core 也是同样的问题(用 ...