jenkins部署docker api项目配置

   在现在流行的docker环境下,我们应用到部署环境时间比较晚,还有很多优化的工作需要去做,在自己的服务器做了一个harbor仓库,方便推送和下载docker镜像

在做这个jobs之前需要安装docker和部署harbor服务器,在以上博文我有详细介绍,可以去参考

一、针对代码部分的修改

1、修改mvn的settings.xml文件,ID会被代码下的pom.xml调用

vim /usr/share/maven/conf/settings.xml
    <server>
           <id>docker-harbor</id>
           <username>admin</username>
           <password>Song2022</password>
        </server>

2、pom.xml文件添加maven插件

vim pom.xml  ####代码当前目录下pom

    <build>
        <finalName>envirment</finalName>
        <!--设置打包名称用于便于部署-->        
          <plugins>
            <plugin>
                <groupId>com.spotify</groupId>
                <artifactId>docker-maven-plugin</artifactId>
                <version>1.0.0</version>
                <configuration>
                    <imageName>192.168.2.252/song/${artifactId}</imageName>
<!--这里是harbor仓库里的具体位置-->
                    <imageTags>
                        <tag>211111</tag> <!--指定镜像的版本,这个可以在这里手动编写,也可以在打包的时候指定,我选择在打包时指定git版本号。-->
                    </imageTags>
                    <baseImage>java</baseImage>  
                    <entryPoint>["java","-jar","environmen-0.0.1-SNAPSHOT.jar"]</entryPoint>  <!--这里指定jar运行的命令参数,也可以编写一个Dockerfile文件写明-->
                    <resources>
                        <resource>
                            <targetPath>/</targetPath>
                            <directory>${project.build.directory}</directory>
                            <include>environmen-0.0.1-SNAPSHOT.jar</include>
                        </resource>
                    </resources>
                    <serverId>docker-harbor</serverId>     <!--在上面setting.xml中设置的id-->
                    <forceTags>true</forceTags>  <!--重复构建相同镜像则覆盖镜像-->
                </configuration>
           </plugin>
        </plugins>
    </build>

二、Jenkins配置信息

1、 buile界面,可以配置发布、回滚、重启,选择分支,

这里的回滚是git版本号,到harbor仓库自动拉取

2、配置参数化构建过程

 3、代码库地址

 4、环境变量配置,方便调用

IMAGE_NAME:song 平台项目分类     envirment以具体项目名区分(容器名)

 5、shell构建

分为两部分:

第一部分:如果build为deploy发版则先判断git版本号是否变化,如没变化则没有发版必要,停止

第二部分:打包jar包推送到harbor


#操作校验
if [ ${deploy_env} = "deploy" ];then
    echo -e "\033[34mstart ${deploy_env}\033[0m"
    echo ${GIT_PREVIOUS_SUCCESSFUL_COMMIT}
    echo ${GIT_COMMIT}
    [ ${GIT_PREVIOUS_SUCCESSFUL_COMMIT} != ${GIT_COMMIT} ] && echo -e "\033[34mstart maven package\033[0m" || {
        #版本未更新,停止发版
        echo -e "\033[31m代码没有更新,停止发版\033[0m"
        exit 1
    }
   #######打包镜像并推送到本地仓库
    mvn clean package docker:build -DdockerImageTags=${GIT_COMMIT} -DpushImageTag
    [ $? -eq 0 ] && echo -e "\033[32mmaven打包成功033[0m" || {
    	echo -e "\033[31mmaven 打包失败\033[0m"
    	exit 1
    } 
fi

 6、远程服务器进行docker部署

 

#!/bin/bash
 
CONTAINER_NAME=`echo ${IMAGE_NAME} | awk -F /  '{print $2}'`
 
#启动容器
START() {
    echo -e "\033[34mstart ${CONTAINER_NAME}\033[0m"
    docker start ${CONTAINER_NAME}
    [ $? -eq 0 ] && echo -e "\033[32m启动 ${CONTAINER_NAME} 成功 \033[0m" || { 
        echo -e "\033[31m启动 ${CONTAINER_NAME} 失败\033[0m"
        exit 1
    }
}
 
#停止容器
STOP() {
    echo -e "\033[34m停止 ${CONTAINER_NAME}\033[0m"
    docker stop ${CONTAINER_NAME}
    [ $? -eq 0 ] && echo -e "\033[32m停止 ${CONTAINER_NAME} 成功 \033[0m" || { 
        echo -e "\033[31m停止 ${CONTAINER_NAME} 失败\033[0m"
        exit 1
    }
 
}
 
