持续集成03--Jenkins的安装与配置

前言

        在持续集成/持续部署(CI/CD)的实践中,Jenkins作为一个开源的自动化服务器,扮演着至关重要的角色。本篇“持续集成03--Jenkins的安装配置”将带您走进Jenkins的世界,深入了解如何在Linux环境中安装并配置Jenkins。从安装前的准备工作到Jenkins的基本配置,我们将一步步搭建起一个强大的CI/CD平台。

1、下载Jenkins

        下载地址:https://www.jenkins.io/download/

        此处采用的使jenkins.war的方式进行安装(使用最新版,建议使用发布版,要不然最新版插件版本可能会不匹配)

2、安装Jenkins

2.1、创建安装目录

mkdir /usr/local/jenkins

 2.2、启动Jenkins

        将下载的安装包上传至jenkins目录下

# 两种启动方式
# 直接启动(关闭输出信息后将会关掉进程)
java -jar jenkins.war# 后台启动
# jenkins会在构建结束杀掉衍生子进程,导致相关服务启动失败,禁用杀死衍生进程的特性
nohup java -jar jenkins_2.452.2.war -Dhudson.util.ProcessTree.disable=true > ./nohup.out 2>&1 &

3、解锁Jenkins 

         访问地址默认端口是8080:http://ip:8080/

         管理员密码根据提示可查看:/root/.jenkins/secrets/initialAdminPassword,在我们安装时也有提示。

4、新手入门

4.1、自定义Jenkins

        根据建议安装插件(安装失败的可先不理会,在系统内部也可以进行单独安装)直接点击继续;如果全部安装失败,则考虑是不是网络问题或者安装的不是最新版本的jenkins,导致安装的最新的插件与jenkins当前版本不匹配。注意:插件过多可能会影响性能

4.2、创建管理员用户

        依据提示操作进行,第一个账号即为管理员账号;也可不创建用户,使用admin账户继续(但是使用的是初始密码,需要在配置文件内修改管理员密码,修改方式在本文5.2中)

4.3、实例配置 

        无需修改,直接保存并完成,保存之后则配置完成,开始使用jenkins

4.4、修改镜像源地址

        修改路径:Manage Jenkins--Plugins--Adanced setting,找到升级站点,默认地址:https://updates.jenkins.io/update-center.json,修改为国内镜像源地址:https://mirror.esuni.jp/jenkins/updates/update-center.json,替换后保存

5、初始化配置

5.1、系统中文设置 

        我在这一步放弃了,试了N种方法还是没解决:

  • 安装插件Localization: Chinese (Simplified)只翻译了部分内容;
  • 根据网上资料使用Locale插件,安装后无效,卸载重新安装、重启jenkins,依然没有在系统配置system内显示Locale,不知道什么原因(大家如果也是只翻译了部分内容,可以尝试一下这个方法是不是能用):在jenkins可用插件内搜索Locale进行安装,然后重启Jenkins;进入Manage Jenkins--system,找到Locale--Default Language,输入zh_cn,然后重启jenkins:http://192.168.235.133:8080/restart;如果发现没有生效可以设置成en_us重启,再设置成zh_cn重启。

5.2、修改admin密码 

        修改系统迷人admin密码,需要通过配置文件进行修改,文件路径:/root/.jenkins/users/admin_580980282579296987/config.xml,找到passwordHash所在行即为admin密码;此密码加密方式为javacrypt,可以使用线上加密工具(可自行百度“jbcrypt在线加密”)进行自定义密码的加密,然后将#jbcrypt:后面的密码替换为自己明文加密后的密码,保存文件,重启jenkins,重新登录即可

总结

        通过“持续集成03--Jenkins的安装配置”的学习,基本掌握了Jenkins的安装与基础配置方法。Jenkins作为CI/CD流程中的核心工具,其强大的自动化能力和灵活的插件系统,将为您的软件开发与部署带来前所未有的便利。现在,我们已经拥有了构建自动化测试、代码质量检查、自动化部署等流程的关键平台,为提升软件交付速度和质量奠定了坚实的基础。随着对Jenkins的进一步探索与应用,能够充分利用其潜力,实现更高效、更可靠的软件开发与运维流程。

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

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

相关文章

VUE:跨域配置代理服务器

//在vite.config。js中,同插件配置同级进行配置server:{proxy:{"/myrequest":{//代理域名,可自行修改target:"https://m.wzj.com/",//访问服务器的目标域名changeOrigin:true,//允许跨域configure:(proxy,options) > {proxy.on(&…

人工智能与人类社会的共生共荣

随着科技的飞速发展,人工智能(AI)已经不再是遥不可及的概念,而是深深地融入到了我们的日常生活中。从智能家居到智慧城市,从自动驾驶到医疗诊断,人工智能正以前所未有的方式改变着人类社会的每一个角落。然…

掌握Laravel控制器:构建强大应用的基石

掌握Laravel控制器:构建强大应用的基石 在Laravel框架中,控制器(Controller)是处理用户请求和返回响应的核心组件。控制器充当了应用逻辑的中转站,它接收来自路由的请求,处理这些请求,并返回视…

C4D各版本软件下载+自学C4D 从入门到精通【学习视频教程全集】+【素材笔记】

下载链接: 迅雷网盘https://pan.xunlei.com/s/VO1tydOxEo-Az_QCM-Jz2R4RA1?pwdvxg4# 夸克网盘https://pan.quark.cn/s/fe7450b02d80 百度网盘https://pan.baidu.com/s/1Omj4WL93F1DNdA2iP4SiMQ?pwdwmb8

[C++] 深度剖析C_C++内存管理机制

