欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

Jenkins使用之基于docker镜像maven编译打包发布项目

时间:2023-05-13
Jenkins使用之基于docker镜像maven编译打包发布项目

Jenkins 自动部署Maven项目

打开 Blue Ocean项目中添加`Jenkinsfile`文件

完成基本的编译与打包以远程服务器Docker进行Dockerfile编译push到gitlab时自动构建远程运行代码,启动容器

准备插件,安装好以下插件

SSH Pipeline Steps 在SSH Over Publisher 插件不能用的情况下安装,可以在远程服务器上运行命令与操作文件详细说明 https://github.com/jenkinsci/ssh-steps-plugin#pipeline-stepsGeneric Webhook Trigger Plugin 用于设置钩子,在git push 时自动触发构建,详细说明 https://github.com/jenkinsci/generic-webhook-trigger-plugin
Jenkins 自动部署Maven项目 打开 Blue Ocean 创建流水线项目
选择 git项目,填写git服务项目的URL
拷贝公钥添加的git服务器中的SSH key 中点击完成,将自动下载项目的Jenkinsfile文件 项目中添加Jenkinsfile文件

在项目中添加 Jenkinsfile文件,并且提交。Jenkins将根据该文件内容进行构建。

完成基本的编译与打包

先按照插件Docker。
在Jenkinsfile文件中添加内容如下,保证Jenkins能完成基本的包下载与打包功能。详细如下:

node {checkout scm docker.image('maven:3.6.1-jdk-13').inside('-v /root/.m2:/root/.m2') //映射文件无需每次下载包jar { stage('Build'){ sh 'pwd' sh 'java -version' sh 'mvn clean package -Dmaven.test.skip=true' sh ''' cd /root/.m2 ls -l ''' } }}

以远程服务器Docker进行Dockerfile编译

先安装插件 Docker。
在Jenkins中使用服务器运行build,前提开启服务器Docker的远程服务,可参考开启Docker远程服务,在Jenkinsfile中添加代码如下:

docker.withServer('tcp://192.168.30.248:2375'){ def cusImage=docker.build("${env.JOB_NAME}:latest",'./hitgen-appcenter-api') }

push到gitlab时自动构建

先安装插件 Generic Web Hook
在Jenkins中添加触发器,用于出发Jenkins自动构建,其代码如下:

checkout scm echo "${env.JOB_NAME}" properties([ pipelineTriggers([ [$class: 'GenericTrigger', genericVariables: [ [key: 'ref', value: '$.resource.refUpdates[0].name'], //[key: 'ref', value: '$.ref'], // [ // key: 'before', // value: '$.before', // expressionType: 'JSONPath', //Optional, defaults to JSONPath // regexpFilter: '', //Optional, defaults to empty string // defaultValue: '' //Optional, defaults to empty string // ] ], // genericRequestVariables: [ // [key: 'requestWithNumber', regexpFilter: '[^0-9]', defaultValue:'requestWithNumber_test'], // [key: 'requestWithString', regexpFilter: ''] // ], // genericHeaderVariables: [ // [key: 'headerWithNumber', regexpFilter: '[^0-9]', defaultValue:'headerWithNumber_test'], // [key: 'headerWithString', regexpFilter: ''] // ], causeString: 'Triggered on $ref', token: abc, //该值可根据实际进行修改 tokenCredentialId: '', printContributedVariables: true, printPostContent: true, silentResponse: false, regexpFilterText: '$ref', regexpFilterexpression: 'refs/heads/' + BRANCH_NAME ] ]) ])

在gitlab 选择push事件,添加 http://JENKINS_URL/generic-webhook-trigger/invoke?token=abc通知。可参考 https://docs.gitlab.com/ee/user/project/integrations/webhooks.html
在开发机器上push代码到git服务器时,将会发送通知请求到Jenkins服务器,Jenkins服务器将自动构建。

远程运行代码,启动容器

Jenkinsfile文件中添加如下代码,用于远程启动容器,如下:

stage('Startup'){ def remote = [:] remote.name = 'Java-Server' remote.host = 'xxx.xxx.xxx.xxx' remote.user = 'root' remote.password = 'yor password' remote.allowAnyHosts = true sshscript remote: remote, script: 'hitgen-appcenter-api/run.sh' //执行服务器命令}

完整代码:

node {properties([ pipelineTriggers([ [$class: 'GenericTrigger', genericVariables: [ [key: 'ref', value: '$.resource.refUpdates[0].name'], //定义变量 //[key: 'ref', value: '$.ref'], // [ // key: 'before', // value: '$.before', // expressionType: 'JSONPath', //Optional, defaults to JSONPath // regexpFilter: '', //Optional, defaults to empty string // defaultValue: '' //Optional, defaults to empty string // ] ], // genericRequestVariables: [ // [key: 'requestWithNumber', regexpFilter: '[^0-9]', defaultValue:'requestWithNumber_test'], // [key: 'requestWithString', regexpFilter: ''] // ], // genericHeaderVariables: [ // [key: 'headerWithNumber', regexpFilter: '[^0-9]', defaultValue:'headerWithNumber_test'], // [key: 'headerWithString', regexpFilter: ''] // ], causeString: 'Triggered on $ref', token: 'abc', //请求的token tokenCredentialId: '', printContributedVariables: true, printPostContent: true, silentResponse: false, regexpFilterText: '$ref', regexpFilterexpression: 'refs/heads/' + BRANCH_NAME ] ]) ])checkout scm docker.image('maven:3.6.1-jdk-13').inside('-v /root/.m2:/root/.m2') //映射文件无需每次下载包jar { stage('Package'){ sh 'pwd' sh 'java -version' sh 'mvn clean package -Dmaven.test.skip=true' sh ''' cd /root/.m2 ls -l ''' } }def remote = [:] remote.name = 'java-Server' remote.host = 'xxx.xxx.xxx.xxx' remote.user = 'root' remote.password = 'yor password' remote.allowAnyHosts = truestage('Build'){sshscript remote: remote, script: 'hitgen-appcenter-api/clean.sh' //在服务上执行clean.sh,其作用为 清理关联的容器docker.withServer('tcp://192.168.30.248:2375'){ def cusImage=docker.build("${env.JOB_NAME}:latest",'./test') //使用.test/Dockfile编译 }} stage('Startup'){ sshscript remote: remote, script: 'hitgen-appcenter-api/run.sh' //在服务上执行clean.sh,其作用为启动容器}}

完成以上步骤将可自动部署,完成容器在服务器上启动。

如有问题欢迎指正,谢谢!

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。