Jenkins+docker 微服务实现自动化部署安装和部署过程

Jenkins 是一款流行的开源自动化服务器,广泛用于持续集成(CI)和持续交付(CD)流程的自动化。通过 Docker 部署 Jenkins 可以简化安装和配置过程,同时保证在不同环境下的一致性。本篇文章将介绍如何使用 Docker 部署 Jenkins。

1. 环境准备

在开始之前,请确保你的机器上已经安装了 Docker。如果尚未安装,可以参考 Docker 官方文档进行安装:Docker安装指南

2. 拉取 Jenkins 官方 Docker 镜像

Jenkins 官方提供了适用于 Docker 的镜像,我们可以直接从 Docker Hub 拉取该镜像。打开终端并执行以下命令:

这里的 jenkins/jenkins:lts 是 Jenkins 的长期支持(LTS)版本,通常是最稳定的版本。

3. 创建并启动 Jenkins 容器

摘取镜像

docker pull jenkinsci/blueocean

建议使用的Docker映像是jenkinsci/blueoceanimage(来自 the Docker Hub repository)。 该镜像包含当前的长期支持 (LTS) 的Jenkins版本 (可以投入使用) ,捆绑了所有Blue Ocean插件和功能。这意味着你不需要单独安装Blue Ocean插件。

或者

docker pull jenkins/jenkins:latest

查看镜像

docker images

安装jenkins

创建工作目录

cd  /var/lib
mkdir -p /var/lib/jenkins

配置权限

查看jenkins当前权限

ls -nd jenkins/

配置jenkins权限

chmod 777 jenkins/

创建Jenkins容器

cd 到根目录

cd ~

安装并启动 jenkins 容器

docker run -itd -p 8081:8080 -p 10241:50000 --name jenkins --privileged=true  -v /var/lib/jenkins:/var/jenkins_home --restart=always jenkinsci/blueocean:latest

-it:开启输入功能并连接伪终端

-d:后台运行容器

–name:为容器指定一个名称

-p:端口映射,格式为主机(宿主)端口:容器端口,可在application.yaml配置。

-p 8081:8080 将镜像的8080 端口映射到服务器的8081端口。

-p 10241:50000 将镜像的50000端口映射到服务器的10241端口

-v:工作目录映射。形式为:-v 宿主机路径,后者不能修改。

–restart:建议设置为always,在 Docker 启动的时候自动启动 Halo 容器。

端口映射

# 查看防火墙状态
systemctl status firewalld# 启动防火墙
systemctl start firewalld# 开启8081端口
firewall-cmd --zone=public --add-port=8081/tcp --permanent # 开启10241端口
firewall-cmd --zone=public --add-port=10241/tcp --permanent # 重启防火墙才能生效
systemctl restart firewalld# 或者重新启动防火墙
firewall-cmd --reload# 查看已经开放的端口
firewall-cmd --list-ports# 关闭防火墙命令:
systemctl stop firewalld
# 查看防火墙状态
sudo ufw status# 安装防火墙
sudo sudo apt-get install ufw# 启动防火墙
sudo ufw enable# 开启8081端口
sudo ufw allow 8081# 开启10241端口
sudo ufw allow 10241# 开启完成,需要重启防火墙生效
sudo ufw reload# 查看端口信息
sudo ufw status# 关闭防火墙命令:
sudo ufw disable

查看jenkins是否启动

jenkins 进程

ps -ef | grep jenkins

查看启动日志

docker logs jenkins

配置镜像加速

cd /var/lib/jenkins/

修改hudson.model.UpdateCenter.xml里的内容

vim  hudson.model.UpdateCenter.xml

修改前

<?xml version='1.1' encoding='UTF-8'?>
<sites><site><id>default</id><url>https://updates.jenkins.io/update-center.json</url></site>
</sites>

将 url 修改为 清华大学官方镜像:https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

修改后

<?xml version='1.1' encoding='UTF-8'?>
<sites><site><id>default</id><url>https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json</url></site>
</sites>

查看登录密码

