网站首页 > 博客文章 正文
pipeline测试实例及技巧(三)
一:一个项目有多个模块
mvn clean package -pl ${program}
-pl:在一个项目有多个模块,而又不想同时构建所有模块儿时,通过-pl参数指定要构建的模块儿
二:jenkins集成Gitlab-拉取代码
密钥对的生成
sh-keygen命令,可以生成公钥和私钥,默认生成到用户的家目录下的.ssh文件夹里面
示例:ssh-keygen -t rsa -C "meng@163.com"
私钥默认会被保存在 ~/.ssh/id_rsa
公钥默认会被保存在 ~/.ssh/id_rsa.pub
参数解析:
-f 指定要生成文件的文件名称
-t 设置认定方式,值为rsa,即非对称加密;或dsa,即数字签名和认证
-c 指定公钥中的备注信息。在gitlab里备注一般使用邮箱,因为像gitlab、github等都是通过邮箱来区分的,邮箱仅仅是识别用的key
附:对于Http协议登录,git可以记住首次输入的密码,后面不再输入
(1)取消全局用户名和邮箱设置
git config --global --unset user.name
git config --global --unset user.email
(2)启用git 认证保存
git config --global credential.helper store
(3)首次pull push clone需要输入密码 后面不再输入
三:配置提交代码构建触发
1.配置webhook
2.需要修改分支权限
3.#需要关闭SSL
4.#如果提示
Url is blocked: Requests to the local network are not allowed
需要在管理员选项配置
四:maven jdk 钩子配置
打包时候把每个子项目打成 jar 包,然后通过 Dockerfile 生产 docker 镜像,然后启动镜像生成容器,这就是我的部署流程
项目根目录下新增 Jenkinsfile
pipeline {
agent any
stages {
stage('package') {
agent {
docker {
image 'maven'
args '-v /root/.m2:/root/.m2 -v /data/maven/apache-maven-3.6.0/conf/settings.xml:/root/.m2/settings.xml --entrypoint='
}
}
steps {
script{
echo "WORKSPACE:${env.WORKSPACE}"
echo "Branch:${env.NODE_NAME}"
if ("${env.NODE_NAME}" == "master") {
sh "sh package-prod.sh"
}
}
}
}
stage('build') {
agent none
steps {
script{
echo "WORKSPACE:${env.WORKSPACE}"
echo "Branch:${env.NODE_NAME}"
if ("${env.NODE_NAME}" == "master") {
sh "sh build-prod.sh"
}
}
}
}
}
}
先 pull 个 maven 镜像,以及在构建镜像时候所需要的 jdk8 的镜像
# maven 用于 Jenkins 构建有 maven 环境的容器
docker pull maven
# jdk8 的镜像用于 Dockerfile 中设置构建拥有 jdk8 环境镜像的基础镜像
docker pull kdvolder/jdk8
- image 'http://docker.io/maven':基于这个镜像生成容器部署,所以环境有 maven 环境
- args 中 -v /root/.m2:/root/.m2:把依赖挂载导服务器上,不用每次打包都下依赖
- PS:首先,你要知道这个流程是如何进行的,在你根据下的那个 maven 镜像去打包时,由于内外 docker 建立了通讯,所有服务器的 docker 就会生成一个你 maven 的容器,而你的命令都会在这个容器里进行,所以这里挂载就能直接把 maven 这个临时容器里的依赖挂载到服务器上,打包的过程中,你用 docker ps 是可以看到这个 maven 容器的
- args 中 -v /data/maven/apache-maven-3.6.0/conf/settings.xml:/root/.m2/settings.xml:阿里环境配置挂进去PS踩坑:这里注意,挂载进去的 settings.xml 文件必须放在 .m2 文件夹下,不是放在 maven 的 conf 下面,那样不会生效
- --entrypoint=:配置下好像就不会打开进入容器了,没深入研究
- ${env.WORKSPACE}:工作空间路径
- ${env.NODE_NAME}:进行的分支
可以看到,我这部署先判度为 master 分支的情况下,package 任务中调用脚本进行打包,build 任务下调用脚本部署
package-prod.sh
#!/bin/sh
#进入文件根目录
#cd "$WORKSPACE"
#项目打包
mvn clean install package '-Dmaven.test.skip=true'
build-prod.sh
#!/bin/sh
#进入文件根目录
#cd "$WORKSPACE"
#启用 prod 配置
ActiveProfiles=prod
#基本信息需要配置
#内部端口
targetPort=8081
#旧镜像版本号
oldVendor=1.0.0
#镜像版本号
vendor=1.0.0
#项目名
projectName=eureka
#进入target文件夹
#直接的构建是再容器里,这个是在 Jenkins 容器里,所以空间不一样
#容器的空间是原空间路径后面多了 @2
cd $WORKSPACE@2/$projectName/target
#创建Dockerfile文件
#-jar -Duser.timezone=GMT+08 保证生成出来的容器的时区与服务器一致
cat << EOF > Dockerfile
FROM kdvolder/jdk8
MAINTAINER $projectName
VOLUME /tmp
LABEL app="$projectName" version="$vendor" by="$projectName"
COPY $projectName.jar $projectName.jar
EXPOSE $targetPort
CMD -Xmx100m -Xms100m -jar -Duser.timezone=GMT+08 $projectName.jar --spring.profiles.active=$ActiveProfiles
ENTRYPOINT java
EOF
#删除镜像下所有容器
docker rm -f $(docker ps -a | grep "$projectName" | awk '{print $1}')
#删除旧镜像
docker rmi -f $projectName:$oldVendor
#创建镜像
docker build -t $projectName:$vendor .
#启动镜像生成容器
docker run --name $projectName -d -p $targetPort:$targetPort $projectName:$vendor
猜你喜欢
- 2024-09-23 docker部署linux web运行环境笔记
- 2024-09-23 不可错过的Docker完整笔记(dockerhib)
- 2024-09-23 docker中执行指定脚本(docker 下运行springboot应用)
- 2024-09-23 Java项目要不要部署在Docker里?(java部署工具)
- 2024-09-23 Java Dockerfile 最佳实践分享(java docker部署)
- 2024-09-23 「这些都不知道你就是个弟弟」Docker常用命令
- 2024-09-23 Spring Cloud 第十一篇:docker部署spring cloud项目
- 2024-09-23 用 Docker、Gradle 来构建、运行、发布一个 Spring Boot 应用
- 2024-09-23 功能问题:如何用Docker部署一个后端项目?
- 2024-09-23 Docker系列三部署Tomcat(docker部署tomcat项目)
你 发表评论:
欢迎- 最近发表
-
- 给3D Slicer添加Python第三方插件库
- Python自动化——pytest常用插件详解
- Pycharm下安装MicroPython Tools插件(ESP32开发板)
- IntelliJ IDEA 2025.1.3 发布(idea 2020)
- IDEA+Continue插件+DeepSeek:开发者效率飙升的「三体组合」!
- Cursor:提升Python开发效率的必备IDE及插件安装指南
- 日本旅行时想借厕所、买香烟怎么办?便利商店里能解决大问题!
- 11天!日本史上最长黄金周来了!旅游万金句总结!
- 北川景子&DAIGO缘定1.11 召开记者会宣布结婚
- PIKO‘PPAP’ 洗脑歌登上美国告示牌
- 标签列表
-
- ifneq (61)
- messagesource (56)
- aspose.pdf破解版 (56)
- promise.race (63)
- 2019cad序列号和密钥激活码 (62)
- window.performance (66)
- qt删除文件夹 (72)
- mysqlcaching_sha2_password (64)
- ubuntu升级gcc (58)
- nacos启动失败 (64)
- ssh-add (70)
- jwt漏洞 (58)
- macos14下载 (58)
- yarnnode (62)
- abstractqueuedsynchronizer (64)
- source~/.bashrc没有那个文件或目录 (65)
- springboot整合activiti工作流 (70)
- jmeter插件下载 (61)
- 抓包分析 (60)
- idea创建mavenweb项目 (65)
- vue回到顶部 (57)
- qcombobox样式表 (68)
- vue数组concat (56)
- tomcatundertow (58)
- pastemac (61)
本文暂时没有评论,来添加一个吧(●'◡'●)