gitee+jenkins+docker+harbor实现自动化部署(第二版)

CICD部署文档

在这里插入图片描述
Jenkins和harbor均采用docker镜像部署,ssh环境已默认打通,详细过程省略,本文主要记录不同版本的jenkins配置,详细请转https://blog.csdn.net/zkzsq/article/details/128059660

复制文件到jenkins容器中:

1)docker ps
2)docker inspect -f '{{.ID}}'  c46c54383e56   # 获取长id
3)docker cp   本地路径 容器长ID:容器路径
例:
docker cp /iids/docker-compose c46c54383e56f84115d5736f2cb8ff5f283138625a5ab41cc910668a95d3d7bb:/iids/docker-compose

从容器中复制文件到宿主机:

docker cp jenkins:/iids/docker-compose/ /iids/

准备jenkinsfile

放在git上,jenkins拉取下来执行

def iids_project_url="https://gitee.com/mrzhouk/iids.git"
def iids_algorithm_url="https://gitee.com/mrzhouk/iids-algorithm.git"
def gitee_auth="0d1b9c58-08d1-4061"
//构建版本名称
def version ="${version}"
//harbor私服地址
def harbor_url="172.18.99.999:8000"
//harbor的项目名称
def harbor_project_name="iids"
def habor_auth="1199675c-5981-4f47-b2e7"

def project_names = "${project_name}"
def workspace="/var/jenkins_home/workspace/iids-show"
def nacos_config="${nacos}"


