十二.Jenkins持续集成

十二.Jenkins持续集成

一.安装jenkins

1.下载

Jenkins下载地址:http://jenkins-ci.org/ 或 https://mirrors.jenkins-ci.org/redhat/

2.安装

可以通过官网的安装方式来安装

在这里插入图片描述

安装完后,需要修改以下的配置

vim /usr/lib/systemd/system/jenkins.service

如果对权限不熟的话,把用户改成root,如下所示

在这里插入图片描述

修改Jenkins的端口

在这里插入图片描述

修改用如下命令启动

systemctl start jenkins
二.上传到运行服务器
2.1jenkins的构建流程

在这里插入图片描述

2.2安装jenkins的常用插件
2.2.1汉化

在这里插入图片描述

2.2.2GIT和SSH

在这里插入图片描述

在这里插入图片描述

2.3通过freestyle构建项目

点击Jenkins上面的新建任务,输入名称,然后选中Freestyle project,如下图所示

在这里插入图片描述

在凭证管理页面中,点击“全局”或“系统”选项卡,根据需要选择要添加凭证的范围。

接着,点击“添加凭证”按钮,选择要添加的凭证类型,例如SSH用户名和密码、Git令牌等。

在这里插入图片描述

注意:ssh配置中Remote Directory是目标服务器后进入的目录,我设置为了/jenkis_data
注意:在Jenkins中添加凭证时,请注意保护您的凭证信息,不要将其暴露在公共场合。同时,及时删除不再使用的凭证,以免造成潜在的安全隐患。

配置Freestyle项目

在Freestyle项目的配置界面中,有多个选项可以配置。以下是一些常用的配置选项

在这里插入图片描述

源代码管理:选择版本控制系统(例如Git、Subversion、Mercurial等),并填写仓库地址和认证信息。
构建触发器:定义何时触发构建操作,例如定期触发、代码提交触发、另一个项目构建完成触发等。
构建环境:定义构建环境,例如构建所需的JDK版本、构建参数、构建工具等。
构建步骤:定义构建操作的步骤,例如构建命令、测试命令、静态分析命令等。
构建后操作:定义构建完成后的操作,例如发送邮件、上传构建产物、部署应用程序等。
根据项目的需求,选择需要配置的选项,填写相应的信息即可。

保存配置

执行构建

在这里插入图片描述

可以能过控制台查看构建后的结果

Started by user job1
Running as SYSTEM
Building in workspace /var/lib/jenkins/workspace/gin_test
Selected Git installation does not exist. Using Default
The recommended git tool is: NONE
using credential gitee-user-pass> git rev-parse --resolve-git-dir /var/lib/jenkins/workspace/gin_test/.git # timeout=10
Fetching changes from the remote Git repository> git config remote.origin.url https://gitee.com/lisus2000/gin_test.git # timeout=10
Fetching upstream changes from https://gitee.com/lisus2000/gin_test.git> git --version # timeout=10> git --version # 'git version 1.8.3.1'
using GIT_ASKPASS to set credentials gitee的用户名和密码> git fetch --tags --progress https://gitee.com/lisus2000/gin_test.git +refs/heads/*:refs/remotes/origin/* # timeout=10> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision 4cb9fc717b649a1917aca1f20803a9e4eecd848d (refs/remotes/origin/master)> git config core.sparsecheckout # timeout=10> git checkout -f 4cb9fc717b649a1917aca1f20803a9e4eecd848d # timeout=10
Commit message: "add target/readme.txt."> git rev-list --no-walk 4cb9fc717b649a1917aca1f20803a9e4eecd848d # timeout=10
[gin_test] $ /bin/sh -xe /tmp/jenkins5019030023922432660.sh
+ echo 开始构建
开始构建
+ echo 结束构建
结束构建
SSH: Connecting from host [localhost.localdomain]
SSH: Connecting with configuration [192.168.66.129] ...
SSH: EXEC: completed after 201 ms
SSH: Disconnecting configuration [192.168.66.129] ...
SSH: Transferred 2 file(s)
Triggering a new build of pipeline_test #10
Finished: SUCCESS
2.4将构建服务器上的代码上传到服务器

点击构建后操作,选择 Send build artifacts over SSH

在这里插入图片描述

在这里插入图片描述

在这之前要先添加好SSH的配置,在这个路径下,找到SSH Servers后,点周新增,添加远程主机名称和密码

在这里插入图片描述

然后重新点击构建,就会把内从上传到远服务器上了,这里经192.168.66.130,192.168.66.129(远程),构建完后的结果如下

192.168.66.130的jenkis工作目录如下

在这里插入图片描述

192.168.66.129的目录如下

在这里插入图片描述

就可以看到相应的结果了。

三.通过pipeline实现持续集成

