jenkins入门

1.简介

基本概念解释

1、持续集成

Continuous integration (CI)

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

持续集成强调开发人员提交了新代码之后,立刻进行构建、(单元)测试。根据测试结果,我们可以确定新代码和原有代码能否正确地集成在一起。s

持续集成的好处主要有两个:

快速发现错误

每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易

防止分支大幅偏离主干

如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成。

持续集成的目的,就是让产品可以快速迭代,同时还能保持高质量。它的核心措施是,代码集成到主干之前,必须通过自动化测试。只要有一个测试用例失败,就不能集成。

2、持续交付

持续交付在持续集成的基础上,将集成后的代码部署到更贴近真实运行环境的「类生产环境」(production-like environments)中。比如,我们完成单元测试后,可以把代码部署到连接数据库的 Staging 环境中更多的测试。如果代码没有问题,可以继续手动部署到生产环境中。

3、持续部署

持续部署则是在持续交付的基础上,把部署到生产环境的过程自动化。

2.jenkins安装

由于国外网站访问较慢,推荐使用清华源,这里使用war安装

https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/

wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/war/2.223/jenkins.war

启停脚本

#!/bin/bash
######################################################
# $Name:        start_stop.sh
# $Version:     v1.0
# $Function:    clean es log index
# $Author:      Shy.Zhang
# $Create Date: 2021-05-19
# $Description: jenkins启停脚本
######################################################
APP_NAME=/data/TRS/jenkins/jenkins.war
LOG=/data/TRS/jenkins/jenkins.out
#使用说明,用来提示输入参数
usage() {
echo "Usage: sh robotcenter.sh [start|stop|restart|status]"
exit 1
}

#检查程序是否在运行
is_exist(){
pid=$(ps -ef|grep $APP_NAME|grep -v grep|awk '{print $2}')
#如果不存在返回1,存在返回0
if [ -z "${pid}" ]; then
return 1
else
return 0
fi
}

#启动方法
start(){
is_exist
if [ $? -eq 0 ]; then
echo "${APP_NAME} is already running. pid=${pid}"
else
echo "${APP_NAME} 正在启动!"
nohup /TRS/jdk1.8.0_181/bin/java -jar -Xms2g -Xmx2g -XX:PermSize=2g -XX:MaxPermSize=2g -Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true  --httpPort=7080 >$LOG 2>&1 &

fi
}

#停止方法
stop(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} 正在停止!"
kill -9 $pid
else
echo "${APP_NAME} is not running"
fi
}

#输出运行状态
status(){
is_exist
if [ $? -eq "0" ]; then
echo "${APP_NAME} is running. Pid is ${pid}"
else
echo "${APP_NAME} is NOT running."
fi
}

#重启
restart(){
stop
sleep 2
start
}

#根据输入参数,选择执行对应方法,不输入则执行使用说明
case "$1" in
"start")
start
;;
"stop")
stop
;;
"status")
status
;;
"restart")
restart
;;
*)
usage
;;
esac

3.程序目录

cat /etc/profile

#exportJENKINS_ARGS="--prefix=/jenkins"
export JENKINS_HOME=/data/TRS/jenkins/jenkinsDB

4.系统设置

我们暂时只改变这两处设置:执行者数量:表示同时可以执行几个job,生成前等待时间:是指从你点击构建到系统执行构建需要等待多长时间,这样可以防止你点错了,可以有一个取消的时间。其他配置我们会在后面的实际使用中,根据需要逐步学习配置

5.Jenkins 升级、迁移、备份

1.下载最新war包替换即可

2.迁移、备份

  Jenkins的所有的数据都是以文件的形式存放在JENKINS_HOME目录中。所以不管是迁移还是备份,只需要操作JENKINS_HOME就行。建议将JENKINS_HOME打包后在拷贝,windows上可以用zip,rar等,Linux上有zip,tar等。然后将打包的文件解压到新的JENKINS_HOME目录就行了
  。
进入到主目录下,可以看到很多文件,是否需要全部打包呢?
其实我们只需要打包4个文件就可以了,
分别是config.xml文件,jobs文件夹,users文件夹和plugins文件夹。
从名称上就可以看出来各自的作用,config.xml是存放配置信息的,jobs是存放创建的工程项目的,users是存放用户账信息的,plugins是存放插件的

3.使用thinbackup插件备份

1)安装插件:

登录web页面,点击系统管理:

点击管理插件:

点击可选插件,选择你需要安装的插件

安装完成后,一般情况下不需要重启Jenkins,具体根据提示。