#删除容器
DEL_CONTAINER() {
    echo -e "\033[34mrm  container ${CONTAINER_NAME}\033[0m"
    docker rm ${CONTAINER_NAME} -v 
    [ $? -eq 0 ] && echo -e "\033[32m删除 ${CONTAINER_NAME} 成功\033[0m" || { 
        echo -e "\033[31m删除 ${CONTAINER_NAME} 失败\033[0m"
        exit 1
    }
}
 
#删除镜像
DEL_IMAGE() {
    echo -e "\033[34mrm image ${IMAGE_NAME}\033[0m"
    docker image rm `docker image ls 192.168.2.252/${IMAGE_NAME} -q`  --no-prune
    [ $? -eq 0 ] && echo -e "\033[32m删除 ${IMAGE_NAME} 成功\033[0m" || { 
        echo -e "\033[31m删除 ${IMAGE_NAME} 失败\033[0m"
        exit 1
    }
}
 
#登录harbor
LOGIN_HARBOR() {
    echo -e "\033[34m登录harbor\033[0m"
    docker login 192.168.2.252
    [ $? -eq 0 ] && echo -e "\033[32m登录harbor成功\033[0m" || {
        echo -e "\033[31m登录harbor失败\033[0m"
        exit 1
    }
}
 
#拉取镜像
PULL() {
    docker pull 192.168.2.252/${IMAGE_NAME}:$1
    [ $? -eq 0 ] && echo -e "\033[32m拉取镜像成功\033[0m" || {
        echo -e "\033[31m拉取镜像失败\033[0m"
        exit 1
    } 
}
 
#运行容器
RUN() {
    docker run -id -p 8098:8098 --name=${CONTAINER_NAME} 192.168.2.252/${IMAGE_NAME}:$1
    [ $? -eq 0 ] && echo -e "\033[32m运行${CONTAINER_NAME} success\033[0m" || {
        echo -e "\033[31m运行${CONTAINER_NAME} fail\033[0m"
        exit 1
    }
}
 
case ${deploy_env} in
deploy)
    echo -e "\033[34mstart docker steps\033[0m"
    LOGIN_HARBOR
    STOP
    DEL_CONTAINER
    PULL ${GIT_COMMIT}
    RUN ${GIT_COMMIT}
    ;;
rollback)
    LOGIN_HARBOR
    STOP
    DEL_CONTAINER
    DEL_IMAGE
    PULL $version
    RUN $version
    ;;
restart)
    STOP
    START
    ;;
*)
    exit 1
    ;;
esac

发版步骤:

1、登录harbor仓库

2、停止容器(若是首次部署,需要注释掉)

3、删除容器(若是首次部署,需要注释掉)

4、下载项目镜像

5、运行容器

回滚步骤:

1、登录harbor仓库

2、停止容器

3、删除容器

4、删除镜像

5、下载项目镜像

6、运行容器

回滚步骤:

1、重启容器

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
前端部署docker实现CI/CD,可以按照以下步骤进行: 1. 确保开发环境中已经安装了Docker和相关的工具。安装Docker后,可以在本地开发环境中创建和管理容器。 2. 创建一个包含前端项目Docker镜像。可以通过编写一个Dockerfile来定义Docker镜像的构建过程。该文件可以指定使用的基础镜像、构建过程中需要执行的命令以及将前端项目中的文件复制到镜像中的目标路径。 3. 使用Docker Compose编写一个包含前端容器和其他所需服务(如后端API服务、数据库等)的配置文件。该文件可以定义容器之间的依赖关系和其他配置参数。 4. 创建一个CI/CD流水线。可以使用流行的CI/CD工具(如Jenkins、Travis CI、GitLab CI等)来创建一个CI/CD流水线。在流水线中,可以配置前端项目的构建、测试和部署步骤。在构建步骤中,可以使用前面创建的Docker镜像来构建前端应用程序。在测试和部署步骤中,可以使用Docker Compose来启动容器并进行测试和部署。 5. 将代码推送到代码版本控制系统中,并触发CI/CD流水线。当代码推送到代码仓库中时,CI/CD流水线将自动触发,并自动构建、测试和部署前端应用程序。 6. 在部署阶段,可以使用Docker Swarm或Kubernetes等容器编排工具来部署前端应用程序。这些工具可以根据定义在Docker Compose文件中的服务配置来启动和管理容器。 通过使用Docker部署前端应用程序,可以实现应用程序的快速部署、可移植性和可伸缩性,并且能够保证在不同的环境中具有相同的行为。同时,借助CI/CD流水线,可以自动化地进行构建、测试和部署,并提高开发团队的工作效率和应用程序的质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

三颗草丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值