jenkins 的脚本部署

news/2025/1/8 6:57:56/文章来源:https://www.cnblogs.com/yf-html/p/18644743

前沿

Jenkins 是一款开源的自动化服务器,主要用于实现持续集成(Continuous Integration, CI)和持续交付(Continuous Delivery, CD)。它通过插件的方式扩展功能,支持几乎所有主流的开发、构建、测试和部署工具。

 

一、Jenkins 的核心概念

1. 什么是持续集成(CI)和持续交付(CD)?

  • 持续集成(CI):频繁地将代码集成到主分支,并通过自动化测试验证代码的正确性。
  • 持续交付(CD):自动将经过测试的代码部署到生产环境,确保随时可以交付给用户。

Jenkins 是一个非常流行的 CI/CD 工具,它可以帮助团队实现:

  • 代码自动构建
  • 自动化测试
  • 自动部署到生产或测试环境

2. Jenkins 的核心特点

  1. 易用性:通过图形化界面或配置文件,用户可以轻松配置各种任务。
  2. 高度可扩展性:Jenkins 拥有丰富的插件生态,支持源码管理(如 Git)、构建工具(如 Maven、Gradle)、测试工具(如 JUnit)等。
  3. 支持分布式构建:可以使用多个节点分布式执行任务。
  4. 支持多种平台:可以运行在 Windows、Linux、macOS 等主流操作系统上。

 

二、Jenkins 的核心功能

1.任务(Job)管理每个任务(Job)可以是代码的构建、测试或部署过程。
支持流水线任务(Pipeline)和传统的自由风格任务。
2.插件支持Jenkins 的功能可以通过插件扩展。例如: Git 插件:从 Git 仓库拉取代码。 Docker 插件:支持容器化操作。 Slack 插件:通知构建结果到团队沟通工具。
3.分布式构建支持配置多台代理服务器(Agent),加速构建任务。
4.持续监控支持实时监控任务执行状态,查看历史构建记录、日志等。 5.通知与反馈构建结果可以通过邮件、Slack、微信等方式通知开发人员。

 

三、Jenkins 的安装与部署

1. 准备环境

  • 操作系统:推荐使用 Linux 服务器(如 CentOS、Ubuntu)。
  • 运行环境
Jenkins 运行在 Java 环境中,需要安装 JDK(推荐 Java 11 或 Java 17)。
一台最低 2 核 2G 的服务器,推荐 4 核 8G 或以上。
sudo systemctl stop firewalld
sudo systemctl disable firewalldfirewall-cmd --statecat /proc/version  查看系统版本red Hat 是管理工具 yum
debian 是管理工具 apt-getsudo yum install git

 

需要 更新yum

sudo yum update -ysudo yum install -y yum-utils device-mapper-persistent-data lvm2
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
sudo yum install -y docker-ce docker-ce-cli containerd.io
sudo systemctl start docker
sudo systemctl enable docker
docker --version添加阿里云镜像:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
sudo systemctl enable dockersudo systemctl start docker

 

产看运行 新建一个 daemon.json文件,然后去

docker run -d -p 9003:80 --name demo-dev nginx
// 查看运行的容器
docker ps 
// 进入容器内部
docker exec -it demo-dev /bin/bashdocker run -p 8120:8080 jenkins/jenkins

[root@localhost docker]# cd /etc/docker[root@localhost docker]# touch daemon.json[root@localhost docker]# vim daemon.json
# 在daemon.json文件的registry-mirrors列表中,添加/修改国内的镜像源地址
{"registry-mirrors": ["https://docker.m.daocloud.io","https://registry.docker-cn.com","https://quay.mirrors.ustc.edu.cn","https://hub-mirror.c.163.com/","https://dockerhub.icu"]
}
如何查看 jenkins 版本docker pull jenkins/jenkins:lts

在宿主机上创建一个目录,用于挂载 Jenkins 容器的工作目录:

mkdir -p /usr/local/jenkins
chmod 777 /usr/local/jenkins

启动

启动
docker run -d -p 8080:8080 -p 50000:50000 -v /usr/local/jenkins:/var/jenkins_home --name myjenkins jenkins/jenkins:lts

获取密码

// 获取密码
docker exec myjenkins cat /var/jenkins_home/secrets/initialAdminPassword

进入容器

// 进入jenkins 容器
docker exec -it jenkins bash

但是这里最好是 Docker Compose  来安装 ,如果未安装,请根据你的操作系统安装 Docker 和 Docker Compose。

 

