做企业网站哪里找,网站开发公司交易流程,在线图像制作,怎么找精准客户资源一.背景 在《maven项目容器化运行之1》中#xff0c;我们开启了1Panel环境中docker构建服务给到了局域网。在《maven项目容器化运行之2》中#xff0c;我们基本实现了maven工程创建、远程调用docker构建镜像、在1Panel选择镜像运行容器三大步骤。 但是#xff0c;存在一个问…一.背景 在《maven项目容器化运行之1》中我们开启了1Panel环境中docker构建服务给到了局域网。在《maven项目容器化运行之2》中我们基本实现了maven工程创建、远程调用docker构建镜像、在1Panel选择镜像运行容器三大步骤。 但是存在一个问题就是我们本地每次install的时候都会去构建镜像。期望开发人员在本地开发打包构建时用于本地测试或者联调不去构建镜像。而专业测试人员一般是面对测试环境进行测试这时就需要发布到测试环境能够快速构建测试人员的测试环境就行。 因为构建镜像、运行容器是部署阶段的事情并不是开发阶段的事情。所以我期望继续改进实现更优雅的开发与部署测试或正式部署。
二.整体思路 1.调整maven的docker插件设置 期望通过设置dockerfile-maven-plugin插件实现每次mvn install等不要去构建镜像。但又要找到一个maven的命令可以单独执行镜像构建的任务。我开始的思路是这样行不行还得慢慢摸索学习。 2.借助Jenkins创建自动构建镜像到1Panel 这一步我开始心里就有底。不外乎就是从git拉代码执行一个命令就实现了自动构建进行到1Panel。因为在《maven项目容器化运行之2》中我们本机执行maven工程的install就已经实现了远程调用docker的构建服务了。这里的“到1Panel”中没有我们需要做的。应该是1Panel自己集成或者想了办法可以识别到其本机docker的images。我们只要调用了1Panel所在服务器的docker构建服务并生成了image文件默认就在docker所在的服务器上它自己就能识别到。
三.尝试过程 1.调整maven的docker插件设置 buildfinalName${project.artifactId}/finalNamepluginsplugingroupIdorg.springframework.boot/groupIdartifactIdspring-boot-maven-plugin/artifactIdversion2.6.6/versionexecutionsexecutiongoalsgoalrepackage/goal/goals/execution/executions/pluginplugingroupIdcom.spotify/groupIdartifactIddockerfile-maven-plugin/artifactIdversion${version.dockerPlugin}/versionexecutionsexecutioniddefault/idgoals
!-- goalbuild/goal--
!-- goalpush/goal--/goals/execution/executionsconfigurationrepository${project.groupId}/${project.artifactId}/repositorytag${project.version}/tagbuildArgsJAR_FILE${project.build.finalName}/JAR_FILE/buildArgsdockerfileDockerfile/dockerfile/configuration/plugin/plugins/build 我就屏蔽了goals中的2个goal。这个goal是干什么的呢我的理解是Maven生命周期对应标准命令执行哪个docker的动作就是构建、推送等。我一个都不设置呢意思就是在maven构建时不要去直接执行docker的动作。这样就实现了开发人员在本地执行maven的标准命令时不会去执行docker相关的事情。 那要想执行docker相关的动作呢maven的命令又该怎么办输入类似如下命令即可
mvn clean install dockerfile:build 最后一段命令“dockerfile:build”就是明确指定执行docker的动作。这个命令开发人员一般不会去执行如果添加到Jenkins任务中。这样就实现了“开发不管、自动构建”的目标了。 2.借助Jenkins创建自动构建镜像到1Panel 前提在这之前已经安装了Jenkins和相关必要的插件代码也已经提交到了代码库中我们是局域网gitlab。 1新建一个Jenkins任务 在弹窗中输入任务名称选择maven项目。 2进行Jenkins任务配置 输入任务描述 选择git的地址、git登录凭证、代码分支默认是master一定要注意这里 构建勾选一个并设置构建周期。这里的H/2 * * * *是2分钟构建一次准确说是2分钟执行一次任务从gitlab获取代码有更新才执行构建。没有更新就不会构建。这个刚刚是我们想要的。比如开发人员在本地测试可能会有多次修改没有问题后将代码提交到代码库。提交到代码库的一般都是实现了新功能或者完成了bug、功能修改这个时候自动构建到1Panel环境是符合我们优雅的期望。 如果不知道怎么写日程表可以点击右边的问号看看下面的解释就明白了。如果还看不懂自己单独去学习Cron表达式。 构建环境就选择第一个在构建前删除构建空间。 build节点设置执行命令为 clean install dockfile:build。这里不需要输入mvn 开头哈要注意 3遇到的错误 报错如下 Caused by: com.spotify.docker.client.shaded.org.apache.http.conn.HttpHostConnectException: Connect to localhost:2375 [localhost/127.0.0.1, localhost/0:0:0:0:0:0:0:1] failed: Connection refused: no further information
a.连接不到docker的构建服务在Jenkins构建任务PreSteps中设置不生效 我是这样是设置的但是并不生效。 怎么理解呢主要是这里的windows命令与后续maven构建执行并不在一个进程之中所以设置无效。就像开了2个bat窗口第一个设置的变量第二个bat窗口并不能获取到。是隔离的。我之前在Jenkins中测试过执行2个windows command等类似的情况。 b.连接不到docker的构建服务在操作系统中环境变量设置也不生效 我头大怎么去连接本地的docker构建了呢哦我忘记设置了DOCKER_HOST。我连接到服务器设置了系统的变量回来还是同样的错误。怎么理解呢Jenkins启动在先操作系统变量设置在后Jenkins估计不具备实时读取操作系统环境变量的功能所以这种情况下还是失败了。估计重启是好使的。但是我不行重启呢 c.连接不到docker的构建服务在Jenkins中环境变量生效了 按照下面3个图片实现了设置。 执行就不报错了。关键内容如下
[INFO] Step 1/6 : FROM docker.io/majiajue/jdk1.8
[INFO]
[INFO] Pulling from majiajue/jdk1.8
[INFO] Digest: sha256:fc684fe12c95aac86ef506f5a2bc2ec8fa411cdf7f34165f51a0275076dedcb4
[INFO] Status: Image is up to date for majiajue/jdk1.8:latest
[INFO] --- 2be3cc30c33f
[INFO] Step 2/6 : ENV ENV LC_ALL zh_CN.UTF-8
[INFO]
[INFO] --- Using cache
[INFO] --- 30161b4581a1
[INFO] Step 3/6 : ENV BASE_PATH/usr/local/app/
[INFO]
[INFO] --- Using cache
[INFO] --- be747d0679df
[INFO] Step 4/6 : RUN mkdir -p ${BASE_PATH}
[INFO]
[INFO] --- Using cache
[INFO] --- 7b513e464747
[INFO] Step 5/6 : COPY target/elegant-docker.jar ${BASE_PATH}/hello-docker.jar
[INFO]
[INFO] --- 3e45fa23fd89
[INFO] Step 6/6 : ENTRYPOINT java -Dfile.encodingUTF8 -Dsun.jnu.encodingUTF8 -jar ${BASE_PATH}/hello-docker.jar
[INFO]
[INFO] --- Running in 466a556c8aeb
[INFO] --- Removed intermediate container 466a556c8aeb
[INFO] --- 4fca4234ccf2
[INFO] [Warning] One or more build-args [JAR_FILE] were not consumed
[INFO] Successfully built 4fca4234ccf2
[INFO] Successfully tagged cn.scantt/elegant-docker:0.0.1-SNAPSHOT
[INFO]
[INFO] Detected build of image with id 4fca4234ccf2
[INFO] Building jar: C:\Users\Administrator\.jenkins\workspace\elegant-docker\target\elegant-docker-docker-info.jar
[INFO] Successfully built cn.scantt/elegant-docker:0.0.1-SNAPSHOT
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
四.总结 思路清晰实现了我们的目标。过程虽然遇到了问题但都轻松的解决了。展开学习的就太多了大家努力吧。比如Jenkins的安装及插件安装、gitlab环境搭建、git与开发工具的结合使用、maven生命周期与插件关系。希望能帮助到初学者