文章目录 内存分布内存分布图解 C语言中动态内存管理方式malloc:callocrealloc C内存管理方式内置类型**自定义类型** operator new & operator deleteoperator new & operator delete函数operator newoperator delete **new T[N]** 与**delete[]** **定位new表达式(pl…

vue 实现下拉框的数据是树状结构

页面显示效果 vue实现代码 <el-form-item label"公司名称" prop"comName"><el-select ref"select" v-model"queryParams.comName" placeholder"请选择公司名称" clearable size"small"change"handl…

可学习激活函数 Maxout

可学习激活函数 Maxout 是一种神经网络中的激活函数&#xff0c;它在特征提取的过程中能够学习到最优的激活方式&#xff0c;从而提高模型的表达能力和性能。Maxout 由 Ian Goodfellow 等人在2013年提出&#xff0c;是一种能够在训练过程中自适应地选择激活函数的模型。 Maxou…

在 Windows 上开发.NET MAUI 应用_1.安装开发环境

开发跨平台的本机 .NET Multi-platform App UI (.NET MAUI) 应用需要 Visual Studio 2022 17.8 或更高版本&#xff0c;或者具有 .NET MAUI 扩展的最新 Visual Studio Code。要开始在 Windows 上开发本机跨平台 .NET MAUI 应用&#xff0c;请按照安装步骤安装 Visual Studio 20…

分布式 I/O 系统Modbus TCP 耦合器BL200

BL200 耦合器是一个数据采集和控制系统&#xff0c;基于强大的 32 位微处理器设计&#xff0c;采用 Linux 操作系统&#xff0c;可以快速接入现场 PLC、SCADA 以及 ERP 系统&#xff0c; 内置逻辑控制、边缘计算应用&#xff0c;支持标准 Modbus TCP 服务器通讯&#xff0c;以太…

SVN常用命令

VCS VCS&#xff08;Version Control System&#xff09;是版本控制系统的缩写&#xff0c;它是一种用于管理和跟踪软件代码变化的系统 SVN Subversion&#xff08;SVN&#xff09;是一个广泛使用的版本控制系统&#xff0c;用于管理源代码和文档。在命令行中使用SVN涉及一系…

Blender使用(二)点线面基本操作

Blender使用之点线面 1.编辑模式 tab键进行切换&#xff0c;为了方便菜单调出&#xff0c;可以设置键位映射为拖动时的饼菜单。 设置好后&#xff0c;按住tab键移动鼠标(注意不要点击鼠标)&#xff0c;即可弹出编辑菜单。 默认是点模式&#xff0c;在左上角可进行点线面的切换…

电脑型号数据源的性能提升:新一代技术的突破

随着科技的不断发展&#xff0c;电脑型号的数据源性能也得到了显著的提升。新一代技术的突破使得电脑型号的数据源更加准确、全面且易于使用。本文将从代码的角度解释这一突破&#xff0c;并参考挖数据平台的内容&#xff0c;向大家介绍电脑型号数据源的性能提升。 首先&#…

尝试理解docker网络通信逻辑

一、docker是什么 Docker本质是一个进程,宿主机通过namespace隔离机制提供进程需要运行基础环境&#xff0c;并且通过Cgroup限制进程调用资源。Docker的隔离机制包括 network隔离&#xff0c;此次主要探讨网络隔离mount隔离hostname隔离user隔离pid隔离进程通信隔离 二、doc…

spring-boot2.x整合Kafka步骤

1.pom依赖添加 <properties><java.version>1.8</java.version><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</ma…

自学鸿蒙HarmonyOS的ArkTS语言<十二>wrapBuilder:组件工厂类封装

// FactoryComponent.ets Builder function Radio1() {Column() {Text(单选组件&#xff1a;)Row() {Radio({ value: 1, group: radioGroup })Text(选项1)}Row() {Radio({ value: 2, group: radioGroup })Text(选项2)}}.margin(10) }Builder function Checkbox1() {Column() {T…

DP(5) | 完全背包 | Java | 卡码52, LeetCode 518, 377, 70 做题总结

完全背包 感觉越写越糊涂了&#xff0c;初始化怎么做的&#xff1f;递推公式怎么来的&#xff1f; 卡码52. 携带研究材料 https://kamacoder.com/problempage.php?pid1052 import java.util.*;public class Main {public static void main(String[] args) {Scanner sc new …

Java面试八股之Redis集群是怎么选择数据库的

在Redis集群中&#xff0c;数据被水平分割&#xff08;sharding&#xff09;到各个节点上&#xff0c;这意味着所有的键空间被分成16384个哈希槽&#xff08;hash slots&#xff09;&#xff0c;这些槽均匀地分布在集群中的各个节点上。Redis集群并不支持传统的数据库切换&…

xiuno兔兔超级SEO插件(精简版)

xiuno论坛是一个一款轻论坛产品的论坛&#xff0c;但是对于这个论坛基本上都是用插件实现&#xff0c;一个论坛怎么能离开网站seo&#xff0c;本篇分享一个超级seo插件&#xff0c;自动sitemap、主动提交、自动Ping提交。 插件下载:tt_seo.zip

实验11 数据库日志及数据库恢复

一、 实验目的 了解Mysql数据库系统中数据恢复机制和主要方法。 二、 实验环境 操作系统&#xff1a;Microsoft Windows 7旗舰版&#xff08;32&64位&#xff09;/Linux。 硬件&#xff1a;容量足以满足MySQL 5.7&#xff08;8.0&#xff09;安装及后续实验的使用。 软件…

Python | Leetcode Python题解之第232题用栈实现队列

题目&#xff1a; 题解&#xff1a; class MyQueue:def __init__(self):self.A, self.B [], []def push(self, x: int) -> None:self.A.append(x)def pop(self) -> int:peek self.peek()self.B.pop()return peekdef peek(self) -> int:if self.B: return self.B[-1…