jenkins_2
2)编写发布脚本
我们实现将从Git拉到的代码打包,然后发布到node1的/data/web目录下。编辑我们的Job,在构建处输入如下代码
构建执行成功后:
我们在Jenkins的工作区my-freestyle目录中生成web-11.tar.gz包,并且已经传送到了node1要求的目录下。
在这里我们作以下两点解释:1、构建过程中命令执行的当前目录为:Jenkins主目录下workspace目录下Jobname目录;2、我们可以在脚本中使用Jenkins的各种环境变量,调用方式和我们在linux中调用系统变更方式相同,我们可以使用如下方式查看Jenkins的所有环境变量:
4、参数化构建
上一节中我们介绍了如何使用Jenkins的环境变量,那么我们是不是可以在构建过程中,自定义变量,答案是肯定的,下面我们介绍Jenkins的参数化构建:
配置项目,点击参数化构建过程:
我们看到有多好种类型的参数,我们常用的choice和string。
1)choice Parameter
choice给出多个选项,构建时可以手动选择参数,默认是第一行数据。
2)string Parameter:
string提供一个文本输入框,使用字符串值的参数变量。
我们添加两个参数:
然后在我们脚本中调用:
保存后,我们发现:
点击Build with parameters:
点击开始构建,查看构建结果如下:
还有很多其他的可用参数:Boolean Parameter提供一个布尔选择,password Parameter参数提供一个类似密码的输入框,Git Parameter可以选择需要签出代码的分支、标签等。
5、Git commit触发Jenkins 构建
本次实验,我们新建一个freestyle Job,实现开发在本地向frontend 仓库dev 分支push 代码,Jenkins自动拉取dev分支的代码,然后进行构建后将代码发布到指定的服务器。
1)安装插件
实现Jenkins与Gitlab的联动需要安装:Gitlab Authentication plugin、GitLab Plugin这两个插件。
2)配置Jenkins连接Gitlab
系统管理—系统设置
我们转到GitLab上生成一个token:
我们复制生成的token,添加到jenkins:
选择刚才生成的认证
3)新建frontend Job:
我们使用复制的方式创建新的Job,
我们发现新生成的frontend-job配置与my-freestyle一样,我们可以在此基础做改动。
源码管理部分:我们选择从dev分支拉取代码
构建触发器部分:
此选项主要配置Gitlab如何触发Jenkins Job构建,这里我们配置只有dev分支的push操作会触发构建,并生成一个token,在前面我们配置了Jenkins可以访问Gitlab,但是Gitlab并不能访问Jenkins,此的token用于配置Gitlab访问Jenkins(我们后面介绍)。
构建部分我们设置如下:
4)配置Gitlab仓库连接Jenkins
在Gitlab中选择frontend仓库,点击settings下的Integrations:
URL与Secret Token的值来自刚才我们在Jenkins配置构建触发器部分,见下图。
完成配置后,我们进行测试,
[root@node1 frontend]# git checkout dev Already on 'dev' Your branch is up-to-date with 'origin/dev'. [root@node1 frontend]# git branch 1-index 2-news * dev master [root@node1 frontend]# vim index.html [root@node1 frontend]# git add . [root@node1 frontend]# git commit -m "modify index.html" [dev 17365f9] modify index.html 1 file changed, 1 insertion(+) [root@node1 frontend]# git push origin dev Counting objects: 3, done. Delta compression using up to 2 threads. Compressing objects: 100% (3/3), done. Writing objects: 100% (3/3), 291 bytes | 0 bytes/s, done. Total 3 (delta 1), reused 0 (delta 0) remote: remote: To create a merge request for dev, visit: remote: http://192.168.56.12/web-site/frontend/merge_requests/new?merge_request%5Bsource_branch%5D=dev remote: To 192.168.56.12:web-site/frontend.git a33914c..17365f9 dev -> dev
5)git按分支、版本部署
八、Jenkins Pipeline
1、Pipeline介绍
Pipeline 是Jenkins 2.0的精髓,简单来说,就是一套运行于Jenkins上的工作流框架,将原本独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂发布流程。Pipeline的实现方式是一套Groovy DSL,任何发布流程都可以表述为一段Groovy脚本,并且Jenkins支持从代码库直接读取脚本,从而实现了Pipeline as Code的理念。
Stage: 阶段,一个Pipeline可以划分为若干个Stage,每个Stage代表一组操作。注意,Stage是一个逻辑分组的概念,可以跨多个Node。
Node: 节点,一个Node就是一个Jenkins节点,或者是Master,或者是Agent,是执行Step的具体运行期环境。
2、pipeline简单示例
配置页面前半部分和freestyle项目一样,只是后半部分少了源码管理、构建和构建后操作这部分内容,这是因为pipeline所有的这些操作都是要通过编写Groovy脚本来实现,大家不要怕,写一些我们常用的操作也不难,下面我们通过具体的例子带大家来学习。我们首先创建一个最简单的例子。
node {
echo 'Hello World'
}
此段代码的作用就是输出Hello World。
保存后执行,查看结果输出了Hello World。
3、Pipeline多stage示例
1)多stage Pipeline Job
我们使用如下的pipeline script:
node {
stage("Pull Code"){
echo "pull code from git "
}
stage("Code Build"){
echo "Buile code"
}
stage('Unit Test'){
echo "Unit Test"
}
}
stage表示阶段,每个阶段里可以执行具体的操作。我们暂时先简单的输出一些文字,后面再介绍其他常用操作。
保存后Job后,执行构建:
我们可以看每一个阶段的执行时间,点击可以查看每一个阶段执行的日志:
2)Pipeline Scipt 执行命令、脚本
我们可以使用如下方式执行命令或者脚本
node { stage("Pull Code"){ echo "pull code from git" sh "ls /etc" } stage("Code Build"){ echo "Buile code" sh "/server/scripts/demo.sh" } stage('Unit Test'){ echo "Unit Test" } }
得到如下结果:
3)使用生成器生成pipeline脚本
现在我们使用Pipeline Script实现frontend-job,脚本如下:
node { stage("获取代码"){ echo "获取代码" git branch: 'dev', url: 'git@192.168.56.12:web-site/frontend.git' } stage("打包"){ echo "打包" sh "tar czf frontend-${BUILD_NUMBER}.tar.gz ./*.html" } stage('发布到node1'){ echo "发布到node1" sh "scp frontend-${BUILD_NUMBER}.tar.gz 192.168.56.11:/data/web" } }
4)使用Pipeline Script调用己有的Job
我们的目录的是想一次性按顺序自动执行多个Job,我们还是使用生成器:
node { stage("获取代码"){ echo "获取代码" git branch: 'dev', url: 'git@192.168.56.12:web-site/frontend.git' } stage("打包"){ echo "打包" sh "tar czf frontend-${BUILD_NUMBER}.tar.gz ./*.html" } stage('发布到node1'){ echo "发布到node1" sh "scp frontend-${BUILD_NUMBER}.tar.gz 192.168.56.11:/data/web" } stage("调用frontend Job"){ build 'frontend-job' } }
九、创建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 Project Plugin,具体安装过程请参考插件管理部分
3、Linux下安装Maven
1)下载Maven 3安装包
官网:http://maven.apache.org/download.cgi
清华镜像:https://mirrors.tuna.tsinghua.edu.cn/apache/maven/
2)安装Maven
[root@node3 src]# wget https://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.3.9/binaries/apache-maven-3.3.9-bin.tar.gz^C [root@node3 src]# tar xf apache-maven-3.3.9-bin.tar.gz [root@node3 src]# mv apache-maven-3.3.9 /usr/local/ [root@node3 src]# ln -s /usr/local/apache-maven-3.3.9/ /usr/local/maven [root@node3 src]# cd .. [root@node3 local]# /usr/local/maven/bin/mvn -v Apache Maven 3.3.9 (bb52d8502b132ec0a5a3f4c09453c07478323dc5; 2015-11-11T00:41:47+08:00) Maven home: /usr/local/maven Java version: 1.8.0_121, vendor: Oracle Corporation Java home: /usr/java/jdk1.8.0_121/jre Default locale: en_US, platform encoding: UTF-8 OS name: "linux", version: "3.10.0-693.5.2.el7.x86_64", arch: "amd64", family: "unix"
3)配置
编辑/etc/profile文件,在末尾添加export PATH=/usr/local/apache-maven-3.3.9/bin/:$PATH
4、Maven 插件配置
5、创建Maven Job
在我们创建Job之间,首先要保证我们的Gitlab仓库有一个java的源码仓库,下面我先在Gitlab上导入一个Java的仓库:
远程仓库地址:http://code.greatops.net/greatops/practice-code.git ,导入成功后我们得到这样的一个仓库
构建完成生,我们在看到在我们的工作区中,每个项目下面生成了一个target目录,里面有一个XXX.jar的文件,这个就是我们的构建产物,构建产物的名称是在项目的pom.xml文件定义,我们可以把这个文件发布到我们的服务器。
接着,我们增加一个Post Steps,用于将构建产物发布,配置如下:
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。