docker-compose --versionsudo curl -L "https://github.com\/docker/compose/releases/download/$(curl -s https://api.github.com/repos/docker/compose/releases/latest | grep -oP '"tag_name": "\K(.*)(?=")')/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
docker-compose --version

 

然后

sudo curl -L "https://github.com/docker/compose/releases/download/v2.24.7/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose

但是会不成功,还是这样吧运行python

安装下面的

yum -y install python3-pip
pip3 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3 install docker-compose -i https://pypi.tuna.tsinghua.edu.cn/simple
docker-compose --helpOPtion  default:docker-compose.yml

 

然后新建 默认 有个 docker-compose.yml 的文件 需要写入下面的

 

services:jenkins:image: jenkins/jenkins:2.488
    container_name: jenkinsrestart: alwaysprivileged: trueuser: rootvolumes:- "/usr/local/bin/kubectl:/usr/local/bin/kubectl"- "/usr/bin/docker:/usr/bin/docker"- "/run/docker.sock:/var/run/docker.sock"- "/usr/local/jenkins:/var/jenkins_home"- "/etc/localtime:/etc/localtime:ro"- "/usr/lib64/libltdl.so.7:/usr/lib/x86_64-linux-gnu/libltdl.so.7"- "/etc/docker/daemon.json:/etc/docker/daemon.json"- "/usr/local/jenkins_ssh:/root/.ssh:ro"environment:TZ: Asia/Shanghai
    ports:- "8080:8080"- "50000:50000"

 

当然是根据你自己的配置文件去写

 

然后就是打开你的二IP 端口 8080 去运行jenkins 然后让你git 代码去运行

我自己写了脚本shell 脚本

类似就是分支的区别去打包镜像上传

#!/bin/bash# 设置构建环境变量
export IMAGE_TAG=${BUILD_TAG:-latest} # Jenkins 自动生成的构建编号
export env=${ENVIRONMENT:-test}      # Jenkins 参数化传入的环境 (test 或 prod)
export DOCKER_USERNAME= 你的阿里云
export DOCKER_PASSWORD= 你的密码# 执行部署脚本
chmod +x ./deploy.sh
#./deploy.sh
current_time=$(date +%Y-%m-%d-%H-%M-%S)# 参数变量
NAMESPACE="test"  # 命名空间
PROJECT="cloudephone-dev"  # 项目名称
IMAGELAST="cloudphone-official-website" # 镜像名称后缀
PODNAME="cloudphone-official-website" # pod名称REGISTRY="你的镜像域名要上传的“
IMAGE_NAME="${PROJECT}/${IMAGELAST}"  # 镜像名称
# TAG=${IMAGE_TAG}
TAG=${current_time}
FULL_IMAGE_NAME="${REGISTRY}/${PROJECT}/${IMAGELAST}:${TAG}"
BUILD_ENV=${env} # 获取环境变量传入的值(test 或 prod)DEV_KUBECONFIG="/usr/local/kubeconfig/kubeconfig.yaml"  # 开发环境 kubeconfig 文件路径
PRO_KUBECONFIG="/usr/local/kubeconfig/kubeconfig-pro.yaml"  # 生产环境 kubeconfig 文件路径# 检查 Node 版本
check_node_version() {echo "🎯 检查 Node 版本..."node -v || { echo "❌ Node 未安装,请先安装 Node.js"; exit 1; }
}# 删除 node_modules 目录以确保清理
clean_node_modules() {echo "🧹 清理 node_modules..."rm -rf node_modules
}# 设置 NPM 镜像源为国内镜像
set_npm_registry() {echo "🌍 使用国内 npm 镜像源..."npm config set registry https://registry.npmmirror.com/
}# 安装依赖,忽略 peer-dependencies 错误
install_dependencies() {echo "🔄 安装项目依赖..."npm install --legacy-peer-deps || { echo "❌ 依赖安装失败"; exit 1; }
}# 设置 Node 内存限制以避免内存溢出
set_node_memory() {export NODE_OPTIONS=--max-old-space-size=4096
}# 设置 KUBECONFIG 并构建项目
build_project() {local ENV=$1npm install @emotion/reactnpm install @emotion/styledif [ "$ENV" == "dev" ]; thenecho "📦 当前环境为开发环境 (dev)"NAMESPACE="test"PROJECT="cloudephone-dev"IMAGELAST="cloudphone-official-website"PODNAME="cloudphone-official-website"export KUBECONFIG=$DEV_KUBECONFIGnpm run build:testelif [ "$ENV" == "pre" ]; thenecho "📦 当前环境为预发布环境 (pre)"NAMESPACE="pre"PROJECT="cloudphone-pre"IMAGELAST="cloud-phone-official-website"PODNAME="cloud-phone-official-website"export KUBECONFIG=$PRO_KUBECONFIGnpm run build:preelseecho "📦 当前环境为生产环境 (prod)"NAMESPACE="prod"PROJECT="cloudphone-pro"IMAGELAST="cloud-phone-official-website"PODNAME="cloud-phone-official-website"export KUBECONFIG=$PRO_KUBECONFIGnpm run buildfiFULL_IMAGE_NAME="${REGISTRY}/${PROJECT}/${IMAGELAST}:${TAG}"echo "✅ 项目构建完成,镜像名称: $FULL_IMAGE_NAME"
}# 登录阿里云镜像仓库
docker_login() {echo "🔑 登录阿里云镜像仓库..."docker login -u "${DOCKER_USERNAME}" -p "${DOCKER_PASSWORD}" "${REGISTRY}" || { echo "❌ 登录失败,请检查用户名和密码!"; exit 1; }
}# 构建 Docker 镜像
build_docker_image() {echo "🔨 构建 Docker 镜像..."docker build -t "${FULL_IMAGE_NAME}" . || { echo "❌ 镜像构建失败!"; exit 1; }
}# 推送 Docker 镜像到阿里云
push_docker_image() {echo "📤 推送镜像到阿里云..."docker push "${FULL_IMAGE_NAME}" || { echo "❌ 镜像推送失败!"; exit 1; }
}# 删除本地镜像
remove_local_image() {echo "删除本地镜像 ${FULL_IMAGE_NAME}..."docker rmi --force ${FULL_IMAGE_NAME} || { echo "❌ 删除本地镜像失败!"; exit 1; }
}# 更新 Kubernetes Pod
update_k8s_pod() {echo ">>> 检查当前 kubectl 上下文..."CURRENT_CONTEXT=$(kubectl config current-context 2>/dev/null)if [ -z "$CURRENT_CONTEXT" ]; thenecho "❌ 错误: 当前没有有效的 Kubernetes 上下文,请检查 kubectl 配置!"exit 1fiecho "✔ 当前上下文: $CURRENT_CONTEXT"# echo "📋 当前上下文中的所有命名空间:"# kubectl get namespaces || { echo "❌ 无法列出命名空间,请检查集群连接状态。"; exit 1; }# echo "--------------------------------------------"# echo ">>> 检查命名空间是否存在..."# if ! kubectl get namespace "$NAMESPACE" >/dev/null 2>&1; then#     echo "❌ 错误: 命名空间 '$NAMESPACE' 不存在!"#     exit 1# fi# echo "✔ 命名空间 '$NAMESPACE' 存在"# echo ">>> 检查用户权限..."# if ! kubectl auth can-i list pods -n "$NAMESPACE" >/dev/null 2>&1; then#     echo "❌ 错误: 当前用户无权访问命名空间 '$NAMESPACE'!"#     exit 1# fi# echo "✔ 当前用户有权访问命名空间 '$NAMESPACE'"kubectl set image deployment/${IMAGELAST} ${PODNAME}=你的镜像域名/${PROJECT}/${IMAGELAST}:${TAG} -n ${NAMESPACE}#kubectl set image deployment/${IMAGELAST} ${IMAGELAST}=${FULL_IMAGE_NAME} -n ${NAMESPACE} || { echo "❌ 更新镜像失败!"; exit 1; }echo "✅ Pod 更新完成"
}# 主流程
main() {check_node_versionclean_node_modulesset_npm_registryinstall_dependenciesset_node_memory# 构建项目build_project $BUILD_ENV# 登录并构建推送镜像docker_loginbuild_docker_imagepush_docker_image# 删除本地镜像remove_local_image# 更新 Kubernetes Podupdate_k8s_podecho "✅ 部署成功!镜像已推送到:${FULL_IMAGE_NAME}"
}main "$@"

 

#!/bin/bash 这个 就是类似的规范吧 shell 的脚本这样写


 然后就可以看到你的控制台输出了,今天就先这样吧 2024最后一天,加班快乐!!!!

 

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

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

相关文章

2024再见 2025你好

江湖路远 有缘再见~

IDEA 2024.3安装及激活教程(附详细步骤和常见问题解答,激活至2026实际永久,亲测)

前言 IntelliJ IDEA 是 JetBrains 公司推出的一款强大 IDE,最新版 IDEA 2024.3.1.1 在功能和体验上进一步提升。本文为大家提供最详细的安装、激活教程,帮助您快速配置开发环境。文末附激活补丁获取方式及常见问题解决方案。1. 卸载旧版本 IDEA 如果电脑中已安装旧版本 IDEA,…

centos/linux安装shellcheck报错

centos/linux安装shellcheck报错 在centos上安装shellcheck时,可能会因为各种各样的原因安装不了,如下: 笔者在安装时使用命令sudo yum install shellcheck时常报错404,403等等还有就是笔者在用wget方式安装时也是不行,连不上github,显示连接超时这可让我犯愁了,要编写s…

云原生 AI Meetup 广州站圆满落幕

云原生 AI Meetup 广州站圆满落幕:回顾技术盛宴的精彩瞬间(视频回放 +PPT) 12 月28 日,KubeSphere 社区联合 Higress 社区在广州成功举办了一场云原生技术盛会。本次活动云集了云原生、AI 应用、多集群管理以及存储优化领域的资深专家,吸引了众多开发者、架构师和技术爱好…

GitHub Pages静态文件发布

简介 GitHub Pages是GitHub提供的一项服务,允许用户和组织从存储库中的静态文件创建和托管网站。这些静态文件可以是HTML、CSS、JavaScript文件或任何其他可以在浏览器中直接渲染的文件。 教程 1. 创建一个仓库 2. 上传静态网页文件包括 HTML、CSS、JavaScript 文件等3. 进入仓…

EBS: 应付款管理系统开放接口导入

在EBS AP模块下 跑“应付款管理系统开放接口导入”没有生成应付发票,在EBS AP模块下 跑“应付款管理系统开放接口导入”没有生成应付发票, 接口表的错误信息: select * from ap_interface_rejections c where c.REJECT_LOOKUP_CODE = UNEXPECTED IMPORT ERROR +-----------…

flutter新手踩坑记录

vscode的黄色五边形小黄标:准备执行的代码行。相当于发现错误自己进入了单步调试。 我的代码为什么出现小黄标:dart:io 不能在web端正常工作。因为浏览器不能直接操作硬盘,需要用 下载-保存 的繁文缛节。改成windows端debug模式后正常工作

通义灵码使用技巧分享:如何用好注释以及跨文件索引

通义灵码是JetBrains、VSCode、Visual Studio等集成开发环境(IDE)中嵌入的一款智能开发助手工具,旨在通过人工智能技术简化软件开发过程,提升开发效率。通义灵码是JetBrains、VSCode、Visual Studio等集成开发环境(IDE)中嵌入的一款智能开发助手工具,旨在通过人工智能技…

年终总结的总结

1、要不要认真写 一般来说,年终总结基本都是公司要求写的,因此有部分人会排斥地认为这是形式主义,所以就到网上随便复制一篇来应付了事。 实际上,认真回顾并总结过去一年中成功的经验以及失败的教训,对个人来说是百利而无一害的,也是对自己人生负责任的表现。 毕竟,一年…

Java内存溢出分析

拿到堆快照,利用MAT工具进行分析 https://eclipse.dev/mat/download/参考 https://club.kdcloud.com/article/612243561462691840?productLineId=29&isKnowledge=2&lang=zh-CN

Qml 中实现毛玻璃效果

毛玻璃效果(Acrylic Effect)是一种常见的 UI 设计风格,它通过模糊背景并添加透明度和噪声效果,使界面元素看起来像是半透明的磨砂玻璃。 本文将介绍如何使用 Qml 实现这种效果,并提供一个完整的示例代码。【写在前面】 毛玻璃效果(Acrylic Effect)是一种常见的 UI 设计风…

VMware ESXi 8.0U3c macOS Unlocker OEM BIOS 标准版和厂商定制版,已适配主流品牌服务器

VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 标准版和厂商定制版,已适配主流品牌服务器VMware ESXi 8.0U3c macOS Unlocker & OEM BIOS 标准版和厂商定制版 ESXi 8.0U3c 标准版,Dell (戴尔)、HPE (慧与)、Lenovo (联想)、Inspur (浪潮)、Cisco (思科)、Hitachi (日…