jenkins docker 部署-01

镜像说明

镜像ponylee/jenkins-centos7:v1.0基于jenkins/jenkins:lts-centos7-jdk8, 添加 git maven jdk8 等java部署常用的工具。同时改变运行用户jenkins为root,放大权限。

启动jenkins

  • host mode
    docker run -d \
    --network host \
    -v /data/jenkins/jenkins_home:/var/jenkins_home \
    -v /etc/localtime:/etc/localtime \
    --name jenkins \
    ponylee/jenkins-centos7:v1.0
  • bridge mode
    docker run -d \
    -p 8080:8080 \
    -p 50000:50000 \
    -v /data/jenkins/jenkins_home:/var/jenkins_home \
    -v /etc/localtime:/etc/localtime \
    --name jenkins \
    ponylee/jenkins-centos7:v1.0

jenkins配置

用到的plugins: Publish Over SSH、SSH plugin、Maven Integration、Date Parameter、和 jenkins社区推荐的插件

General

时间参数配置

依赖Date Parameter插件
在这里插入图片描述

选择参数配置

在这里插入图片描述

选丢弃旧的构建

在这里插入图片描述

源码管理

Repositories 配置

在这里插入图片描述

git Credentials 配置

  • 生成秘钥
ssh-keygen -t rsa -C "xxx@xx.com" #邮箱
git config --global user.name xxx
git config --global user.email xxx@xx.com
ssh -vT xx.github.com #验证联通性
cd ~/.ssh/
cat ~/.ssh/id_rsa.pub | clip #复制公钥
  • 上传公钥
    在这里插入图片描述
  • 配置Credentials
    Manage Jenkins -> Manage Credentials -> 全局凭据 ->添加凭据
    在这里插入图片描述

build

在这里插入图片描述

Post Steps

Send files or execute commands over SSH

在这里插入图片描述

Publish over SSH 配置

Manage Jenkins -> Configure System -> Publish over SSH

在这里插入图片描述在这里插入图片描述在这里插入图片描述

Execute shell script on remote host using ssh

在这里插入图片描述

SSH site 配置

Manage Jenkins -> Configure System -> SSH remote hosts

在这里插入图片描述

SSH remote hosts Credentials配置

Manage Jenkins -> Manage Credentials -> 全局凭据 ->添加凭据
在这里插入图片描述

build.sh脚本

构建docker 镜像并推送到镜像私服

