活动介绍

jenkins 服务器在harbor拉取docker.io/tomcat:9.0.67-jdk8镜像到本地使用dockerfile以docker.io/tomcat:9.0.67-jdk8镜像为基础在/usr/local/tomcat/webapps/下添加war包构建新的镜像 并上传到harbor上

时间: 2025-07-30 17:28:45 浏览: 13
<think>我们正在使用Jenkins来自动化构建一个基于Tomcat镜像的Docker镜像,并将WAR包添加到其中,然后推送到Harbor私有仓库。根据引用内容,我们可以总结以下步骤:1.Jenkins服务器需要配置Docker,并且能够访问Harbor仓库(包括登录认证)。2.Jenkins服务器上的Jenkins用户需要有执行Docker命令的权限(将jenkins用户加入docker组)。3.在Jenkins任务中,我们将编写一个Dockerfile,以docker.io/tomcat:9.0.67-jdk8为基础镜像,将WAR包复制到webapps目录下。4.使用dockerbuild构建镜像,并使用dockerpush推送到Harbor。具体步骤:步骤1:确保Jenkins服务器上的Docker配置了Harbor为不安全仓库(如果Harbor使用HTTP)或配置HTTPS(这里引用中使用了HTTP,所以配置为不安全仓库)。修改/etc/docker/daemon.json,添加"insecure-registries":["192.168.10.23"],然后重启docker(如引用[3]所示)。步骤2:确保Jenkins用户属于docker组(如引用[4]所示),这样Jenkins就可以执行docker命令。步骤3:在Jenkins任务中,我们需要添加构建步骤来执行Docker构建和推送。假设我们的项目已经通过Jenkins从代码仓库拉取,并且通过Maven构建生成了WAR包(位于target目录下)。步骤4:编写Dockerfile,内容如下:```FROMdocker.io/tomcat:9.0.67-jdk8#删除默认的ROOT应用(可选,如果需要用自己的应用作为根路径,则可以将WAR包命名为ROOT.war)RUNrm-rf/usr/local/tomcat/webapps/ROOT#复制WAR包到webapps目录,这里假设WAR包名为app.war,如果你希望它是根应用,则命名为ROOT.warCOPYtarget/*.war/usr/local/tomcat/webapps/ROOT.war#注意:如果项目有多个WAR包,需要具体指定一个,这里使用通配符*,如果只有一个WAR包则没问题```步骤5:在Jenkins构建步骤中执行dockerbuild和dockerpush。假设Harbor仓库地址为192.168.10.23,项目名称为library,镜像名称为solo,标签为${Tag}(可以在Jenkins中定义变量)。具体命令:```dockerbuild-t192.168.10.23/library/solo:${Tag}.dockerlogin192.168.10.23-uadmin-pHarbor12345dockerpush192.168.10.23/library/solo:${Tag}dockerlogout192.168.10.23```注意:这里使用了硬编码的密码,实际中应该使用Jenkins的凭证管理来存储Harbor的密码。步骤6:在Jenkins中配置Tag,例如可以使用构建编号作为Tag:${BUILD_NUMBER}。因此,Jenkins任务中的执行shell步骤可以这样写:```bash#假设当前目录是项目的工作目录,并且已经通过构建步骤生成了target/*.warTag=${BUILD_NUMBER}REPOSITORY="192.168.10.23/library/solo:$Tag"cat>Dockerfile<<EOFFROMdocker.io/tomcat:9.0.67-jdk8RUNrm-rf/usr/local/tomcat/webapps/ROOTCOPYtarget/*.war/usr/local/tomcat/webapps/ROOT.warEOFdockerbuild-t$REPOSITORY.dockerlogin192.168.10.23-uadmin-pHarbor12345dockerpush$REPOSITORYdockerlogout192.168.10.23```但是,请注意,在实际生产环境中,密码不应该明文写在脚本中。我们应该使用Jenkins的凭证功能来安全地存储密码。改进:使用Jenkins凭证管理Harbor登录密码1.在Jenkins中添加一个用户名密码类型的凭证,例如凭证ID为'harbor-cred',用户名为admin,密码为Harbor12345。2.在Jenkins任务中,使用withCredentials来获取凭证。修改后的脚本:```bashTag=${BUILD_NUMBER}REPOSITORY="192.168.10.23/library/solo:$Tag"cat>Dockerfile<<EOFFROMdocker.io/tomcat:9.0.67-jdk8RUNrm-rf/usr/local/tomcat/webapps/ROOTCOPYtarget/*.war/usr/local/tomcat/webapps/ROOT.warEOFdockerbuild-t$REPOSITORY.#使用凭证dockerlogin192.168.10.23-uadmin-p${HARBOR_PASSWORD}dockerpush$REPOSITORYdockerlogout192.168.10.23```然后在Jenkins的构建步骤中,使用withCredentials绑定凭证:在Pipeline脚本中,可以这样写:```stage('BuildandPushDockerImage'){withCredentials([usernamePassword(credentialsId:'harbor-cred',usernameVariable:'USERNAME',passwordVariable:'PASSWORD')]){sh"""Tag=${BUILD_NUMBER}REPOSITORY="192.168.10.23/library/solo:\$Tag"dockerbuild-t\$REPOSITORY.dockerlogin192.168.10.23-u\$USERNAME-p\$PASSWORDdockerpush\$REPOSITORYdockerlogout192.168.10.23"""}}```如果是自由风格项目,可以使用“Injectpasswordstothebuildasenvironmentvariables”选项,或者使用“CredentialsBinding”插件,在构建环境中绑定凭证,然后在脚本中使用环境变量。自由风格项目配置:1.在构建环境中勾选“Usesecrettext(s)orfile(s)”,然后添加一个绑定:选择用户名和密码,指定变量名(例如USERNAME和PASSWORD),并选择对应的凭证。2.在构建步骤的Executeshell中:```bashTag=${BUILD_NUMBER}REPOSITORY="192.168.10.23/library/solo:$Tag"dockerbuild-t$REPOSITORY.dockerlogin192.168.10.23-u$USERNAME-p$PASSWORDdockerpush$REPOSITORYdockerlogout192.168.10.23```注意:在自由风格项目中,环境变量可以直接使用。总结:通过以上步骤,Jenkins就可以从Harbor拉取Tomcat镜像(实际上在构建时Docker会从远程拉取,如果本地没有的话),然后添加WAR包构建新镜像,并推送到Harbor仓库。注意:在构建镜像之前,需要确保Dockerfile中的COPY命令能够找到WAR包,因此需要先通过构建步骤(如Maven)生成WAR包。如果项目不是Maven项目,则需要根据实际情况生成WAR包。另外,如果Harbor仓库中的项目library不存在,需要先在Harbor中创建这个项目,因为Harbor对于项目是权限控制的,并且推送镜像到项目需要先存在该项目。以上就是完整的配置过程。</think>### Jenkins配置Dockerfile构建Tomcat镜像并推送至Harbor #### 步骤1:配置Jenkins环境 ```bash # 1.1 添加Jenkins用户到docker组 sudo usermod -aG docker jenkins sudo systemctl restart jenkins # 1.2 配置Docker信任Harbor仓库 sudo tee /etc/docker/daemon.json <<EOF { "insecure-registries": ["http://192.168.10.23"] } EOF sudo systemctl restart docker ``` #### 步骤2:创建Dockerfile 在Jenkins项目根目录创建`Dockerfile`: ```dockerfile # 使用官方Tomcat镜像 FROM docker.io/tomcat:9.0.67-jdk8 # 删除默认应用 RUN rm -rf /usr/local/tomcat/webapps/ROOT # 添加WAR包到webapps目录 COPY target/*.war /usr/local/tomcat/webapps/ROOT.war # 暴露端口 EXPOSE 8080 # 启动Tomcat CMD ["/usr/local/tomcat/bin/catalina.sh", "run"] ``` #### 步骤3:Jenkins构建脚本 在Jenkins的`Execute Shell`构建步骤中添加: ```bash #!/bin/bash # 设置镜像标签 Tag=${BUILD_NUMBER} REPOSITORY="192.168.10.23/library/solo:${Tag}" # 构建镜像 docker build -t $REPOSITORY . # 登录Harbor docker login 192.168.10.23 -u admin -p Harbor12345 # 推送镜像 docker push $REPOSITORY # 清理 docker logout 192.168.10.23 ``` #### 步骤4:配置Jenkins凭证(推荐) 1. 在Jenkins中添加Harbor凭证: - **类型**:Username with password - **ID**:harbor-creds - **用户名**:admin - **密码**:Harbor12345 2. 修改构建脚本使用凭证: ```bash #!/bin/bash Tag=${BUILD_NUMBER} REPOSITORY="192.168.10.23/library/solo:${Tag}" docker build -t $REPOSITORY . # 使用凭证登录 docker login 192.168.10.23 -u $(cat /path/to/username) -p $(cat /path/to/password) docker push $REPOSITORY docker logout 192.168.10.23 ``` #### 验证流程 ```mermaid graph TD A[Jenkins拉取代码] --> B[Maven构建WAR包] B --> C[执行Dockerfile构建] C --> D[登录Harbor仓库] D --> E[推送新镜像] E --> F[清理登出] ``` #### 关键配置说明 1. **WAR包处理**: - `COPY target/*.war` 将编译后的WAR包复制到容器 - 重命名为`ROOT.war`使其成为默认应用 2. **镜像命名规范**: - `192.168.10.23/library/solo:${Tag}` - `192.168.10.23`:Harbor地址 - `library`:项目名称 - `solo`:镜像名称 - `${Tag}`:使用Jenkins构建编号 3. **安全建议**: - 使用Jenkins凭证管理密码[^3] - 为不同环境设置独立Harbor项目 - 配置镜像扫描策略 #### 常见问题解决 - **权限拒绝**:确认Jenkins用户属于docker组[^4] - **无法连接Harbor**:检查`insecure-registries`配置[^3] - **WAR包未找到**:确保Maven构建在Docker构建之前执行 - **推送失败**:验证Harbor项目是否存在且用户有推送权限[^1] ---
阅读全文

