DevOps 学习笔记(三)| 使用 Jenkins 流水线

该文章描述了一个使用Jenkins构建的自动化流水线,该流程包括从Git仓库拉取代码,使用Maven构建项目,通过Docker创建镜像,将镜像推送到Harbor仓库,以及在应用服务器上拉取并运行新镜像。此外,还涉及到了应用服务器上的部署脚本`deploy.sh`,用于处理容器的启动、停止和更新。
摘要由CSDN通过智能技术生成

1. 构建 Jenkins 流水线

使用 Jenkins 构建的流水线 Item 需要完成以下几个操作

  1. 拉取 Git 仓库代码
  2. 使用 Maven 构建项目
  3. 通过 Docker 制作自定义镜像
  4. 将自定义镜像推送到 Harbor
  5. 应用服务器拉取镜像

对应的流水线代码如下

pipeline {
    agent any

    environment {
        harborUser = 'admin'
        harborPasswd = 'Harbor12345'
        harborAddress = '192.168.80.128:80'
        harborRepo = 'repo'
        tag = 'v1.0.0'
        container_port = '8088'
        host_port = '8088'
    }

    stages {
        stage('拉取 Git 仓库代码') {
            steps {
                git credentialsId: 'd2ab9c92-9a55-4c06-9b4e-874fe743ac94', url: 'https://gitee.com/YonminMa/SelectDormitory.git'
                echo '拉取 Git 仓库代码 - SUCCESS'
            }
        }
        stage('使用 Maven 构建项目') {
            steps {
                sh '/usr/local/apache-maven-3.9.0/bin/mvn clean package -DskipTests'
                echo '使用 Maven 构建项目 - SUCCESS'
            }
        }
        stage('通过 Docker 制作自定义镜像') {
            steps {
                sh 'docker build -t ${JOB_NAME}:$tag .'
                echo '通过 Docker 制作自定义镜像 - SUCCESS'
            }
        }
        stage('将自定义镜像推送到 Harbor') {
            steps {
                sh '''docker login -u ${harborUser} -p ${harborPasswd} ${harborAddress}
                docker tag ${JOB_NAME}:$tag ${harborAddress}/${harborRepo}/${JOB_NAME}:$tag
                docker push ${harborAddress}/${harborRepo}/${JOB_NAME}:$tag'''
                echo '将自定义镜像推送到 Harbor - SUCCESS'
            }
        }
        stage('应用服务器拉取镜像') {
            steps {
                sshPublisher(publishers: [sshPublisherDesc(configName: 'ubuntu', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/usr/local/test/deploy.sh $harborAddress $harborRepo $JOB_NAME $tag $container_port $host_port", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
                echo '应用服务器拉取镜像 - SUCCESS'
            }
        }
    }
}

2. 应用服务器脚本

在上面的流水线代码中调用了应用服务器/usr/local/test/deploy.sh 文件

mkdir -p /usr/local/test/
cd /usr/local/test/
vim deploy.sh
chmod +x deploy.sh

deploy.sh 文件内容如下

harbor_addr=$1
harbor_repo=$2
project=$3
version=$4
container_port=$5
host_port=$6

imageName=$harbor_addr/$harbor_repo/$project:$version

echo $imageName

containerId=`docker ps -a | grep ${project} | awk '{printf $l}'`
echo $containerId

if [ -z $containerId ];
        then
                echo "container doesn't exit"
        else
                docker stop $containerId
                docker rm $containerId
fi

tag=`docker images | grep ${project} | grep ${version} | awk '{printf $2}'`
echo $tag

if [ -z $tag ];
        then
                echo "image doesn't exit"
        else
                docker rmi $imageName
fi

docker login -u admin -p Harbor12345 $harbor_addr

docker pull $imageName

docker run -d -p $host_port:$container_port --name $project $imageName
echo "SUCCESS"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值