2)配置插件:

4)测试从备份恢复

我们删除job目录下的my-freestyle-job目录,

rm my-freestyle-job -rf

drwxr-xr-x 3 root root  38 Dec  8 15:48 accout-maven-job

drwxr-xr-x 3 root root 101 Dec  8 15:48 frontend-job

drwxr-xr-x 3 root root 101 Dec  8 15:48 pipline-demo

然后我们使用刚才的备份恢复:

6.创建一个freestyle的Job

1、执行简单命令或脚本

job配置页面:

勾选丢弃旧的构建:

由于每次构建都会生成很多构建产物,如果频繁构建会占用很多的空间,我们可以通过这几个选项控制构建产物的保留。一般建议选择保留最近5-10的构建为适宜。

点击意即构建执行一下,看看结果:

通过这个小例子,我们可以总结如下几点:

1、可以使用Jenkins在页面执行任何需要在linux命令行的操作;

2、定不要在生产环境中用root用户启动jenkins。

2、配置使用Gitlab

1、在Jenkins本地生成SSH Key:

ssh-keygen -t rsa

2、配置Gitlab Deploy Key

     ![](https://img2020.cnblogs.com/blog/1436424/202005/1436424-20200518152939583-897339845.png)    

3、安装git并本地测试

yum install git -y

测试

git clone  git@gitlab.c.com:disanfang/frontend.git

3、代码发布

上面的示例我们已经实现Gitlab拉取地Jenkins本地,下面接下上面的示例,我们实现将代码发布到我们的服务器:

1)配置免密登录

要实现无交互式的传输文件,执行命令,我们首先要保证Jenkins本机可以免密登录到目标主机。

 ssh-copy-id -i .ssh/id_rsa.pub 192.168.56.11

测试连通性

ssh 192.168.56.11
exit

2)编写发布脚本

     我们实现将从Git拉到的代码打包,然后发布到node1的/data/web目录下。编辑我们的Job,在构建处输入如下代码
BUILD_ID=dontkillme
find ./target/ -name "**.jar"|grep -v "jar"|xargs cp -t  /application/jar/ -f 

7.创建Maven项目

     上面我讲述的Job都是非编译项目,也就是代码从仓库中拉下来,不经过任何操作就可以发布,这对于像Java、Android等源码需要编译的项目是不可用的,下面我们讲解如何使用Maven插件来构建Java项目。

1、Maven介绍

Maven是一个项目管理和综合工具。Maven提供给开发人员构建一个完整的生命周期框架。

开发团队可以自动完成该项目的基础设施建设,Maven使用标准的目录结构和默认构建生命周期。

Apache的开源项目主要服务于JAVA平台的构建、依赖管理、项目管理。

Project Object Model,项目对象模型。通过xml格式保存的pom.xml文件。该文件用于管理:源代码、配置文件、开发者的信息和角色、问题追踪系统、组织信息、项目授权、项目的url、项目的依赖关系等等。该文件是由开发维护,我们运维人员可以不用去关心。

2、安装Maven插件

     我们要使用Jenkins+Maven对Java项目进行构建,需要安 Maven Integration

3、Linux下安装Maven

1)下载Maven 3安装包

     官网:http://maven.apache.org/download.cgi

     清华镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/

2)安装Maven

wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz
tar xf apache-maven-3.3.9-bin.tar.gz
mv apache-maven-3.3.9 /usr/local/
ln -s /usr/local/apache-maven-3.3.9/ /usr/local/maven
cd ..
/usr/local/maven/bin/mvn -v

3)配置

编辑/etc/profile文件,在末尾添加

export PATH=/usr/local/apache-maven-3.3.9/bin/:$PATH 

4、Maven 插件配置

5、创建Maven Job

6、Maven的常用命令

此部分内容了解即可,

1. 创建Maven的普通java项目: 

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

我们Jenkins  Biuld部分最常用的配置是:clean install -Dmaven.test.skip=true。
clean package -e -U  -DskipTests  #强制更新快照仓库

clean package   -DskipTests