相关推荐

pdf
内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。

最新推荐

recommend-type

无线通信基于PSO的STAR-RIS辅助NOMA系统优化:联合功率分配与智能表面参数调优(含详细代码及解释)

内容概要:该论文探讨了一种基于粒子群优化(PSO)的STAR-RIS辅助NOMA无线通信网络优化方法。STAR-RIS作为一种新型可重构智能表面,能同时反射和传输信号,与传统仅能反射的RIS不同。结合NOMA技术,STAR-RIS可以提升覆盖范围、用户容量和频谱效率。针对STAR-RIS元素众多导致获取完整信道状态信息(CSI)开销大的问题,作者提出一种在不依赖完整CSI的情况下,联合优化功率分配、基站波束成形以及STAR-RIS的传输和反射波束成形向量的方法,以最大化总可实现速率并确保每个用户的最低速率要求。仿真结果显示,该方案优于STAR-RIS辅助的OMA系统。 适合人群:具备一定无线通信理论基础、对智能反射面技术和非正交多址接入技术感兴趣的科研人员和工程师。 使用场景及目标:①适用于希望深入了解STAR-RIS与NOMA结合的研究者;②为解决无线通信中频谱资源紧张、提高系统性能提供新的思路和技术手段;③帮助理解PSO算法在无线通信优化问题中的应用。 其他说明:文中提供了详细的Python代码实现,涵盖系统参数设置、信道建模、速率计算、目标函数定义、约束条件设定、主优化函数设计及结果可视化等环节,便于读者理解和复现实验结果。此外,文章还对比了PSO与其他优化算法(如DDPG)的区别,强调了PSO在不需要显式CSI估计方面的优势。
recommend-type

