@@ -162,7 +162,7 @@ docker save -o node22.tar node:22
162
162
scp -P 2222 node22.tar [email protected] :/home/docker-images
163
163
` ` `
164
164
165
- Pipeline 脚本中使用 Docker nodejs 20 运行
165
+ Pipeline 脚本中使用 Docker nodejs 20 运行示例
166
166
167
167
` ` ` groovy
168
168
pipeline {
@@ -185,7 +185,7 @@ pipeline {
185
185
186
186
// 本地需要上传的目录 以及远程服务器的目录
187
187
def localDir = "${WORKSPACE}/h5_vip/test_dir/"
188
- def vip_host = '106.53.119.240 '
188
+ def vip_host = '152.22.3.186 '
189
189
def vip_remote_dir = "/mnt/mall/h5"
190
190
}
191
191
stages {
@@ -232,11 +232,11 @@ pipeline {
232
232
rm -rf test_dir
233
233
mv dist test_dir
234
234
'''
235
- withCredentials([sshUserPrivateKey(credentialsId: 'bd6f00e6- 9dfd-4fd5-b94b-7559ca212e9a', keyFileVariable: 'SSH_KEY')]) {
235
+ withCredentials([sshUserPrivateKey(credentialsId: '9dfd-4fd5-b94b-7559ca212e9a', keyFileVariable: 'SSH_KEY')]) {
236
236
// 连接到远程服务器并删除 test_dir 目录 重新上传
237
237
sh '''
238
- ssh -i ${SSH_KEY} -o StrictHostKeyChecking=no root@106.53.119.240 "rm -rf /mnt/mall/h5/test_dir"
239
- scp -i ${SSH_KEY} -o StrictHostKeyChecking=no -P 22 -r "${localDir}" root@106.53.119.240 :${vip_remote_dir}
238
+ ssh -i ${SSH_KEY} -o StrictHostKeyChecking=no root@152.22.3.186 "rm -rf /mnt/mall/h5/test_dir"
239
+ scp -i ${SSH_KEY} -o StrictHostKeyChecking=no -P 22 -r "${localDir}" root@152.22.3.186 :${vip_remote_dir}
240
240
'''
241
241
}
242
242
break
@@ -263,4 +263,156 @@ pipeline {
263
263
}
264
264
}
265
265
}
266
+ ` ` `
267
+
268
+ # # Java 环境
269
+
270
+ 基于 `openjdk:11` 创建一个包含 `Maven` 的自定义 Docker 镜像
271
+
272
+ ` ` ` dockerfile
273
+ FROM --platform=linux/amd64 openjdk:11
274
+
275
+ # 安装 Maven 3.8.7
276
+ ENV MAVEN_VERSION=3.8.7
277
+ RUN apt-get update && apt-get install -y wget tar \
278
+ && wget https://archive.apache.org/dist/maven/maven-3/${MAVEN_VERSION}/binaries/apache-maven-${MAVEN_VERSION}-bin.tar.gz \
279
+ && tar xzf apache-maven-${MAVEN_VERSION}-bin.tar.gz -C /opt \
280
+ && ln -s /opt/apache-maven-${MAVEN_VERSION} /opt/maven \
281
+ && rm apache-maven-${MAVEN_VERSION}-bin.tar.gz
282
+
283
+ # 设置 Maven 环境变量
284
+ ENV MAVEN_HOME=/opt/maven
285
+ ENV PATH="${MAVEN_HOME}/bin:${PATH}"
286
+
287
+ # 创建非 root 用户并设置权限
288
+ RUN useradd -u 1000 -ms /bin/bash jenkins \
289
+ && mkdir -p /home/jenkins/.m2/repository \
290
+ && chown -R jenkins:jenkins /home/jenkins/.m2
291
+
292
+ # 切换到非 root 用户
293
+ USER jenkins
294
+
295
+ # 验证 Maven 版本
296
+ RUN mvn -version
297
+ ` ` `
298
+
299
+ 构建 `openjdk` 新的镜像,命名为 `my-openjdk-maven`
300
+
301
+ ` ` ` sh
302
+ docker build -t my-openjdk-maven:3.8.7 .
303
+ # 保存 Docker 镜像到本地文件
304
+ docker save -o my-openjdk-maven.3.8.7.tar my-openjdk-maven:3.8.7
305
+ docker save -o my-openjdk-maven.3.8.8.tar my-openjdk-maven:3.8.8
306
+ # 上传到服务器
307
+ scp -P 2222 my-openjdk-maven.3.8.7.tar [email protected] :/home/docker-images
308
+ ` ` `
309
+
310
+ 加载 docker 自定义镜像
311
+
312
+ ` ` ` sh
313
+ docker load -i ./my-openjdk-maven.3.8.7.tar
314
+ ` ` `
315
+
316
+ 这事缓存下载的 maven 的包
317
+
318
+ ` ` ` sh
319
+ docker run -it --rm my-openjdk-maven:3.8.7 /bin/bash
320
+ # 在【容器】内运行
321
+ id jenkins
322
+ # uid=1000(jenkins) gid=1000(jenkins) groups=1000(jenkins)
323
+ # 在【宿主机】上使用这些 ID 来更改目录的拥有者
324
+ sudo chown -R 1000:1000 /root/.m2/
325
+ # 将目录权限设置为可读写
326
+ sudo chmod -R 777 /root/.m2/
327
+ ` ` `
328
+
329
+ Pipeline 脚本中使用 Docker java `openjdk:11` & `maven.3.8.7` 运行示例
330
+
331
+ ` ` ` groovy
332
+ pipeline {
333
+ agent {
334
+ docker {
335
+ image 'my-openjdk-maven:3.8.7'
336
+ // 将 Maven 的本地仓库挂载到容器的 /root/.m2 路径,
337
+ // 确保你每次构建时都能重用之前下载的依赖
338
+ args '-v /root/.m2:/home/jenkins/.m2:rw'
339
+ }
340
+ }
341
+ environment {
342
+ def git_url="http://106.55.8.163:8081/mall/springboot-mall.git"
343
+ def git_auth = "211ca2-55c4f199-4b15-b087-238db80b102d"
344
+ def git_branch = "${branch}"
345
+ def project_env = "${project_env}"
346
+ def vip_host = '152.22.3.186'
347
+ def vip_remote_dir = "/mnt/mall/admin"
348
+ }
349
+ stages {
350
+ stage('Git Checkout') {
351
+ steps {
352
+ echo 'check git'
353
+ checkout([
354
+ $class: 'GitSCM',
355
+ branches: [[name: "${git_branch}" ]],
356
+ doGenerateSubmoduleConfigurations: false,
357
+ extensions: [
358
+ // 只拉取最新的提交
359
+ [$class: 'CloneOption', depth: 1, shallow: true, noTags: true]
360
+ ],
361
+ submoduleCfg: [],
362
+ userRemoteConfigs: [[
363
+ credentialsId: "${git_auth}",
364
+ url: "${git_url}"
365
+ ]]
366
+ ])
367
+ }
368
+ }
369
+ stage('Manven Build') {
370
+ steps {
371
+ /**
372
+ * 执行maven打包
373
+ * -B --batch-mode 在非交互(批处理)模式下运行(该模式下,当Mven需要输入时,它不会停下来接受用户的输入,而是使用合理的默认值)
374
+ * 打包时跳过JUnit测试用例
375
+ * -DskipTests 不执行测试用例,但编译测试用例类生成相应的class文件至target/test-classes下
376
+ * -Dmaven.test.skip=true,不执行测试用例,也不编译测试用例类
377
+ **/
378
+ sh "cd ${WORKSPACE} ; mvn clean package -Dmaven.test.skip=true -Dmaven.repo.local=/home/jenkins/.m2/repository -U"
379
+ }
380
+ }
381
+ stage('Send Files') {
382
+ when {
383
+ expression {
384
+ currentBuild.result == null || currentBuild.result == 'SUCCESS'
385
+ }
386
+ }
387
+ steps {
388
+ script {
389
+ switch (project_env) {
390
+ case "pro":
391
+ // 部署服务器 SSH 凭据,验证登录用,才可以 ssh 和 scp 上传等功能
392
+ withCredentials([sshUserPrivateKey(credentialsId: 'bd6f00e69dfd-4fd5-b94b-7559ca212e9a', keyFileVariable: 'SSH_KEY')]) {
393
+ // 连接到远程服务器并删除 admin 目录 重新上传
394
+ sh '''
395
+ scp -i ${SSH_KEY} -o StrictHostKeyChecking=no -r -P 22 '${WORKSPACE}/admin/target/lib' 'root@${vip_host}:${vip_remote_dir}'
396
+ scp -i ${SSH_KEY} -o StrictHostKeyChecking=no -r -P 22 '${WORKSPACE}/admin/target/admin-2.3.jar' 'root@${vip_host}:${vip_remote_dir}'
397
+ ssh -i ${SSH_KEY} -o StrictHostKeyChecking=no root@${vip_host} '/mnt/sh/admin-8000.sh restart;'
398
+ '''
399
+ }
400
+ break
401
+ case "dev":
402
+
403
+ break
404
+ }
405
+ }
406
+ }
407
+ }
408
+ }
409
+ post {
410
+ success {
411
+ sh "echo 'Success success'"
412
+ }
413
+ failure {
414
+ sh "echo 'Faild faild'"
415
+ }
416
+ }
417
+ }
266
418
` ` `
0 commit comments