Jenkins持续集成入门到精通-一篇就够

本文详细介绍了如何配置Jenkins进行持续集成,包括Jenkins的安装、GitLab代码托管服务器的安装、Jenkins插件管理和凭证管理,以及Maven项目的自动构建。此外,还讨论了Pipeline的使用,包括声明式和脚本式Pipeline的创建,以及如何通过GitLab的webhook自动触发构建。
摘要由CSDN通过智能技术生成

一、Jenkins安装和持续集成环境配置

1、持续集成流程说明

1 )首先,开发人员每天进行代码提交,提交到 Git 仓库,测试人员进行合并;
2 )然后, Jenkins 作为持续集成工具,使用 Git 工具到 Git 仓库拉取代码到集成服务器,再配合 JDK
Maven 等软件完成代码编译,代码测试与审查,测试,打包等工作,在这个过程中每一步出错,都重新再执行一次整个流程。
3 )最后, Jenkins 把生成的 jar war 包分发到测试服务器或者生产服务器,测试人员或用户就可以访问应用。

 2、Gitlab代码托管服务器安装

GitLab GitHub 一样属于第三方基于 Git 开发的作品,免费且开源(基于 MIT 协议),与 Github 类似, 可以注册用户,任意提交你的代码,添加SSHKey 等等。不同的是, GitLab 是可以部署到自己的服务器 上,数据库等一切信息都掌握在自己手上,适合团队内部协作开发。一般公司为了安全性,都会采用GitLab进行管理代码。
Gitlab 安装
1. 安装相关依赖
yum -y install policycoreutils openssh-server openssh-clients postfifix
2. 启动 ssh 服务 & 设置为开机启动
systemctl enable sshd && sudo systemctl start sshd
3. 设置 postfifix 开机自启,并启动, postfifix 支持 gitlab 发信功能
systemctl enable postfifix && systemctl start postfifix
4. 开放 ssh 以及 http服务,然后重新加载防火墙列表(如果关闭防火墙就不需要做以上配置)
fifirewall-cmd --add-service=ssh --permanent
fifirewall-cmd --add-service=http --permanent
fifirewall-cmd --reload
5. 下载 gitlab 包,并且安装
在线下载安装包:
wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/gitlab-ce-12.4.2-ce.0.el6.x
86_64.rpm
安装:
rpm -i gitlab-ce-12.4.2-ce.0.el6.x86_64.rpm
6. 修改 gitlab 配置
vi /etc/gitlab/gitlab.rb
修改 gitlab 访问地址和端口,默认为 80 ,我们改为 82
external_url ' http://xxxxxxx:82 ' nginx['listen_port'] = 82
7. 重载配置及启动 gitlab
gitlab-ctl reconfifigure
gitlab-ctl restart
8. 把端口添加到防火墙
fifirewall-cmd --zone=public --add-port=82/tcp --permanent
fifirewall-cmd --reload
9.gitlab-ce初始化的时候,会把密码放到一个临时文件,我们可以查看到root的默认密码
cat /etc/gitlab/initial_root_password

 

 3.持续集成环境(1)-Jenkins安装

安装jenkins的方法很多,笔者在这里采用tomcat结合war包的形式安装jenkins

1、先在linux上安装JAVA JDK

jdk的安装可以参照下我之前的文章

Linux下安装Jmeter_Yasar.l的博客-CSDN博客

2、下载tomcat,然后上传到linux服务器进行解压;

tomcat官网:Apache Tomcat® - Welcome!

解压:

 tar -xvf apache-tomcat-9.0.36.tar.gz

 修改tomcat的默认启用端口,在tomcat的/export/server/apache-tomcat-9.0.36/conf目录下的server.xml文件,把8080替换为8081,然后保存。

 然后切换到bin目录下,启动(成功效果如图)

./startup.sh    // 启动
# 这个文件停止tomcat服务,一般不用,用了就访问不了了    
./shutdown.sh    // 停止

在这里插入图片描述

 3、jenkins下载安装

下载页面:Jenkins 的安装和设置

 将下载到的war包,放到tomcat的/export/server/apache-tomcat-9.0.36/webapps目录下

然后重新启动tomcat

./shutdown.sh    // 停止

./startup.sh    // 启动

在浏览器中输入:http://ip:8081/jenkins即可访问jenkins

二、持续集成环境-Jenkins插件管理

1、修改Jenkins插件下载地址

Jenkins 国外官方插件地址下载速度非常慢,所以可以修改为国内插件地址:
Jenkins->Manage Jenkins->Manage Plugins ,点击Advanced settings

 

http://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

修改后保存,重启jenkins
重启jenkins只需要在浏览器上输入:

2、下载汉化插件

Jenkins->Manage Jenkins->Manage Plugins ,点击 Available ,搜索 "Chinese"

 下载完后重新启动jenkins