#!/bin/bash
#build.sh
function deploy(){
  if (( $# < 2 )) ;then
      echo "Please specify images version date parameters and project . eg: [20221215150431] [xx-backend-service1|xx-backend-service2]"
      exit;
  fi

  IMAGE_VERSION=v${1}
  PROJECT=${2}

  #DATE=$(date '+%Y%m%d%H%M%S')
  IMAGE="xx.xx.xx.xx:5000/${PROJECT}:$IMAGE_VERSION" 

  echo "docker build -t $IMAGE ."

  docker build -t "${IMAGE}" .

  echo "push ${IMAGE} ... "

  docker push $IMAGE

  echo "push success!"

  mv *.jar ../jars/${PROJECT}-${1}.jar

  echo "backup jar success!"
}

function rollback(){
  rm -f *.jar
}

function printUsage(){
        echo -e "Usage: [deploy|rollback] [20221215150431] [xx-backend-service1|xx-backend-service2]"
}

case "$1" in
    (deploy)
        deploy $2 $3
    ;;
    (rollback)
        rollback
    ;;
    (*)
        printUsage
        exit 1
    ;;
esac

Dockerfile

From anapsix/alpine-java
VOLUME /tmp
ADD *.jar app.jar
RUN sh -c 'touch /app.jar'
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
ENV JAVA_OPTS="-Xms2g -Xmx2g"
#ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar" ]
CMD exec java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /app.jar

xx-start.sh 启动脚本
#!/bin/bash


function deploy() {
        if (( $# < 2 )) ;then
            echo "Please specify images version date parameters and project . eg: [20221215150431] [xx-backend-service1|xx-backend-service2]"
            exit;
        fi

        IMAGE_VERSION=v${1}
        PROJECT=${2}

        NEW_IMAGE=xx.xx.xx.xx:5000/${PROJECT}:$IMAGE_VERSION
        echo "即将部署镜像: $NEW_IMAGE"

        LAST_CONTAINER=$(sudo docker ps -a | grep ${PROJECT} | awk '{print $1}')
        #LAST_IMAGE=$(sudo docker images -a | grep ${PROJECT} | awk '{print $3}')

        echo "docker pull $NEW_IMAGE"
        docker pull $NEW_IMAGE

        if [ $? -eq 0 ]; then
                echo "镜像下载完毕"
        else
                echo "镜像下载失败,停止部署!"
                exit
        fi

        echo $LAST_CONTAINER
        #echo $LAST_IMAGE

        # stop the previous image and remove it
        if [ -n "${LAST_CONTAINER}" ]; then
            docker stop $LAST_CONTAINER
            docker rm $LAST_CONTAINER
        fi

        echo "开始启动${PROJECT}服务 ..."

        if [[ $PROJECT =~ "service1" ]]
        then
            docker run -d \
            -v /etc/localtime:/etc/localtime \
            -v /data/log:/var/log \
            -p 8080:8080\
            --name=${PROJECT} \
            --restart=always \
            "$NEW_IMAGE"  #sleep 100000
        else
            docker run -d \
            -p 8080:8080\
            --restart=always   \
            --name=${PROJECT} \
            -v /data/log:/var/log  \
            -v /etc/localtime:/etc/localtime \
            $NEW_IMAGE
        fi
        echo "服务${PROJECT}启动完成!"

        #if [ -n "${LAST_IMAGE}" ]; then
        #    sudo docker rmi -f $LAST_IMAGE
        #fi
}

function rollback() {
        if (( $# < 1 )) ;then
            echo "Please specify  project . eg:[xx-backend-service1|xx-backend-service2]"
            exit;
        fi

        PROJECT=${1}
        CNT=`docker images | grep  ${PROJECT} | wc -l`
        if (( $CNT < 2 ))
        then
                echo "已经是最初的版本,已经没有版本可以回滚!!!"
                exit;
        fi
        #start kill container
        LAST_CONTAINER=$(sudo docker ps -a | grep ${PROJECT} | awk '{print $1}')
        echo $LAST_CONTAINER

        # stop the previous image and remove it
        if [ -n "${LAST_CONTAINER}" ]; then
            docker stop $LAST_CONTAINER
            docker rm $LAST_CONTAINER
        fi
        # kill container end

        docker images | grep  ${PROJECT} | awk 'NR==1{print $3}' | xargs docker rmi -f
        REPOSITORY=`docker images | grep ${PROJECT} | awk 'NR==1{print $1}'`
        TAG=`docker images | grep ${PROJECT} | awk 'NR==1{print $2}'`
        OLD_IMAGE=${REPOSITORY}:${TAG}
        echo "即将回滚镜像至: $OLD_IMAGE"

        echo "开始回滾${PROJECT}服务 ..."

        if [[ $PROJECT =~ "service1" ]]
        then
            docker run -d \
            -v /etc/localtime:/etc/localtime \
            -v /data/log:/var/log \
            -p 8080:8080 \
            --name=${PROJECT} \
            --restart=always \
            ${OLD_IMAGE}  #sleep 100000 test
        else
            docker run -d \
            -p 8080:8080\
            --restart=always   \
            --name=${PROJECT} \
            -v /data/log:/var/log  \
            -v /etc/localtime:/etc/localtime \
            ${OLD_IMAGE}
        fi
        echo "服务${PROJECT}回滚完成!"
}

function printUsage(){
        echo -e "Usage: [deploy|rollback] [20221215150431] [xx-backend-service1|xx-backend-service2]"
}

case "$1" in
    (deploy)
        deploy $2 $3
    ;;
    (rollback)
        rollback $3
    ;;
    (*)
        printUsage
        exit 1
    ;;
esac

jenkins 部署

在这里插入图片描述版本可以一直回滚到最后一个发布版本。

参考

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值