在自定义数据集上训练yolov3,并封装到ROS中作为一个节点

资源下载链接为: https://pan.quark.cn/s/9ccb85a2be0f 在自定义数据集上训练yolov3,并封装到ROS中作为一个节点(最新、最全版本!打开链接下载即可用!)
recommend-type

snapd-qt-devel-1.58-1.el8.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

snappy-1.1.8-3.el8.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

smp_utils-libs-0.99-5.el8.tar.gz

# 适用操作系统:Centos8 #Step1、解压 tar -zxvf xxx.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm
recommend-type

Ext4压缩与解压工具:从解包到重新打包全过程

标题和描述中提到的知识点详细说明如下: ### ext4文件系统 ext4(第四扩展文件系统)是Linux操作系统中的一个日志文件系统,它是在ext3基础上发展起来的。ext4提供了一系列改进,包括更大的文件系统和文件大小、更快的性能、更强的可靠性等。ext4文件系统广泛应用于Linux服务器和嵌入式设备中,特别是在Android操作系统中,它通常用于存储系统数据。 ### 解压工具 描述中提到了三个主要工具:make_ext4fs、simg2img和kusering.sh。这些工具主要用于Android设备的系统镜像文件的解压缩和重新打包操作。具体如下: 1. **make_ext4fs** 这是一个Android平台上的命令行工具,用于创建一个新的ext4文件系统镜像文件。这个工具通常用于打包修改过的文件系统或创建一个新的系统分区。其重要参数包括: - `-s`:创建一个sparse(稀疏)文件系统镜像。 - `-l`:设置文件系统的大小限制。 - `-a`:指定默认挂载点。 - `system.img`:输出的镜像文件名称。 - `tmp`:指定要打包的目录。 2. **simg2img** 该工具用于将Android专用的sparse格式镜像文件转换为普通的ext4文件系统镜像文件。这对于解包系统镜像文件和查看其中内容非常有用。其基本用法是: ```bash simg2img system.img system.img.ext4 ``` 这样就可以将一个sparse格式的system.img转换成ext4格式的system.img.ext4,后者能够被挂载到Linux系统中进行查看和修改。 3. **kusering.sh** 这个脚本可能是用于修改用户ID(UID)和组ID(GID)的脚本。在Android系统中,对系统分区进行操作时可能需要特殊的权限设置,而kusering.sh脚本正是用于此目的。但由于描述中没有具体的使用命令,无法给出具体用法。 ### 操作方法 描述中提供了一系列步骤来解压和修改system.img文件,并重新打包。下面详细介绍这些步骤: 1. **解压system.img为ext4格式**: 使用simg2img工具将sparse格式的system.img转换为ext4文件系统格式,命令如下: ```bash simg2img system.img system.img.ext4 ``` 这一步是必要的,因为原始的system.img通常是一个sparse格式,不易于直接修改。 2. **创建挂载目录**: 创建一个临时目录用于挂载ext4文件系统,命令如下: ```bash mkdir tmp ``` tmp目录将作为挂载点,用于将image文件挂载到Linux文件系统中。 3. **挂载ext4文件系统**: 将上一步得到的ext4文件系统挂载到之前创建的tmp目录,命令如下: ```bash sudo mount -t ext4 -o loop system.img.ext4 tmp ``` 使用`-t ext4`指定文件系统类型为ext4,`-o loop`创建一个循环设备,使得普通文件也能像块设备一样被访问。 4. **修改文件系统内容**: 进入tmp目录后,用户可以按照需求对文件系统内的内容进行修改。这一步通常需要root权限。 5. **重新打包文件系统**: 修改完成后,使用make_ext4fs工具将tmp目录重新打包为一个新的sparse格式的system.img文件,命令如下: ```bash sudo make_ext4fs -s -l 239M -a system system.img tmp ``` 这里`-s`表示创建sparse格式的文件系统,`-l 239M`指定文件系统的大小,`-a system`设置默认挂载点,`system.img`是打包后的输出文件名,`tmp`是作为文件系统源的目录。 ### 总结 以上步骤涵盖了如何使用simg2img、make_ext4fs工具进行Android设备的系统镜像的解压、挂载、修改和重新打包操作。需要注意的是,进行这些操作需要相应的Linux环境知识,以及对Android系统文件结构有一定的了解。由于这些操作涉及对系统分区的修改,建议在操作前备份原始的system.img文件,以防万一出现问题能够恢复。同时,由于这些操作可能会影响设备的正常使用,建议仅在允许的范围内进行。
recommend-type