cat /var/lib/jenkins/secrets/initialAdminPassword

请从本地复制查看到的密码出来,在浏览器打开登录页面时,粘贴到密码输入框

浏览器访问jenkins

jenkins宿主机的ip+端口号(8081)

实例配置

http://192.168.234.133:8081/

修改时区

方式一

输入下面命令,出现Result则运行正常

System.setProperty('org.apache.commons.jelly.tags.fmt.timeZone', 'Asia/Shanghai')

方式二

docker exec -it 81 /bin/bash

执行下面命令

tzselect4
9
1
1cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime##查看时间
date -R

管理Jenkins->系统配置-->插件管理-->

分别搜索Git Parameter/Git/Pipeline/docker/Config File Provider/Gitlab Hook /Gitlab/Push Over SSH,选中点击安装。

  • Git:拉取代码
  • Git Parameter:Git参数化构建
  • Pipeline:流水线
  • GitLab:
  • Config File Provider:存储配置文件
  • Extended Choice Parameter:扩展选择框参数,支持多选
  • CloudBees Docker Build and Publish plugin: docker插件

待所有插件安装完成后重启Jenkins(在你访问Jenkins页面地址上加/restart)

添加凭据

管理你的服务器登录名密码,gti的登录名密码等信息

Jenkins配置

API Token

插件管理

管理Jenkins->系统配置-->插件管理-->

分别搜索Git Parameter/Git/Pipeline/docker/Config File Provider/Gitlab Hook /Gitlab/Push Over SSH,选中点击安装。

  • Git:拉取代码
  • Git Parameter:Git参数化构建
  • Pipeline:流水线
  • GitLab:
  • Config File Provider:存储配置文件
  • Extended Choice Parameter:扩展选择框参数,支持多选
  • CloudBees Docker Build and Publish plugin: docker插件

如果无法顺利安装则到Jenkins Plugins下载插件手动上传。

修改时区

docker exec -it 81 /bin/bash

执行下面命令

tzselect4
9
1
1cp /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime##查看时间
date -R

gitlab配置

需要到jenkins配置以下信息

Connection name为gitlab的登录账号

生成 SSH Key

生成key
cd /var/lib/jenkins
ssh-keygen -t rsa

输入文件名为jenkins_rsa,输入密码(为空)

会在目录/root/.ssh生成id_rsa私钥、id_rsa.pub公钥,将公钥的内容写入到同目录下的authorized_keys文件(jenkins连接多台服务器,将公钥写入到相应服务器的authorized_keys文件即可)

公钥文件

将公钥写入authorized_keys文件

cd /root/.ssh/
cat /var/lib/jenkins/jenkins_rsa.pub >> authorized_keys
chmod 600 authorized_keys

验证SSH Key

ssh -p 8081 root@192.168.234.133

配置私钥凭证

在jenkins的linux虚拟机上执行如下命令查看私钥

cd /var/lib/jenkins
mv jenkins_rsa /root/.ssh/
cat /root/.ssh/jenkins_rsa

登录jenkins配置凭据,系统管理-->

类型选择:SSH Username with private key
Username: 一般是linux虚拟机上配置的用户

将私钥 复制到key处,然后点击确定即可。

在jenkins系统配置中,配置SSH remote hosts,如果提示不能连接,请检查服务器sshd文件配置

配置SSH remote hosts

系统管理-->系统管理--下拉菜单选择"SSH remote hosts",

按以下截图配置,Credentials选择刚刚配置的jenkins ssh

如果提示不能连接,请检查服务器sshd文件配置。

配置Publish over SSH

在把SSH配置好后,点击系统管理-->系统管理--下拉菜单选择Publish over SSH;

在【SSH Servers】模块把服务器地址、账号密码填进去保存,因为后续会使用到。

点击新增Service按钮,输入Jenkins所在服务器的IP,及账号,远程目录

接着点击Test configuration测试下连接是否成功,如下:

如果测试配置不是Success,则按以下操作继续

在Passphrase / Password维护输入Jenkins所在服务器的UserName(root)用户名对应的密码,如下:

