Jenkins部署Docker与Jenkins流水线

这篇具有很好参考价值的文章主要介绍了Jenkins部署Docker与Jenkins流水线。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Jenkins部署Docker与Jenkins流水线

接上篇

六、Jenkins自动化部署到Docker容器

1. 外挂文件的方式在docker容器中启动

  • # 拉取 JDK 11 的Docker镜像
    docker pull openjdk:11
    
    # 移动 宿主机上的jar包
    mv /jenkins/build_jar/first1/jenkins_demo-1.0-SNAPSHOT.jar  /docker/jenkins_jar/
    
    # 启动镜像 需要做端口映射与容器卷映射
    docker run -d -p 8081:8081 --privileged=true --name demo_out -v /docker/jenkins_jar/first:/jar_packet openjdk:11 java -jar /jar_packet/jenkins_demo-1.0-SNAPSHOT.jar
    
    
    -d 后台运行
    -p 将宿主机和容器的8081端口进行映射
    privileged=true 容器内拥有管理员权限
    -v 将宿主机jar包与容器内jar包进行关联映射
    java -jar /jar_packet/jenkins_demo-1.0-SNAPSHOT.jar 启动jar包
    
    # 查看容器是否启动
    docker ps
    
    #访问我们之前的网站可以看到 jar包已经被启动了
    
    
    

2. 将构建运行放入docker容器中(不构建镜像)

  • 修改Jenkins构建前设置

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 修改部署后操作

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 重新构建,已经成功构建在容器中

3. 将构建运行放入docker镜像中(采用dockerfile)

  • 1.编写dockerfile,放入项目中,注意不能和依赖的包同级

  • 写好可以尝试使用 docker build it demo .来尝试构建一下

    FROM openjdk:11
    EXPOSE 8081
    
    WORKDIR /docker/jenkins_jar
    
    ADD first /jar_packet/first
    ENTRYPOINT ["java","-jar","/jar_packet/jenkins_demo-1.0-SNAPSHOT.jar"]
    
    
  • 2.修改构建设置

  • 修改Jenkins构建前设置

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 修改构建后设置

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 重新构建,查看docker镜像是否被生成,jar包是否被启动
    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

七、Jenkins集群/并发构建

集群化构建可以有效提升构建效率,尤其是团队项目比较多或者子项目比较多的时候,可以并发在多台机器上执行构建。

1. 创建多主机,拥有构建环境

同上

2. 配置Jenkins节点

jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

3. 配置Jenkins节点

将节点连接成功后,同步在节点主机上复制好Jenkins的一些jar包,这些都是不需要手动去操作的,同时还会自动启动一些jar文件。

4.配置并发构建/通过标签匹配构建

jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

八、流水线 pipeline

流水线既能作为任务的本身,也能作为JenkinsFile

使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同时参与进来,同时也可以编辑开发JenkinsWebUI不能完成的更复杂的构建逻辑,作为开发者可读性也更好。

1. 创建一个简单的pipeline工厂

  • 1.1 创建一个pipeline工程

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 1.2 配置pipeline工程

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 1.3 编写构建脚本

    pipeline { //定义一个流水线脚本
    	agent any //设置一个执行器,如上面配的节点
    
    	stages { //所有工作的开始
    		stage('拉取git代码') { //一项工作的开始,括号里的是该工作的名称
    			steps { //声明式脚本往这里面写
    				echo '拉取完成' //控制台打印
    			}
    		}
    		
    		stage('构建代码') { //一项工作的开始,括号里的是该工作的名称
    			steps { //声明式脚本往这里面写
    				echo '构建完成' //控制台打印
    			}
    		}
    	}
    }
    
    
  • 1.4 运行工程

  • 1.5 查看输出日志

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 1.7 可以从指定阶段再来一次

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

2. 基本语法

pipeline 定义一个流水线脚本

agent 指示 Jenkins 为整个流水线分配一个执行器(在 Jenkins 环境中的任何可用代理/节点上)和工作区。

stages 全部的工作都在这里执行

stage 每个工作开始

steps jenkinsfile 声明式脚本往这里面写

echo 写一个简单的字符串到控制台输出。

3. 安装Blue Ocean插件

  • 3.1 安装插件

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 3.2 打开插件,它为我们提供了一套更简单明了的ui界面

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 3.3 功能更加强大

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

4. 使用pipeline自动打包docker镜像

1. 从git上拉取代码
  • 1.1 通过流水线语法生成代码

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 加入语法中

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