8.权限配置

     由于jenkins默认的权限管理体系不支持用户组或角色的配置,因此需要安装第三发插件来支持角色的配置,我们使用[Role-based Authorization Strategy](http://wiki.jenkins-ci.org/display/JENKINS/Role+Strategy+Plugin) 插件,

1、启用插件

插件安装后,我们先启用该插件管理Jenkins权限。

2、创建用户

我们新建一个test用户:

3、创建角色

Jenkins用户都有两种角色:全局角色和Job角色,我们先创建全局角色test,

然后赋予cs角色全局读的功能。

再创建Job角色test,并赋予Job只读权限

模糊匹配要使用 .*而不是单纯的 一个 * 切记

Pattern:用于匹配Job名称。并授权可读权限

4、用户授权

LWu24FQoRA9gm

在全局角色下添加我们的test用户,并赋予该用户我们刚才创建的全局test角色。

保存后,我们使用test用户登录:

我们只有查看的权限,而且看不到任何Job信息。接着我们再赋予test用户Job角色下的test角色:

再次使用test用户登录,我们发现匹配到的项目出现了,并且我们只能查看该Job的信息。

我们赋予Job roles下test角色 构建权限后,再次登录,发现我们可以构建Job。

9.构建一个node.js项目

1、插件安装

2.安装node.js

#下载node二进制包,此包已经包含node,不需要再编译
wget https://nodejs.org/download/release/v14.2.0/node-v14.2.0-linux-x64.tar.gz
#解压缩
tar -zxvf node-v14.2.0-linux-x64.tar.gz
#进入node文件夹
cd node-v14.2.0-linux-x64
#ln -s /opt/node-v14.2.0-linux-x64/bin/node /usr/bin/node 
#/etc/profile
export PATH=$PATH:/opt/node-v14.2.0-linux-x64/bin:$PATH
#读取文件,生效PATH
source /etc/profile
#查看版本信息
npm -v
node -v
#安装淘宝cnpm
npm install -g cnpm

2.配置nodes地址

3.创建自由项目

执行shell

cnpm install
cnpm run build

9.添加maven仓库

wget https://download.sonatype.com/nexus/3/latest-unix.tar.gz

tar -zxvf nexus-3.18.1-01-unix.tar.gz
#解压后又2个目录
	#nexus-3.18.1-01:包含了 Nexus 运行所需要的文件。是 Nexus 运行必须的
	#sonatype-work:包含了 Nexus 生成的配置文件、日志文件、仓库文件等。当我们需要备份 Nexus 的时候默认备份此目录即可

#修改环境变量
vim /etc/profile
export NEXUS_HOME=/usr/local/nexus/nexus-3.18.1
export PATH=$PATH:$NEXUS_HOME/bin

source /etc/profile

#修改启动用户
vim /usr/local/nexus/nexus-3.18.1/bin/nexus.rc
#run_as_user=""			#内容就这一行,放开注释,填写用户即可

#修改端口
vim /usr/local/nexus/nexus-3.18.1/etc/nexus-default.properties	#默认是8081

#最后启动nexus
cd /usr/local/nexus/nexus-3.18.1/bin
./nexus start
./nexus status

#访问http://ip:8081,登陆用户admin 密码存放在:/usr/local/nexus/sonatype-work/nexus3/admin.password 目录

#开机自启动
vim /etc/rc.d/rc.local

/usr/local/nexus/nexus-3.18.1/bin/nexus start	#添加这一行内容

chmod 755 /etc/rc.d/rc.local

在setting中配置

    <server>
      <id>nexus</id>
      <username>admin</username>
      <password>QDz1</password>
    </server>

  </servers>
  <mirrors>

    <mirror>
      <id>nexus</id>
      <mirrorOf>*</mirrorOf>
      <url>http://nexus.com/repository/maven-public/</url>
    </mirror>

  </mirrors>

推送

mvn deploy:deploy-file -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=10.2.0.1.0 -Dpackaging=jar -Dfile=blade-gateway.jar -Durl=https://repo.rdc.aliyun.com/repository/127336-release-Ua0yA8 -DrepositoryId=rdc-releases
DgroupId和DartifactId构成了该jar包在pom.xml的坐标,项目就是依靠这两个属性定位。自己起名字也行。 
Dfile表示需要上传的jar包的绝对路径。 
Durl私服上仓库的位置,打开nexus——>repositories菜单,可以看到该路径。
-Durl中指定自己三方库地址 -DrepositoryId 和 server中配置的ID对应
DrepositoryId服务器的表示id,在nexus的configuration可以看到。 
Dversion表示版本信息,怎样得到一个jar包准确的版本呢? 
解压该包,会发现一个叫MANIFEST.MF的文件,这个文件就有描述该包的版本信息。 
比如Manifest-Version: 1.0可以知道该包的版本了。

上传成功后,在nexus界面点击3rd party仓库可以看到这包

https://www.jianshu.com/p/a24cce14fcbf

posted @ 2020-05-21 15:18  追梦nan  阅读(409)  评论(0编辑  收藏  举报