三、持续集成环境-Jenkins凭证管理

凭据可以用来存储需要密文保护的数据库密码、 Gitlab 密码信息、 Docker 私有仓库密码等,以便
Jenkins 可以和这些第三方的应用进行交互
安装 Credentials Binding 插件
要在 Jenkins 使用凭证管理功能,需要安装 Credentials Binding 插件

安装插件后,左边多了"凭证"菜单,在这里管理所有凭证

 可以添加的凭证有5种:

Username with password :用户名和密码
SSH Username with private key : 使用SSH 用户和密钥
Secret fifile :需要保密的文本文件,使用时 Jenkins 会将文件复制到一个临时目录中,再将文件路径,设置到一个变量中,等构建结束后,所复制的Secret fifile 就会被删除。
Secret text :需要保存的一个加密的文本串,如钉钉机器人或 Github api token
Certifificate :通过上传证书文件的方式
常用的凭证类型有: Username with password (用户密码) SSH Username with private key SSH密钥)
为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在 CentOS7 上安装 Git 工具。

四、安装Git插件和Git工具

为了让 Jenkins 支持从 Gitlab 拉取源码,需要安装 Git 插件以及在 CentOS7 上安装 Git 工具。
Git 插件安装:

CentOS7 上安装 Git 工具:
yum install git -y 安装
git --version 安装后查看版本
用户密码类型
1 )创建凭证
Jenkins-> 凭证 -> 系统 -> 全局凭证 -> 添加凭证

输入gitlab的账号信息,然后点击保存

2 )测试凭证是否可用
创建一个 FreeStyle 项目:新建 Item->FreeStyle Project-> 确定

 

找到"源码管理"->"Git",在Repository URL复制Gitlab中的项目URL

 

执行,看是否把gitlab的项目拉取到jenkins服务器

 

 拉取成功

 jenkins默认拉取到服务器的这个位置:/root/.jenkins/workspace/test,我们可以上服务器查看文件

 

 五、持续集成环境-Jenkins自动构建Maven项目

Maven安装和配置

下载maven到linux服务器

wget https://archive.apache.org/dist/maven/maven-3/3.6.1/binaries/apache-maven-3.6.1-bin.tar.gz --no-check-certificate

解压tar包

tar -zxvf apache-maven-3.6.1-bin.tar.gz 

添加环境变量

vi /etc/profile
export MAVEN_HOME=/export/server/apache-maven-3.6.1
export JAVA_HOME=/export/server/jdk-11
export PATH=$PATH:$JAVA_HOME/bin:$MAVEN_HOME/bin

刷新环境变量

source /etc/profile 配置生效
mvn -v 查找Maven版本

 修改Mavensettings.xml

mkdir repo 创建本地仓库目录
vim /export/server/apache-maven-3.6.1/conf/settings.xml
本地仓库改为:/export/server/repo
<localRepository>/export/server/repo</localRepository>

镜像改为阿里云镜像

  <mirrors>
    <mirror>
      <id>alimaven</id>
      <mirrorOf>central</mirrorOf>
      <name>aliyun maven</name>
      <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
    </mirror>
  </mirrors>

jenkins配置环境变量

Manage Jenkins->Configure System->Global Properties ,添加三个全局变量
JAVA_HOME、MAVEN_HOME、PATH+EXTRA

然后在tool中配置关联JDK和MAVEN

新建一个ITEM试一下是否能拉取项目和进行mvn打包

打包成功

 publish over ssh插件下载和配置

 下载完后重新启动jenkins

1.首先Jenkins要安装Publish Over SSH插件,找到插件管理,搜索下载即可;
2.安装好Publish Over SSH插件之后,点击系统管理–>系统设置,在系统设置界面找到Publish Over SSH部分;

 打开我们刚刚新建的项目,我们在MVN打包后,把打的包推送到后端的服务器

 shell的脚本

注意:在脚本前需要添加source /etc/profile,刷新配置文件,不然通过jenkins去执行脚本的时候,会获取不到服务器的JDK的路径导致报错;

source /etc/profile
ID=`ps -ef | grep community | grep -v grep | awk '{print $2}'`
echo $ID
for id in $ID
do
kill -9 $id
echo "kill $id"
done
nohup java -jar community-0.0.1-SNAPSHOT.jar > ./community-api.log 2>&1 &

在服务器查看 ps -ef |grep community,发现项目已经成功启动。

后续更新中........,有兴趣的关注加点赞收藏。。。。创作不易

六、Pipeline流水线Maven项目构建

Pipeline简介

1 )概念
      Pipeline ,简单来说,就是一套运行在 Jenkins 上的工作流框架,将原来独立运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排和可视化的工作。