新建任务

到首页面板点击【新建任务】-选择【构建一个自由风格的软件项目】(FreeStyle Project)。

自由风格的项目更多是使用shell脚本结合相应平台的指令实现自动化,因此建议大家对shell脚本有个初步的认识与学习,虽然Jenkins也提供了对应平台语言的一些插件,但是只要您熟悉了shell就会发现它的灵活性与便捷性。

接下来我们只要关注3个模块,源码管理、构建触发器、构建

源码构建

源码构建,填写您要自动发布的项目的源码地址,并输入账号密码。

无法连接仓库:Command "git ls-remote -h -- http://192.168.234.133:48080/net/WebApp1.git HEAD" returned status code 128:
stdout:
stderr: remote: HTTP Basic: Access denied
fatal: Authentication failed for 'http://192.168.234.133:48080/net/WebApp1.git/'

构建触发器

构建触发器,这里勾选Build when a chenge ……,把URL 复制记录下来,等下在Gitlab需要使用到。这里就是与Gitlab webhook做了联动,可以理解成Jenkins开放了一个接口,让Gitlab被push代码后会主动告诉Jenkins做一次自动化构建。

构建

这里其实就是执行shell脚本完成发布。这里得注意下我是用ssh,因为我的Jenkins是使用了docker安装的,如果我使用了【构建】模块里的【执行shell】就会在Jenkins环境里进行编译、打包,同时也需要安装相应的环境 例如dotnet sdk等。值得注意的是,我的环境与Jenkins挂载的都是在了Server这个宿主环境,因此通过Jenkins的SSH Publishers连到Jenkins的宿主服务器(Server),执行相应的shell脚本从Jenkins挂载的目录进行构建镜像。当然有同学想在Jenkins环境先打包然后通过SSH的Transfers模块进行文件传也是可以的。

构建步骤选择“Send files or execute commands over SSH

mkdir -p /root/jenkins/jenkins_home/workspace/WebApp1

创建build.sh

#!/bin/bash
echo '脚本开始执行'/root/jenkins/jenkins_home/workspace/WebApp1/project_name=webapp1
project_path=$base_path/WebApp1
publish_path=$project_path/bin/Release/netcoreapp6.0/publishcd $project_path
rm -rf $project_path/bindotnet publish -c Release && (cd $publish_path &&docker stop $project_namedocker rm $project_namedocker image rm $project_namedocker build -t $project_name . &&docker run -d -p 5000:80 -e ASPNETCORE_ENVIRONMENT="Development" --name $project_name $project_name &&echo '发布成功:'$project_path'' ||echo '发布失败:'$project_path''
) || echo '发布失败:'$project_path''echo '脚本执行结束'

将build.sh保存到/root/jenkins/jenkins_home/workspace/WebApp1目录下。

构建脚本

全局工具配置

需要安装JDK,maven,git,docker。打开系统管理-全局工具配置下

JDK

Git

Docker

待所有的配置都完成后重启Jenkins。

总结

通过 Docker 部署 Jenkins,可以大大简化安装和配置过程,确保环境的一致性,并能快速启动和管理 Jenkins 实例。Docker 提供了良好的隔离性和扩展性,使得 Jenkins 更加灵活和高效。通过持久化数据和备份恢复,你可以轻松管理 Jenkins 环境。

希望这篇文章能帮助你更好地理解如何在 Docker 中部署 Jenkins!

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

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

相关文章

【芯片后端设计的灵魂:Placement的作用与重要性】

在芯片设计的浩瀚宇宙中&#xff0c;后端物理设计扮演着决定成败的关键角色。其中&#xff0c;​Placement&#xff08;布局&#xff09;​​ 作为整个流程的核心环节&#xff0c;被誉为芯片性能、功耗和面积的“奠基者”。今天&#xff0c;我们就来深入探讨Placement的作用、重…

将FGUI的Shader全部预热后,WebGL平台没有加载成功