【数据转换的基石】:技术分析,Excel到Oracle建表语句的自动化

# 摘要 本文主要探讨了数据转换项目中的关键步骤和自动化方法。首先,文章概述了数据源的分析与处理,重点在于理解Excel数据结构和进行数据清洗预处理。随后,文章介绍了利用VBA和Python语言实现Excel数据提取的自动化技术。接着,文章转向Oracle数据库建表语句的自动生成,涵盖了数据库基础、制定建表规则和模板,以及脚本编写的自动化过程。第五章整合了数据提取与建表流程,并通过案例实践展示了自动化数据转换项目的应用。
recommend-type

前端vue2 使用高德地图api

<think>好的,我现在需要解决用户的问题:如何在Vue2项目中集成和使用高德地图API。用户希望得到一个示例教程,并且根据提供的引用内容,我需要结合这些资料来构建答案。首先,我需要回顾用户提供的引用内容,看看有哪些关键点可以利用。 引用1、2、3、4、5都是关于Vue集成高德地图的,特别是引用4和5提到了Vue2和Vue3的具体集成步骤。用户问的是Vue2,所以需要重点参考引用4和5中的Vue2相关内容。不过引用5是Vue3的教程,可能部分步骤类似,但需要注意版本差异。 首先,步骤一般包括:注册高德开发者账号、获取API key、在Vue项目中引入高德地图的JS API、创建地图容器、
recommend-type