2 )使用 Pipeline 有以下好处(来自翻译自官方文档):
代码: Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其传送流程。 持久:无论是计划内的还是计划外的服务器重启,Pipeline 都是可恢复的。 可停止: Pipeline 可接收交互式输入,以确定是否继续执行Pipeline 。 多功能: Pipeline 支持现实世界中复杂的持续交付要求。它支持fork/join 、循环执行,并行执行任务的功能。 可扩展: Pipeline 插件支持其 DSL 的自定义扩展 ,以及与其他插件集成的多个选项。
3 )如何创建 Jenkins Pipeline 呢?
Pipeline 脚本是由 Groovy 语言实现的,但是我们没必要单独去学习 Groovy
Pipeline 支持两种语法: Declarative ( 声明式 ) Scripted Pipeline ( 脚本式 ) 语法
Pipeline 也有两种创建方法:可以直接在 Jenkins Web UI 界面中输入脚本;也可以通过创建一
Jenkinsfifile 脚本文件放入项目源码库中(一般我们都推荐在 Jenkins 中直接从源代码控制 (SCM)中直接载入 Jenkinsfifile Pipeline 这种方法)。

安装Pipeline插件

 

 1Declarative声明式-Pipeline

创建项目

 流水线->选择HelloWorld模板

生成内容如下:

pipeline {
    agent any

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
            }
        }
    }
}

stages :代表整个流水线的所有执行阶段。通常 stages 只有 1 个,里面包含多个 stage
stage :代表流水线中的某个阶段,可能出现 n 个。一般分为拉取代码,编译构建,部署等阶段。
steps :代表一个阶段内需要执行的逻辑。 steps 里面是 shell 脚本, git 拉取代码, ssh 远程发布等任意内容。
编写一个声明式 Pipeline

 

选择git,输入仓库名称和选择gitlab的账号,然后点击生成脚本

将生成的脚本放到step中

 

 下载SSH Pipeline Steps插件,然后重新启动

 在线生成ssh语句

 

 

 

pipeline {
    agent any

    stages {
        stage('拉取gitlab代码') {
            steps {
                checkout scmGit(branches: [[name: '*/master']], extensions: [], userRemoteConfigs: [[credentialsId: '347db7d6-7d58-4aa1-92f1-c45b5684d8a5', url: 'http://192.168.88.xxx:82/test/community-api.git']])
                echo '拉取gitlab代码成功!'
            }
        }
        stage('Maven编译打包') {
            steps {
                sh 'mvn clean package'
                echo 'Maven编译打包成功!'
            }
        }
        stage('项目部署') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'community-api', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /export/software
sh ./start.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/community-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                 echo '项目部署成功!'
            }
            
        }
    }
}
 

点击构建,可以看到整个构建过程

2Scripted Pipeline脚本式-Pipeline  

创建项目
node {
    def mvnHome
    stage('拉取gitlab代码') {
        git credentialsId: '347db7d6-7d58-4aa1-92f1-c45b5684d8a5', url: 'http://192.16xxx.151:82/test/community-api.git'    }
    stage('编译打包') {
        sh 'mvn clean package'
    }
    stage('部署项目') {
        sshPublisher(publishers: [sshPublisherDesc(configName: 'community-api', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''cd /export/software
sh ./start.sh''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: 'target/', sourceFiles: 'target/community-0.0.1-SNAPSHOT.jar')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])    }
}
Node :节点,一个 Node 就是一个 Jenkins 节点, Master 或者 Agent ,是执行 Step 的具体运行
环境,后续讲到 Jenkins Master-Slave 架构的时候用到。
Stage :阶段,一个 Pipeline 可以划分为若干个 Stage ,每个 Stage 代表一组操作,比如:
Build Test Deploy Stage 是一个逻辑分组的概念。
Step :步骤, Step 是最基本的操作单元,可以是打印一句话,也可以是构建一个 Docker 镜像,
由各类 Jenkins 插件提供,比如命令: sh ‘make’ ,就相当于我们平时 shell 终端中执行 make 命令
一样。

Pipeline Script from SCM

刚才我们都是直接在 Jenkins UI 界面编写 Pipeline 代码,这样不方便脚本维护,建议把 Pipeline 脚本放 在项目中(一起进行版本控制)
1 )在项目根目录建立 Jenkinsfifile 文件,把内容复制到该文件中

 

Jenkinsfifile上传到Gitlab

2)在项目中引用该文件

 部署成功

 

 七、Jenkins项目构建细节-常用的构建触发器