node {
    def mvnHome

    stage('1.拉取iids代码') {
             checkout([$class: 'GitSCM', branches: [[name: '*/master']],
                   doGenerateSubmoduleConfigurations: false, extensions: [],
                   submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${gitee_auth}",
                   url: "${iids_project_url}"]]])
            }

    stage('2.构建代码') {
            echo "编译common"
            sh "mvn clean install -f ${workspace}/iids-flat-common/pom.xml -Dmaven.test.skip=true"
            echo "编译common-model"
            sh "mvn clean install -f ${workspace}/iids-flat-common-model/pom.xml -Dmaven.test.skip=true"
            echo "编译common-api"
            sh "mvn clean install -f ${workspace}/iids-flat-common-api/pom.xml -Dmaven.test.skip=true"

         for(project_name_item in project_names.tokenize(',')){
               echo "${project_name_item}"
            if(project_name_item!='iids-flat-algorithm'){
               sh "mvn clean package -f ${workspace}/${project_name_item}/pom.xml -Dmaven.test.skip=true"
            }
          }

       }

      stage('3.拉取iids_flat_algorithm代码') {
                     checkout([$class: 'GitSCM', branches: [[name: '*/master']],
                           doGenerateSubmoduleConfigurations: false, extensions: [],
                           submoduleCfg: [], userRemoteConfigs: [[credentialsId: "${gitee_auth}",
                           url: "${iids_algorithm_url}"]]])
           }

      //提前准备dockerfile
      stage('4.复制jar包到dockerfile处') {
            for(project_name_item in project_names.tokenize(',')){
               if(project_name_item=='iids-flat-algorithm'){
               echo "复制算法文件"
                 sh "cp -r ${workspace}/IIDS.Algorithm.WebAPI/bin/publish/ /iids/docker-compose/iids-flat-algorithm/publish/"
                 //提前准备appsettings.json文件存放在docker-compose目录下,该条命令用于更新代码后替换该文件
                 sh "cp -r /iids/docker-compose/appsettings.json /iids/docker-compose/iids-flat-algorithm/publish/"
               }else{
                sh "cp ${workspace}/${project_name_item}/target/${project_name_item}.jar /iids/docker-compose/${project_name_item}/"
                }
            }


      }

     stage('5.打包镜像') {
           for(project_name_item in project_names.tokenize(',')){
              echo "我进来了"
              sh " docker build -t ${harbor_url}/${harbor_project_name}/${project_name_item}:${version} /iids/docker-compose/${project_name_item}/"
              }

       }


      stage('6.镜像上传') {
          withCredentials([usernamePassword(credentialsId: '03a33ce9-e69a-4560-9a25-828a61dc9523',   passwordVariable: 'password', usernameVariable: 'username')]) {
                 // 登陆
                 sh "docker login -u ${username} -p ${password} ${harbor_url}"
                 //上传镜像
                 for(project_name_item in project_names.tokenize(',')){
                  echo "上传镜像"
                  echo "${project_name_item}"
                  sh "docker push ${harbor_url}/${harbor_project_name}/${project_name_item}:${version}"
                  echo "删除镜像"
                  sh "docker rmi -f ${harbor_url}/${harbor_project_name}/${project_name_item}:${version}"
                 }

           }

      }

       stage('7.远程发布') {


       for(project_name_item in project_names.tokenize(',')){
                   echo "我进来拉取镜像了"
                   def docker_image = "${harbor_url}/${harbor_project_name}/${project_name_item}"
                   echo "$docker_image"
                   echo "$version"
                   echo "$project_name_item"
                   echo "$harbor_url"

                   sshPublisher(publishers: [sshPublisherDesc(configName: 'iids_show',
                   transfers: [sshTransfer(cleanRemote: false, excludes: '',
                   execCommand:"/iids/depoly.sh $docker_image $version $project_name_item $harbor_url", execTimeout: 240000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')],
                   usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                  }

       }




}

准备dockerfile

java应用

FROM openjdk:8u292-jre-slim

VOLUME /temp

ENV JVM_OPS="-Xms256m -Xmx256m -XX:PermSize=512M -XX:MaxPermSize=512m"

ENV JAVA_OPS=""

ENV ACTIVE=""

ADD iids-app-push.jar iids-app-push.jar

ENTRYPOINT ["java","-jar","-Dspring.cloud.nacos.discovery.server-addr=172.18.99.999:8848","-Dspring.cloud.nacos.discovery.namespace=52a24e95-3e1c-4b98-","-Dspring.cloud.nacos.config.server-addr=172.18.99.999:8848","-Dspring.cloud.nacos.config.namespace=52a24e95-3e1c-4b98-965e","-Dspring.profiles.active=show","-Dspring.cloud.inetutils.preferred-networks=12.16.240","-Dspring.cloud.nacos.config.group=DEFAULT_GROUP","/iids-app-push.jar"]

ENV TZ=Asia/Shanghai
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone


#编译命令
# docker build -t iids-flat-adm:1.0.1 .

#删除容器
# docker rm -f iids-flat-adm

#删除虚悬镜像none
# docker rmi $(docker images -q -f dangling=true)

#启动命令
# docker run -d --network host --restart=always --name iids-flat-adm iids-flat-adm:1.0.1

#查看日志
# docker logs -f -t --tail=100 iids-flat-adm

C#应用

FROM mcr.microsoft.com/dotnet/aspnet:5.0

COPY . /publish
WORKDIR /publish
#EXPOSE 80
CMD ["dotnet", "./publish/IIDS.Algorithm.WebAPI.dll"]

#导出
# docker save iids-flat-algorithm:1.0.0 | gzip > iids-flat-algorithm-1.0.0.tar.gz
# docker save > iids-flat-algorithm.tar iids-flat-algorithm:1.0.0
#导入
# docker load --input iids-flat-algorithm.tar.gz

准备部署脚本

4.准备部署脚本

上传到应用服务器/iids/depoly.sh

#! /bin/sh
#接收外部参数
#镜像名称
docker_image=$1
#镜像版本号
version=$2
#容器名称
project_name_item=$3
#harbor地址
harbor_url=$4

echo "$docker_image"
echo "$image_version"

#查询容器是否存在,存在则删除 
containerId=`docker ps -a | grep -w ${project_name_item} | awk '{print $1}'` 
if [ "$containerId" != "" ] ; then 
	#停掉容器 
	docker stop $containerId 
	#删除容器 
	docker rm $containerId 
	echo "成功删除容器" 
fi

#查询镜像是否存在,存在则删除 
imageId=`docker images | grep -w ${docker_image} | awk '{print $3}'` 
if [ "$imageId" != "" ] ; then 
	#删除镜像 
	docker rmi -f $imageId 
	echo "成功删除镜像" 
fi

echo "登陆harbor"
sudo docker login -u admin -p admin $harbor_url
echo "拉取镜像"
docker pull $docker_image:$version
echo "启动容器"
docker run -d  -v /iids/logs/:/logs/ --name $project_name_item $docker_image:$version 

日志目录:/iids/logs/

jenkins配置

1)下载复选框插件
在这里插入图片描述
2)配置参数化构建:
在这里插入图片描述
版本号:
在这里插入图片描述
3)自定义参数构建
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值