1&#xff09;将FGUI的Shader全部预热后&#xff0c;WebGL平台没有加载成功 2&#xff09;iOS如何确认内存扩展使用生效 3&#xff09;SpriteAtlasManager.atlasRequested延后一帧回调 4&#xff09;Unity如何使用Java 17打包 这是第442篇UWA技术知识分享的推送&#xff0c;精选…

Python二进制、八进制与十六进制高级操作指南:从底层处理到工程实践

引言&#xff1a;为何需要掌握进制操作&#xff1f;在现代计算领域&#xff0c;直接操作不同进制的数值是一项核心技术能力。根据2024年Stack Overflow开发者调查报告&#xff1a;73%的低级系统开发涉及位级操作65%的网络协议要求理解十六进制数据80%的硬件接口配置使用二进制控…

离线可用的网络急救方案

在使用电脑的过程中&#xff0c;经常会遇到断网的状况&#xff0c;这种情况让人十分头疼&#xff0c;很多时候我们都不知道去哪里找相关的教程来解决这样的问题。它能一键操作解决电脑的网络故障问题&#xff0c;最关键的是它是完全免费的。它只需解压就可以直接双击使用。把工…

华为云Stack环境中计算资源,存储资源,网络资源发放前的准备工作(中篇)

实验流程说明再上期文章链接如下&#xff1a; 华为云Stack环境中计算资源&#xff0c;存储资源&#xff0c;网络资源发放前的准备工作&#xff08;上篇&#xff09; 华为云Stack环境中计算资源&#xff0c;存储资源&#xff0c;网络资源发放前的准备工作&#xff08;中篇篇&am…

设置密钥连接服务器

要将本地电脑的 SSH 公钥添加到服务器登录&#xff0c;可按以下步骤操作&#xff0c;确保服务器仅允许密钥认证&#xff1a; 一、将本地公钥添加到服务器 &#xff08;前提&#xff1a;你已通过密码或现有方式能登录服务器&#xff0c;且本地已生成 SSH 密钥对&#xff09; 1. …

k8s笔记04-常用部署命令

Kubernetes&#xff08;K8s&#xff09;部署与版本管理命令笔记 一、部署核心命令分类与应用场景 K8s中用于应用部署、版本控制与实例扩缩容的核心命令主要包括三类&#xff0c;分别对应“版本回滚”“手动扩缩容”“自动扩缩容”场景&#xff0c;是CKA考试中部署类题目的核心考…

[系统架构设计师]知识产权(二十)

[系统架构设计师]知识产权&#xff08;二十&#xff09; 一.知识产权的特性 1.特性 无体性&#xff1a;抽象财富 专有性&#xff1a;权利人同意或法律规定外&#xff0c;权利人以外的任何人不得享有或使用该项权力 地域性&#xff1a;只能在该国范围内手法律保护 时间性&#x…

rk3566编译squashfs报错解决

项目场景&#xff1a; 提示&#xff1a;这里简述项目相关背景&#xff1a; 编译开源的rk3566代码squashfs报错&#xff0c;tspi_linux_sdk_repo_20240131.tar.gz 下之前先读我 1.tspi_linux_sdk_20230916.tar.gz这个是之前老的没有git和repo的版本&#xff0c;后面会删除掉大家…

HTTP 协议与TCP 的其他机制

TCP 的其他机制TCP头部的标志位SYN&#xff1a;请求建立连接标志位ACK&#xff1a;响应报文标志位PSH&#xff1a;携带数据标志位&#xff0c;通知接收方该从缓冲区读数据FIN&#xff1a;请求断开连接标志位RST&#xff1a;复位标志位URG&#xff1a;紧急数据标志位安全可靠机制…

点评《JMeter核心技术、性能测试与性能分析》一书

《JMeter核心技术、性能测试与性能分析》深度评价‌该书作为清华大学出版社2025年推出的性能测试领域新作&#xff0c;展现了鲜明的技术深度与实践导向性&#xff0c;具体评价如下&#xff1a;‌1. 内容体系&#xff1a;系统性与前沿性兼备‌‌知识架构完整‌&#xff1a;覆盖J…