Jenkins 内置 4 种构建触发器:
        触发远程构建
        其他工程构建后触发(Build after other projects are build
        定时构建(Build periodically
        轮询SCM Poll SCM

触发远程构建

       

用的不多,返回方式参考上图

其他工程构建后触发(Build after other projects are build

用的不多

定时构建(Build periodically

定时字符串从左往右分别为:
分 时 日 月 周 一些定时表达式的例子:
30 分钟构建一次: H 代表形参 H/30 * * * * 10:02 10:32
2 个小时构建一次 : H H/2 * * *
每天的 8 点, 12 点, 22 点,一天构建 3 次: ( 多个时间点中间用逗号隔开 ) 0 8,12,22 * * *
每天中午 12 点定时构建一次 H 12 * * *
每天下午 18 点定时构建一次 H 18 * * *
在每个小时的前半个小时内的每 10 分钟 H(0-29)/10 * * * *
每两小时一次,每个工作日上午 9 点到下午 5 ( 也许是上午 10:38 ,下午 12:38 ,下午 2:38 ,下午 4:38) H H(9-16)/2 * * 1-5

轮询SCMPoll SCM

轮询SCM,是指定时扫描本地代码仓库的代码是否有变更,如果代码有变更就触发项目构建。

注意:这次构建触发器, Jenkins 会定时扫描本地整个项目的代码,增大系统的开销,不建议使用。

Git hook自动触发构建(主要采用这种)

      刚才我们看到在 Jenkins 的内置构建触发器中,轮询 SCM 可以实现 Gitlab 代码更新,项目自动构建,但是该方案的性能不佳。那有没有更好的方案呢? 有的。就是利用Gitlab webhook 实现代码 push 到仓库,立即触发项目自动构建

安装Gitlab Hook插件

需要安装两个插件:
Generic Webhook Trigger和 GitLab

 

 Jenkins设置自动构建

等会需要把生成的 webhook URL 配置到 Gitlab

 

Gitlab配置webhook

1 )开启 webhook 功能
使用 root 账户登录到后台,点击 Admin Area -> Settings -> Network
勾选 "Allow requests to the local network from web hooks and services"
然后进入项目的gitlab,点击Webhook 输入项目的地址,然后点击保存

 

注意:以下设置必须完成,否则会报错!
Manage Jenkins->Confifigure System

 

接下来我们修改

Manage Jenkins->Manage Plugins-> 可选插件
3 Jenkins 构建 Maven 项目
4 Jenkins+Docker+SpringCloud 微服务持续集成
5 、基于 Kubernetes/K8S 构建 Jenkins 微服务持续集成平台
  • 6
    点赞
  • 75
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: "Jenkins持续集成从入门到精通PDF"这本书是一本涵盖了Jenkins持续集成全方位内容的工具书,适合想要从入门到精通Jenkins自动化构建工具的人士,是Jenkins学习的绝佳指南。 该书首先介绍了Jenkins的概念、架构和安装方法,然后深入讲解了Jenkins的管道和插件的使用,以及如何将Jenkins与其他工具集成。书中还详细介绍了如何构建、测试和部署Web项目,并提供了许多实际案例,帮助读者更好地了解如何使用Jenkins。 此外,该书还深入讲解了Jenkins的扩展和自动化的最佳实践,以及如何优化Jenkins的性能和安全性。该书包含大量的示例代码和实用建议,让读者更快地掌握Jenkins的使用技巧。 总之,"Jenkins持续集成从入门到精通PDF"是一本全面详细的Jenkins学习指南,涵盖了Jenkins的方方面面,可以帮助读者快速掌握Jenkins的基本概念和使用技巧,进而精通Jenkins。建议想深入学习Jenkins的人可以阅读此书,可以为您的职业发展打好基础。 ### 回答2: Jenkins是一个开源的持续集成工具,它可以帮助我们实现自动化的构建和测试,以及自动部署到测试环境和生产环境。而《Jenkins持续集成从入门到精通》这本书则是针对Jenkins的全面介绍和指南。 该书首先介绍了Jenkins的基本概念和架构,包括如何安装、配置和使用Jenkins,如何创建和管理作业,以及各种插件和扩展的使用方法。随后,该书详细讲解了如何使用Jenkins实现持续集成和持续交付,包括如何自动化构建、测试和部署代码,以及如何管理和监控持续集成过程。 《Jenkins持续集成从入门到精通》还专门介绍了一些常用的应用场景和最佳实践,如如何使用Jenkins进行Java项目的持续集成、如何结合Docker实现自动化部署等等。此外,该书还介绍了Jenkins与其他工具的集成,如如何与Git和SVN进行代码管理、如何与Selenium进行自动化测试等等。 总之,《Jenkins持续集成从入门到精通》这本书对于想要深入了解Jenkins及其应用的开发者和运维人员来说,是一个非常实用的指南。通过该书的学习,读者可以了解Jenkins的基本概念和使用方法,掌握Jenkins实现持续集成和持续交付的方法,以及将Jenkins与其他工具集成的技巧。同时,《Jenkins持续集成从入门到精通》还强调了一些实践经验和最佳实践,能够帮助读者在实际工作中更加高效地使用Jenkins
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值