当前位置:   article > 正文

Jenkins部署Docker与Jenkins流水线_jenkins打包,发布,部署docker

jenkins打包,发布,部署docker

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构建前设置

    在这里插入图片描述

  • 修改部署后操作

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

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构建前设置

    在这里插入图片描述

  • 修改构建后设置

    在这里插入图片描述

  • 重新构建,查看docker镜像是否被生成,jar包是否被启动
    在这里插入图片描述

七、Jenkins集群/并发构建

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

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

同上

2. 配置Jenkins节点

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

3. 配置Jenkins节点

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

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

八、流水线 pipeline

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

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

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

  • 1.1 创建一个pipeline工程

    在这里插入图片描述

  • 1.2 配置pipeline工程

    在这里插入图片描述

  • 1.3 编写构建脚本

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

  • 1.5 查看输出日志

    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

2. 基本语法

pipeline 定义一个流水线脚本

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

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

stage 每个工作开始

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

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

3. 安装Blue Ocean插件

  • 3.1 安装插件

    在这里插入图片描述

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

    在这里插入图片描述

  • 3.3 功能更加强大

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

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

    在这里插入图片描述

    在这里插入图片描述

  • 加入语法中

    在这里插入图片描述

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 启动后,可以看到包已经被构建在文件中
    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述

  • 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中成功被启动

5. 使用JenkinsFile创建多分支job

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

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

    在这里插入图片描述

2. 设置Jenkinsfile文件的位置
  • 在这里插入图片描述
3. 自动Scan成功

在这里插入图片描述

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

    在这里插入图片描述

6. 声明式流水线

  • 好处

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

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

7. 脚本式流水线

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

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

  1. 安装Git Parameter

    在这里插入图片描述

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

    在这里插入图片描述

    在这里插入图片描述

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

    在这里插入图片描述

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

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

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/262290
推荐阅读
相关标签