@@ -162,7 +162,7 @@ docker save -o node22.tar node:22
162162scp -P 2222 node22.tar root@152.22.3.186:/home/docker-images
163163` ` `
164164
165- Pipeline 脚本中使用 Docker nodejs 20 运行
165+ Pipeline 脚本中使用 Docker nodejs 20 运行示例
166166
167167` ` ` groovy
168168pipeline {
@@ -185,7 +185,7 @@ pipeline {
185185
186186 // 本地需要上传的目录 以及远程服务器的目录
187187 def localDir = "${WORKSPACE}/h5_vip/test_dir/"
188- def vip_host = '106.53.119.240 '
188+ def vip_host = '152.22.3.186 '
189189 def vip_remote_dir = "/mnt/mall/h5"
190190 }
191191 stages {
@@ -232,11 +232,11 @@ pipeline {
232232 rm -rf test_dir
233233 mv dist test_dir
234234 '''
235- withCredentials([sshUserPrivateKey(credentialsId: 'bd6f00e6- 9dfd-4fd5-b94b-7559ca212e9a', keyFileVariable: 'SSH_KEY')]) {
235+ withCredentials([sshUserPrivateKey(credentialsId: '9dfd-4fd5-b94b-7559ca212e9a', keyFileVariable: 'SSH_KEY')]) {
236236 // 连接到远程服务器并删除 test_dir 目录 重新上传
237237 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}
240240 '''
241241 }
242242 break
@@ -263,4 +263,156 @@ pipeline {
263263 }
264264 }
265265}
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 root@106.55.8.163:/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+ }
266418` ` `
0 commit comments