深入解析:为什么应该避免使用 atoi、atol 和 atof 函数

问题本质深度分析 简化源码展示&#xff1a;看清本质 atoi 的典型实现&#xff1a; // atoi 的简化实现 - 看清问题所在 int atoi(const char *str) {int sign 1;int result 0;// 跳过空白字符while (isspace(*str)) {str;}// 处理符号if (*str -) {sign -1;str;} else if …

计算机网络:HTTP、抓包、TCP和UDP报文及重要概念

一、http超文本传输协议&#xff08;应用层&#xff09;&#xff08;一&#xff09;万维网1.工作过程&#xff08;二&#xff09;统一资源定位符&#xff08;URL&#xff09;http的默认端口号是80&#xff08;三&#xff09;HTTP报文结构请求报文&#xff1a;客户端-->服务器…

three.js+WebGL踩坑经验合集(8.3):合理设置camera.near和camera.far缓解实际场景中的z-fighting叠面问题

本篇延续上篇内容&#xff1a; three.jsWebGL踩坑经验合集(8.2):z-fighting叠面问题和camera.near的坑爹关系-CSDN博客 笔者也是狠佩服自己&#xff1a;一个还没划上句号的文章都能拖了半年才继续写。这次也是运气好&#xff0c;工作上再次遇到叠面问题&#xff0c;可以借这机…

记一次生产环境Hbase填坑之路、Hbase客户端登陆、kerberos认证、端口列表、Pod上手撕代码【Hbase最佳实践】

背景 1、软件系统&#xff08;转储系统&#xff09;需要向生产环境迁移&#xff1a;迁到国产操作系统、国产资源池&#xff08;Hbase存储不变&#xff09; 2、老环境上的转储系统本身存在写入hbase的性能问题、及部分省份写入hbase失败的问题&#xff08;20%失败&#xff09;…

C++知识杂项搜集

C使用如下库优化事件的注册和发布&#xff0c;ZeroMQzmqpp 通信机制&#xff0c;请求-应带方式&#xff0c;push-pull方式&#xff0c;publisher-subcriber发布-订阅模式eventpp 事件注册和回调sockpp tcp/udp封装threadpool 线程池Jinja 一个 python 的模板实现配置是实现…

连锁零售排班难?自动排班系统来解决

零售、连锁企业门店多、员工杂、班次密&#xff0c;排班时总有绕不开的问题&#xff1a;跨门店调人成本怎么算&#xff1f;节假日高峰期人手怎么补&#xff1f;全职兼职混合排班怎么平衡&#xff1f;其实&#xff0c;这些场景化难题&#xff0c;盖雅自动排班系统早就有了针对性…

Android用Coil 3检查媒体资源是否有效,Kotlin

Android用Coil 3检查媒体资源是否有效&#xff0c;Kotlin WorkerThreadfun checkImage(ctx: Context, uri: Uri): Boolean {val t System.currentTimeMillis()val request ImageRequest.Builder(ctx).data(uri).memoryCacheKey(uri.toString()).precision(Precision.INEXACT)…

Seaborn数据可视化实战:Seaborn数据可视化入门-绘制统计图表与数据分析

使用Seaborn绘制统计图表&#xff1a;从入门到精通 学习目标 通过本课程的学习&#xff0c;你将掌握如何使用Seaborn库绘制各种统计图表&#xff0c;包括直方图、密度图和箱形图。你将了解这些图表在数据分析中的应用&#xff0c;以及如何通过图表来更好地理解数据。 相关知识点…

​Mac用户安装JDK 22完整流程(Intel版dmg文件安装指南附安装包下载)​

一、准备工作 ​确认你的 Mac 是 Intel 芯片的​ 如果你的 Mac 是 2020 年及之前出的&#xff0c;大概率是 Intel 芯片&#xff0c;可以用这个 ​jdk-22_macos-x64_bin.dmg。如果是 2020 年之后出的 M1 或 M2 芯片的 Mac&#xff08;就是 Apple 芯片&#xff09;&#xff0c;那…