玩转jenkins - 在自己的服务器上安装jenkins
做前端也好几年了,项目的CI/CD一直用的都是公司现有的jenkins平台,再不就是基于jenkins进行了特殊定制化的平台,当然还有其他的一些CI/CD工具,比如gitlab,但是在我看来jenkins更纯粹,专注做CI/CD,而且更成熟,社区活跃且非常强大,目前已有超过1000个插件来支持构建、部署、自动化,另外更重要的是官网的标语深深吸引了我。所以打算在自己的服务器上玩玩,同时也会把相关的一些进度和结果分享到这里,希望未来可以在工作上用到。
ps:我的服务器:CentOs8 Linux
计划了几个想要达到的目标
- 在自己的机器上跑起来 done
- 使用jenkins将码云上的git仓库拉到服务器
- 将代码拉到服务器后,可以手动触发构建、部署
- 完成自动化部署
- 开发一个自己的插件,具体做啥还没想好
- 待定...
首先需要安装java环境
Jenkins是用Java编写的免费开放源代码持续集成工具,所以我们首先需要安装java环境。
安装Java运行时环境(JRE)或者Java开发工具包(JDK)都可以,这里我安装的是java11,全程安装很快。
执行下面命令
# dnf install java-11-openjdk-devel
安装完后,验证Java 11是否安装成功。
#java --version
可以看到java已安装成功。
在CentOS 8上添加Jenkins存储库
由于Jenkins在CentOS 8存储库中不可用,因此我们将手动将Jenkins存储库添加到系统中。
首先添加Jenkins Key
#rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
将Jenkins的存储库追加到CentOS 8
#cd /etc/yum.repos.d
#curl -O https://pkg.jenkins.io/redhat-stable/jenkins.repo
截图略,基本没什么阻碍。
安装Jenkins
成功添加Jenkins存储库后,才能安装Jenkin
//执行以下命令
# dnf install jenkins
安装完成后,通过命令启动并验证Jenkins的状态
# systemctl start jenkins
# systemctl status jenkins
上面的输出显示Jenkins已启动并正在运行。
配置防火墙(可选)
阿里云、腾讯云的云主机就不需要配置了,不过需要在安全策略里打开可访问的端口。
配置防火墙以允许访问Jenkins使用的端口8080。要打开防火墙上的端口,请运行如下命令。
# firewall-cmd --add-port=8080/tcp --permanent
# firewall-cmd --reload
在CentOS 8上设置Jenkins
到这一步我们基本上成功啦,不过后面还有一个大坑等着你。
完成初始配置后,就需要在浏览器上设置Jenkins啦。
访问地址如下
http://server-IP:8080
先来看下启动界面
当然这里需要密码才能解锁Jenkins,此密码位于文件/var/lib/jenkins/secrets/initialAdminPassword文件中。
通过cat命令打开即
# cat /var/lib/jenkins/secrets/initialAdminPassword
第二步,插件安装 "使用建议的插件安装"或"选择要安装的插件"
这一步我选择的是推荐安装。
接下来就进入了漫长的安装过程,让人着急。
手动安装插件
到上一步,我这有点惨,很多插件安装失败,而且时间超级长,后来就直接关了,让他自己去安装了。
理论上,理想的话后续应该是这样的
- 让你创建管理员账号,总不能每次输入一大串密钥吧
- 让你重新设置访问地址
- 最后有惊无险的告诉你,你成功了
然而,我并没有那么顺利,到了第二天,我再去看的时候,插件仍然是安装失败,重试了好多次还是失败,不过安装了一些基础插件后,已经能进入到jenkins后台了。
不过也给出了哪些插件安装失败(下图来源与网络,我的系统已配置完成,当时未留错误图,但是问题一致)
具体安装失败的原因已给出,就是缺少插件,需要补齐安装。
先尝试了在jenkins里搜索来安装,系统管理–>管理插件–>可选插件–>输入插件名–>勾选相应插件–>点击直接安装。但是没有搜索到。
后来只能尝试手动安装,将插件下载下来,然后上传到jenkins安装,这才搞定。
在哪里下载插件呢?
官方地址:http://updates.jenkins-ci.org/download/plugins/
下载下来的插件
然后通过上面的上传通道上传后,jenkins会自动给你安装。
终于等到你
插件安装成功后就可以开心的玩耍啦,不过整体配置时间有点长,本来我也不着急,我也急不来,平时工作太忙,插件安装的慢我都是第二天再看。
看下最终的操作大盘
然后给自己创建了个账号,再也不用一大坨密钥了。
其他
一些可能用到的命令
jenkins启动
#service jenkins start
jenkins重启
#service jenkins restart
也可以通过url后门重启
http://xxx:8080?restart
jenkins停止
#service jenkins stop
最后
整体下来没什么特别大的坑,还是比较顺畅,只是时间较长,不过好饭不怕晚,慢一点没关系。
不过官网上也有基于Docker安装的教程,有兴趣的可以试试。
- Nodejs学习笔记(十六)--- Pomelo介绍&入门
- 美团再出幺蛾子,启动美团打车项目,滴滴感到威胁了吗?
- 深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)
- 深入剖析ASP.NET的编译原理之一:动态编译(Dynamical Compilation)
- 域名quco.com近10万元被交易
- Silverlight本地化
- Nodejs学习笔记(五)--- Express安装入门与模版引擎ejs
- Silverlight本地化
- Silverlight 3 创建一个简单的Behavior
- Nodejs学习笔记(六)--- Node.js + Express 构建网站预备知识
- Silverlight 3.0 中的 Local Connection
- 学习Spark——那些让你精疲力尽的坑
- 学习Spark——那些让你精疲力尽的坑
- Silverlight 3.0 中的 WriteableBitmap
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- ES10(2019)有哪些更新和新特性?
- Flutter Icon IconFont(图标控件)
- Flutter TextField(输入控件)
- 常见的面试问题总结
- Flutter Button(按钮控件)
- 终极干货,数组去重且显示每一个数据重复的次数
- VUE引入 script, link
- Flutter Text(文本控件)
- 纯JS实现在一个字符串b中查找另一个字符串a出现的所有位置,并且不使用字符串的方法(递归)
- 【剑指Offer】替换空格
- 面试汇总(一):针对百度面试总结
- Shell awk命令
- 【redis6.0.6】redis源码慢慢学,慢慢看 -- 第五天:adlist
- redis学习(十一)
- 互联网软件常见开发方法