Jenkins Pipeline是一种脚本化的工作流程,它可以通过代码来定义构建过程,包括构建、测试、部署等步骤。通过使用Pipeline,您可以将整个构建过程自动化,并将其保存在源代码控制库中,以便进行版本控制和追踪更改历史。

这比界面化操作带来的好处很多,比如jenkins挂掉了 我要进行修改和新增操作 这是使用pipeline会完成。如果在构建配置的时候jenkins挂掉了 界面化的操作配置会直接没了,pipeline就可以使用代码进行保存

把所有功能代码化后期存储和维护更加方便

3.1安装pipeline插件

在这里插入图片描述

3.2新建一个流水线

在这里插入图片描述

3.3Jenkins Pipeline参数
管理文档:https://www.jenkins.io/zh/doc/pipeline/tour/hello-world/

流水线的代码如下

pipeline {agent anystages {stage('pull code') {steps {git credentialsId: 'gitee-user-pass', url: 'https://gitee.com/lisus2000/gin_test.git'}}stage('build goproject') {steps {sh '''echo "开始构建"echo "结束构建"'''}}stage('deploy goproject') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.66.129', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo "success"', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'gin_test/', remoteDirectorySDF: false, removePrefix: '', sourceFiles: 'target/**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}
}

每一个state都是一个操作

如果不懂流水线语法的话,可以点击查

在这里插入图片描述

这里面有各种各样的语法,可参考

在这里插入图片描述

流水线写完好,点击保存,然后点击构建,构建后的结果如下

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四.通过jenkinsfile管理构建pipeline脚本

使用Jenkinsfile来管理构建Pipeline脚本有许多好处,其中一些包括:

管理代码版本:Jenkinsfile可以存储在代码版本控制系统中,因此您可以将Pipeline脚本与应用程序代码一起管理,从而使得管理代码变得更加容易。

可重复性:使用Jenkinsfile可以确保每次构建都具有相同的设置和步骤,从而提高构建的可重复性。这是因为Jenkinsfile是一个文本文件,可以轻松地跟踪和管理。

可维护性:将Pipeline脚本与应用程序代码一起管理可以使其更易于维护。这是因为您可以使用与应用程序相同的工具和流程来管理Jenkinsfile。

更好的可视化:使用Jenkinsfile可以提供更好的可视化功能,因为您可以将整个Pipeline脚本作为代码存储,从而使得整个流程更加透明和易于理解。

可编程性:Jenkinsfile是基于Groovy编写的,这意味着您可以使用编程语言的所有功能来编写Pipeline脚本。这为您提供了更多的灵活性和自定义选项。

持续交付:Jenkinsfile使得自动化持续交付变得更加容易,因为您可以使用Jenkinsfile来定义整个CI/CD Pipeline,从代码检查到测试和部署。

总之,使用Jenkinsfile管理构建Pipeline脚本可以使您的构建过程更加可重复、可维护和可视化,并提供更多的灵活性和自定义选项,以实现自动化持续交付。

仓库新建Jenkinsfile文件

把Groovy语法复制到这里

在这里插入图片描述

修改流水线配置

流水线定义选择Pipeline script form SCM
在这里插入图片描述
在这里插入图片描述

定时构建和轮询SCM构建
定时构建和轮询SCM构建是Jenkins中两种不同的构建触发方式。

定时构建:Jenkins中的定时构建是指在指定的时间执行构建操作。您可以在Jenkins的构建配置中设置一个时间表,例如每天晚上10点或每个星期五上午8点,以触发构建操作。这种方式通常用于定期构建或者需要按照时间表进行构建的情况。

轮询SCM构建:Jenkins中的轮询SCM构建是指在一定时间间隔内轮询代码版本控制系统中是否有代码变更,并在检测到变更时触发构建操作。您可以在Jenkins的构建配置中设置轮询间隔和代码版本控制系统的位置,例如每分钟检查一次Git代码库中是否有代码变更。这种方式通常用于需要及时构建并测试新代码的情况。

在选择构建触发方式时,您需要根据自己的需求和构建场景来选择适合的方式。如果您需要按照特定时间表执行构建操作,则应使用定时构建。如果您需要及时检查并构建最新代码,则应使用轮询SCM构建。

五.通过jenkins部署go和vue
5.1构建Vue

构建之前要先安装好node,npm

流水线的定义如下

在这里插入图片描述
在这里插入图片描述在这里插入图片描述

Jenkinsfile的内容如下:

pipeline {agent anystages {stage('pull code') {steps {git credentialsId: 'gitee-user-pass', url: 'https://gitee.com/lisus2000/mxshop_vue.git'}}stage('build project') {steps {sh '''echo "运行 cnpm install"npm installecho "运行 cnpm run build"npm run buildecho "构建成功"'''}}stage('deploy code') {steps {sshPublisher(publishers: [sshPublisherDesc(configName: '192.168.66.129-root', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: 'echo "success"', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'docker/nginx/data/html', remoteDirectorySDF: false, removePrefix: 'dist', sourceFiles: 'dist/**')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])}}}
}
5.2构建GO

这里采用的自由风格,具体的内容如下

在这里插入图片描述

构建环境,采用shell
在这里插入图片描述

构建后的操作
在这里插入图片描述


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/188835.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

MyBatis #{} 和 ${} 的区别

前言: #{} 和 ${} 的区别是 MyBatis 中一个常见的面试题,#{} 和 ${} 是MyBatis 中获取参数的两种方式,但我们在项目中大多数使用的都是 #{} 来获取参数,那么它们两个有什么区别呢? 区别 一. #{} 采用预编译 SQL&…

Pytorch torch.exp()的使用举例

代码实验展示: Microsoft Windows [版本 10.0.18363.1256] (c) 2019 Microsoft Corporation。保留所有权利。C:\Users\chenxuqi>conda activate ssd4pytorch1_2_0(ssd4pytorch1_2_0) C:\Users\chenxuqi>python Python 3.7.7 (default, May 6 2020, 11:45:54) [MSC v.191…

数据库表数据类型datetime 和 timestamp区别,以及优缺点

datetime和timestamp都是用于表示日期和时间的数据类型,但它们在存储和使用上有一些区别。 数据范围:datetime数据类型的有效范围是从1000年到9999年,精度为秒。timestamp数据类型的有效范围是从1970年到2038年,精度为秒。存储空…

vue-组件通信(二)

​🌈个人主页:前端青山 🔥系列专栏:Vue篇 🔖人终将被年少不可得之物困其一生 依旧青山,本期给大家带来vue篇专栏内容:vue-组件通信(二) 目录 组件通信(二) (1) props / $emit 1. 父组件向子组…

简单漂亮的首页

效果图 说明 这个首页我也是构思了很久&#xff0c;才想出这个界面&#xff0c;大家喜欢的话&#xff0c;可以拿走去使用 技术的话&#xff0c;采用的就是vue的语法&#xff0c;但是不影响&#xff0c;很多样式我都是直接手敲出来的 代码实现 标语 <!-- 标语 start-->&…

图像分类系列(四) InceptionV2-V3学习详细记录

前言 上一篇我们介绍了Inception的原始版本和V1版本&#xff1a;经典神经网络论文超详细解读&#xff08;三&#xff09;——GoogLeNet学习笔记&#xff08;翻译&#xff0b;精读代码复现&#xff09; 这个结构在当时获得了第一名&#xff0c;备受关注。但InceptionV1是比较复…

​软考-高级-系统架构设计师教程(清华第2版)【第11章 未来信息综合技术(P384~P419)-思维导图】​

软考-高级-系统架构设计师教程&#xff08;清华第2版&#xff09;【第11章 未来信息综合技术&#xff08;P384~P419&#xff09;-思维导图】 课本里章节里所有蓝色字体的思维导图

鸿蒙开发|鸿蒙系统项目开发前的准备工作

文章目录 鸿蒙项目开发的基本流程介绍鸿蒙项目开发和其他项目有什么不同成为华为开发者-注册和实名认证1.登录官方网站 鸿蒙项目开发的基本流程介绍 直接上图&#xff0c;简单易懂&#xff01; 整个项目的开发通过4个模块进行&#xff1a;开发准备、开发应用、运行调试测试和发…

【计算思维】少儿编程蓝桥杯青少组计算思维题考试真题及解析D

STEMA考试-计算思维-U8级(样题) 21.下面哪个图形与其它图形不同&#xff1f;&#xff08; &#xff09; A. B. C. D. 22.下列哪个选项是由下图旋转得到的&#xff1f;&#xff08; &#xff09; A. B. C. D. 23.下面哪个图形是用4个 拼成的&#xff1f;&#xff08; &#xf…

剑指offer --- 用两个栈实现队列的先进先出特性

目录 前言 一、读懂题目 二、思路分析 三、代码呈现 总结 前言 当我们需要实现队列的先进先出特性时&#xff0c;可以使用栈来模拟队列的行为。本文将介绍如何使用两个栈来实现队列&#xff0c;并给出具体的思路和代码实现。 一、读懂题目 题目&#xff1a;用两个栈实现一…

Codeforces Round 909 (Div. 3)(A~G)(启发式合并)

1899A - Game with Integers 题意&#xff1a;给定一个数 , 两个人玩游戏&#xff0c;每人能够执行 操作&#xff0c;若操作完是3的倍数则获胜&#xff0c;问先手的人能否获胜&#xff08;若无限循环则先手的人输&#xff09;。 思路&#xff1a;假如一个数模3余1或者2&#…

基于SSM的项目管理系统设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…