k8s部署-29-k8s与cicd持续集成、交付、部署的总流程(四)

网友投稿 703 2022-11-05

本站部分文章、图片属于网络上可搜索到的公开信息,均用于学习和交流用途,不能代表睿象云的观点、立场或意见。我们接受网民的监督,如发现任何违法内容或侵犯了您的权益,请第一时间联系小编邮箱jiasou666@gmail.com 处理。

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下载镜像加速

上一篇:软件测试培训之测试用例组成部分
下一篇:软件测试培训之测试用例评审结束标准
相关文章

 发表评论

暂时没有评论,来抢沙发吧~