专业的编程技术博客社区

网站首页 > 博客文章 正文

pipeline测试实例及技巧(三)(pipeline分析)

baijin 2024-09-23 03:51:19 博客文章 4 ℃ 0 评论

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

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表