2. 添加maven构建
  • 2.1 引入maven

    添加

    tools{
     maven "maven-3.8.6"
    }
    后面的名称是你在global tool中配置的maven的name
    
  • 2.2 使用命令打包

    sh "mvn clean package" //sh表示执行一行命令
    
    sh """ 
    		mvn clean package
    
    	 """
    	 //这种是表示多行命令
    	 
    

    因为我们的pom文件不在工作目录下,我们需要cd到子文件夹中

    cd jenkins_demo/

    //所以构建命令为
    sh """ 
    		cd jenkins_demo/
    		mvn clean package
    	 """
    
  • 2.3 启动后,可以看到包已经被构建在文件中
    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

3. jar包发布到服务器上
  • 3.1 构建语法

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  • 3.2 将构建的语法放入到脚本中

    pipeline { //定义一个流水线脚本
    	agent any //设置一个执行器,如上面配的节点
    	
    	tools{
    	    maven "maven3"
    	}
    
    	stages { //所有工作的开始
    		stage('拉取git代码') { //一项工作的开始,括号里的是该工作的名称
    			steps { //声明式脚本往这里面写
    			    git credentialsId: 'efca258b-ab2a-48d7-bc23-17e2a69945ba', url: 'https://gitee.com/lv-hao/jenkins_demo.git'
    				echo '拉取完成' //控制台打印
    			}
    		}
    		
    		stage('构建代码') { //一项工作的开始,括号里的是该工作的名称
    			steps { //声明式脚本往这里面写
    			    sh """ 
                	cd jenkins_demo
    	            mvn clean package
                    """
    				echo '构建完成' //控制台打印
    			}
    		}
    
    		stage('清理旧代码') { //一项工作的开始,括号里的是该工作的名称
    			steps { //声明式脚本往这里面写
    			    sshPublisher(publishers: [sshPublisherDesc(configName: 'LinuxServer', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''rm -rf /docker/jenkins_jar/firstPipeline/*
    					rm -f /docker/jenkins_jar/dockerfile
    
    					docker stop demo
    					docker rm -f demo
    					docker rmi -f demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
    				echo '清理旧代码完成' //控制台打印
    			}
    		}
    
    
    		stage('部署运行') { //一项工作的开始,括号里的是该工作的名称
    			steps { //声明式脚本往这里面写
    			    sshPublisher(publishers: [sshPublisherDesc(configName: 'LinuxServer', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''mkdir -p /docker/jenkins_jar/firistPipeline
    					mv /jenkins/build_jar/firistPipeline/* /docker/jenkins_jar/firistPipeline/''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/firistPipeline', remoteDirectorySDF: false, removePrefix: 'jenkins_demo/target', sourceFiles: '**/jenkins_demo/target/*.jar'), sshTransfer(cleanRemote: false, excludes: '', execCommand: '''mv /jenkins/build_jar/dockerfile /docker/jenkins_jar/dockerfile
    					
    					cd /docker/jenkins_jar
    					
    					docker build -t demo .
    					
    					docker run -d -p 8081:8081 --name demo demo''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '/', remoteDirectorySDF: false, removePrefix: 'jenkins_demo/docker', sourceFiles: 'jenkins_demo/docker/dockerfile')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
    				echo '部署运行完成' //控制台打印
    			}
    		}
    		
    		
    	}
    }
    
    
  • 3.3 保存运行后,可以看到我们的项目在docker中成功被启动

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

5. 使用JenkinsFile创建多分支job

主要是为了解决在git上针对不同的分支做不同的构建

1. 在BlueOcen中创建流水线
  • 创建流水线

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

2. 设置Jenkinsfile文件的位置
  • jenkins打包,发布,部署docker,云原生,jenkins,docker,运维
3. 自动Scan成功

jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

4. 多分支运行
  • 这样,Jenkins就为我们按照分支内不同的JenkinsFile去构建了不同的流水线

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

6. 声明式流水线

  • 好处

    • 更像是在Jenkins Web UI中操作
    • 可读性比较高
    • 可以使用Blue Ocean UI自动生成
    • 支持语法检查
  • 坏处

    • 代码逻辑能力比脚本弱,不能完成特别复杂的任务

7. 脚本式流水线

  • 好处
    • 更少的代码和弱规范要求
    • 更灵活的自定义代码操作
    • 不受约束,可以构建特别复杂的工作流和流水线
  • 坏处
    • 读写对编程要求比较高
    • 比声明式流水线代码更加复杂

九、Jenkins项目构建选择特定的分支

  1. 安装Git Parameter

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  2. 在项目的设置中添加设置

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

  3. 此时我们就可以通过选择具体分支来部署了

    jenkins打包,发布,部署docker,云原生,jenkins,docker,运维

至此,我们已经可以通过Jenkins来实现一些中小型系统的CI/DI了,希望大家都去试试吧。

如果对你有帮助的话,记得点个赞再走哦!🤠

jenkins打包,发布,部署docker,云原生,jenkins,docker,运维文章来源地址https://www.toymoban.com/news/detail-815783.html

到了这里,关于Jenkins部署Docker与Jenkins流水线的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Jenkins 流水线多种使用场景详解(Jenkinsfile,多环境部署,多分支部署)

    Jenkins是目前大多数中小公司使用的CI、CD工具,其中Jenkins的任务又分普通任务和流水线任务,普通任务的构建和部署在我之前的一篇文章中写过使用教程# 基于 Docker 安装 Jenkins,并配置使用 Jenkins 打包 Node 前后端服务部署到远程服务器,但其中流水线任务可实现我们更复杂的

    2024年02月07日
    浏览(45)
  • Docker+Jenkins(blueocean)+Gitee构建CICD流水线实战

    vim /etc/profile export JAVA_HOME=/home/jdk/jdk1.8.0_301 export JRE_HOME=$JAVA_HOME/jre export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib export PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin source /etc/profile vim /etc/profile export MAVEN_HOME=/home/maven/apache-maven-3.8.6 export PATH=$PATH:$MAVEN_HOME/bin source /etc/profile docker pull jenkinsci/blue

    2024年02月11日
    浏览(81)
  • Jenkins流水线整合k8s实现代码自动集成和部署

    1、安装好k8s集群 这里先要搭建好一个K8s集群,笔者这边就采用使用了一个一主一丛的k8s集群,k8s集群的版本使用1.19.5版本,服务器的配置:2核4G,操作系统: CentOS Linux release 7.9.2009 (Core) 主机名         ip k8smaster 192.168.19.8 k8sworker         192.168.19.9 具体的安装步骤可以

    2024年02月05日
    浏览(53)
  • 【Jenkins】Jenkins构建前端流水线

    1、服务器中已安装好nginx,如没有安装,可参考此博客:【Shell脚本】Linux安装Nginx以及开机自启 2、如果已有试图,则直接新建任务;如没有视图,则新建一个视图即可。 一个项目一个视图就可以 描述:XXX前端-前端XXX服务测试环境-项目构建 创建人:创建者姓名 时间:创建

    2024年02月16日
    浏览(88)
  • 【Jenkins】Jenkins构建后端流水线

    xxxx后端-后端cim服务测试环境-项目构建 创建人:创建者姓名 时间:创建时间 保持构建天数:2 保持最大构建个数:3 ①clean:清楚之前;package:打包 -Dmaven.test.skip=true:跳过测试;-U:强制让Maven检查所有SNAPSHOT依赖更新 这里的pom.xml文件注意: Branches to build:分支某个环境的

    2024年02月12日
    浏览(54)
  • jenkins流水线

    1、 二、 三、 四、 五、 六、  

    2024年02月05日
    浏览(57)
  • Jenkins流水线怎么做?

    问CHAT:Jenkins流水线怎么做? CHAT回复:Jenkins流水线是一种创建、测试和部署应用程序的方法。以下是为Jenkins创建流水线的步骤: 1. 安装Jenkins:首先你需要在你的服务器上安装Jenkins。这个过程可能会根据你的操作系统有所不同。 2. 安装必要的插件:为了使流水线工作,你需

    2024年01月24日
    浏览(55)
  • 【Jenkins】pipeline流水线

    流水线既能作为任务的本身,也能作为jenkinsfile,使用流水线可以让我们的任务从ui手动操作,转换为代码化,像docker的dockerfile一样,从shell命令到配置文件,更适合大型项目,可以让团队其他开发者同事参与进来,同时也可以编辑开发jenkinswebui不能完成的复杂的构建逻辑,作

    2024年02月09日
    浏览(75)
  • Jenkins的流水线详解

    来源:u.kubeinfo.cn/ozoxBB 什么是流水线 声明式流水线 Jenkinsfile 的使用 jenkins 有 2 种流水线分为 声明式流水线 与 脚本化流水线 ,脚本化流水线是 jenkins 旧版本使用的流水线脚本,新版本 Jenkins 推荐使用声明式流水线。文档只介绍声明流水线。 声明式流水线 在声明式流水线语

    2024年02月11日
    浏览(48)
  • Jenkins 流水线多阶段构建

    Jenkins流水线配置遇到 无法识别的。需要使用 自定义环境 项。 比如官网的在流水线中使用Docker Started by remote host 172.17.0.1 Obtained Jenkinsfile from git http://10.99.20.51:8082/root/java-devops-demo.git org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed: WorkflowScript: 28: Invalid agent type “

    2024年04月22日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包