如何在智能告警平台CA触发测试告警
703
2022-11-05
k8s部署-29-k8s与cicd持续集成、交付、部署的总流程(四)
构建image
配置流水线
pipeline { agent any stages { stage('Build') { steps { // Get some code from a GitHub repository git "https://gitee.com/xuexi100/yanshi.git" sh "cd springboot; mvn clean; mvn package" } } stage('build-images') { steps { sh "/root/script/build-image-springboot.sh" } } }}
可以看到我们上面是欲打算使用一个脚本来进行构建的,那么我们就来书写下这个脚本吧,首先我们先理一下思路。
目录确定
首先明确下我们这个脚本不是一次性的,而是一个基础模板,那么第一步就需要解决这个问题,我们的工作目录是哪儿,这样子是不是最好能定义一个环境变量呢?但是有个问题,最开始我们使用的是“gitlab+maven”,我们现在要改成“Scripted Pipeline”,这样子更加适用于我们这个过程。
其实就是新建了一个流水线,名字我们叫“deploy-springboot”吧,添加环境变量之后,内容如下:
node { env.BUILD_DIR = "/root/script/namespace" stage('Git') { // for display purposes git "https://gitee.com/xuexi100/yanshi.git" } stage('Maven') { sh "cd springboot; mvn clean; mvn package" } stage('build-image') { sh "sh root/script/build-springboot.sh" }}
书写脚本
[root@node1 ~]# mkdir -p root/script/namespace[root@node1 ~]# cd /root/script/[root@node1 script]# vim build-springboot.sh #!/bin/bash# 判断目录是否存在if [ "${BUILD_DIR}" == "" ];then echo "env 'BUILD_DIR' is not ready" exit 1fi# 指定docker的工作目录Docker_Dir=${BUILD_DIR}/${JOB_NAME}# 创建docker的工作目录if [ ! -d ${Docker_Dir} ];then mkdir -pv ${Docker_Dir}fiecho "docker workspace : ${Docker_Dir}"[root@node1 script]#
文件拿取
接下来是不是应该把构建的文件拿过来了,同样的,我们需要定义个环境变量,于是修改流水线配置如下:
node { env.BUILD_DIR = "/root/script/namespace" env.MODEL = "springboot" stage('Git') { for display purposes git "https://gitee.com/xuexi100/yanshi.git" } stage('Maven') { sh "cd ${MODEL}; mvn clean; mvn package" } stage('build-image') { sh "sh root/script/build-springboot.sh" }}
然后我们接着修改脚本内容如下:
#!/bin/bash# 判断目录是否存在if [ "${BUILD_DIR}" == "" ];then echo "env 'BUILD_DIR' is not ready" exit 1fi# 指定docker的工作目录Docker_Dir=${BUILD_DIR}/${JOB_NAME}# 创建docker的工作目录if [ ! -d ${Docker_Dir} ];then mkdir -pv ${Docker_Dir}fiecho "docker workspace : ${Docker_Dir}"Jenkins_Dir=${WORKSPACE}/${MODEL}echo "Jenkins workspace : ${Jenkins_Dir}"# 判断文件是否存在if [ ! -f ${Jenkins_Dir}/target/*.jar ];then echo "target jar file not found ${Jenkins_Dir}/target/*.jar" exit 1fi# 切换到docker工作目录cd ${Docker_Dir}# 删除里面的内容,有可能有脏数据rm -rf *# 移动jar包到当前目录mv ${Jenkins_Dir}/target/*.jar .
构建镜像
再接着是不是就该创建镜像了并上传了呢?创建镜像就需要一个Dockerfile,我们该把这个Dockerfile放置到哪里呢?我们放置到代码中是不是会比较好呢?那么下来我们就放进去,然后进行构建镜像吧。
PS:这个dockerfile和我们之前的一样哈,并无特殊配置。
整体目录如下:
然后修改脚本如下:
#!/bin/bash# 判断目录是否存在if [ "${BUILD_DIR}" == "" ];then echo "env 'BUILD_DIR' is not ready" exit 1fi# 指定docker的工作目录Docker_Dir=${BUILD_DIR}/${JOB_NAME}# 创建docker的工作目录if [ ! -d ${Docker_Dir} ];then mkdir -pv ${Docker_Dir}fiecho "docker workspace : ${Docker_Dir}"Jenkins_Dir=${WORKSPACE}/${MODEL}echo "Jenkins workspace : ${Jenkins_Dir}"# 判断文件是否存在if [ ! -f ${Jenkins_Dir}/target/*.jar ];then echo "target jar file not found ${Jenkins_Dir}/target/*.jar" exit 1fi# 切换到docker工作目录cd ${Docker_Dir}# 删除里面的内容,有可能有脏数据rm -rf *# 移动jar包到当前目录mv ${Jenkins_Dir}/target/*.jar .# 移动Dockerfile到当前目录mv ${Jenkins_Dir}/Dockerfile .# 设定image的版本号和名字Image_Version=$(date +%Y%m%d%H%M%S)Image_Name=registry.cn-beijing.aliyuncs.com/yunweijia0909/${JOB_NAME}:${Image_Version}echo "building image : ${Image_name}"# 再次确定当前目录Now_Dir=$(pwd)echo "now dir : ${Now_dir}"# 构建镜像docker build -t ${Image_Name} .# 上传镜像docker push ${Image_Name}
测试结果
测试下是否正常:
# 一定要记得给咱们的脚本添加可执行权限哈[root@node1 script]# chmod +x build-springboot.sh
在jenkins上“Build now”,看下结果。
然后我们登录仓库,看下是否上传上来了。
可以看到一切都很顺利哈。
至此,本文结束,明天将是cicd最后一篇了,当然了,咱们k8s的结束,还为时尚早。
往期推荐k8s部署-20-k8s的服务发现原理,k8s有几种服务发现规则五分钟学会linux磁盘共享之nfs技术docker下载镜像加速
发表评论
暂时没有评论,来抢沙发吧~