易语言源码:希冀程序保护专家深入解析

易语言是一种简单易学的编程语言,主要面向中文编程社区,其特色在于使用中文作为编程关键字。标题中提到的“希冀程序保护专家”可能是易语言编写的程序,旨在提供给易语言开发者使用的源码保护工具。 ### 易语言基础知识点 - **易语言的定义与特点:** 易语言是一种汉语编程语言,它的关键词和语法结构使用中文书写,极大降低了编程的学习难度,尤其适合编程初学者和没有英文基础的用户。 - **易语言的开发环境:** 易语言提供了一套集成开发环境(IDE),包括代码编辑器、调试器等,支持快速开发Windows应用程序。 - **易语言的应用范围:** 易语言广泛应用于桌面应用开发,如文本处理、游戏开发、系统管理工具等领域。 ### 程序保护的必要性 - **软件盗版与破解:** 在软件行业中,未经许可的复制和使用是一个普遍的问题。开发者需要采取措施保护其软件不被盗版和非法复制。 - **知识产权保护:** 程序保护是维护知识产权的一种方式,它帮助开发者保护其劳动成果不被他人侵权。 - **商业利益保护:** 软件如果被轻易破解,可能会导致开发者的经济损失。通过有效的程序保护,可以确保软件的合法销售和使用,维护开发者的商业利益。 ### 程序保护技术 - **代码混淆(Obfuscation):** 通过改变代码的结构和变量名来使程序难以阅读和分析,增加逆向工程的难度。 - **加壳(Packers):** 将可执行文件压缩,加密,使得程序在运行时首先执行一个解密或解压缩的过程,增加了程序被非法篡改的难度。 - **注册验证机制:** 通过软件注册码或激活机制,验证用户是否有权使用软件,限制非授权用户的使用。 - **许可证授权管理:** 程序运行时与远程服务器交互验证用户许可证,确保只有合法的用户可以使用软件。 ### 易语言的程序保护方案 - **代码混淆工具:** 易语言提供专门的混淆工具,开发者可以对源码进行混淆处理,提高代码安全性。 - **加密算法:** 易语言支持内置的加密解密函数库,开发者可以利用这些库函数实现加密算法,保护程序不被轻易破解。 - **模块化编程:** 易语言支持模块化开发,可以将核心功能封装在DLL模块中,通过主程序调用,增强保护效果。 - **第三方保护软件:** 如描述中的“希冀程序保护专家”,这样的工具往往集成了多种程序保护技术,如加壳、注册机生成、许可证管理等,提供一站式的服务。 ### 结论 易语言源码“希冀程序保护专家”面向的用户是使用易语言进行软件开发的程序员。这款工具能够帮助他们保护自己的易语言源码和编译后的可执行程序,防止源码被非法窃取,维护个人或公司的权益。通过实现各种程序保护技术,它能够提升软件的安全性,减少潜在的盗版风险,并且能够通过多种方式确保软件的授权使用,维护软件的市场价值。对于易语言开发者而言,这类保护工具是其软件能够获得市场成功的重要保障之一。
recommend-type

【数据迁移流程优化】:一步到位的Excel到Oracle建表语句自动化转换

# 摘要 本文旨在优化数据迁移流程,通过深入分析Excel与Oracle数据库的结构特点和数据处理技术,开发出一套自动化工具来实现高效的数据转换。文章首先概述了数据迁移流程,并对Excel数据结构和提取技术进行了详细分析。接着,介绍了Oracle数据库的基础知识,包括建表语句和数据库设计原则。在此基础上,文章详细描述了自动化转换工具的开发过程,包括