使用Jenkins发布镜像到指定远程主机的docker容器

整个流程就是,使用Jenkins拉取Harbor中的镜像,然后ssh去删除当前存在的容器,然后根据指定的镜像版本去创建新的容器。

使用Jenkins发布镜像到指定远程主机的docker容器

流水线解释

这里选取镜像使用的“Image Tag Parameter”这个插件和harbor进行集成。Image Tag Parameter(镜像标签参数)是Jenkins中一个非常实用的插件功能,它允许用户在构建过程中动态地选择和指定Docker镜像的标签。

使用Jenkins发布镜像到指定远程主机的docker容器

选取DeployEnv后,DeployHost会进行自动联动,这里使用的“Active Choices Reactive Parameter”这个插件。Active Choices Reactive Parameter插件通过Groovy脚本或Scriptler目录中的脚本,能够动态地根据用户的输入或其他参数的选择来更新参数的值选项列表。这种动态交互性使得Jenkins的构建过程更加灵活和可定制。

使用Jenkins发布镜像到指定远程主机的docker容器
使用Jenkins发布镜像到指定远程主机的docker容器

流水线pipeline

使用Jenkins发布镜像到指定远程主机的docker容器
pipeline{
    agent any
            
    stages{
        stage("info"){
            steps{
                script{
                    env.harbor = "harbor.devops.linux66.cn:9001"
                }    
            
                echo "harbor地址:${harbor}"
                sh 'echo "容器服务名字:${containerName}"'
                sh 'echo "容器环境变量:${DeployEnv}"'
                sh 'echo "镜像tag:${DOCKER_IMAGE}"'
                sh 'echo "部署主机:${DeployHost}"'
                sh """
                    ssh root@$DeployHost  /root/deploy-backend.sh $containerName ${env.harbor} $DOCKER_IMAGE $DeployEnv $hostPort
                """
                
            }
        }
    }
}

远程主机上脚本文件 /root/deploy-backend.sh

[root@prod ~]# cat /root/deploy-backend.sh
#!/bin/bash

containerName=$1
harbor=$2
docker_image=$3
DeployEnv=$4
hostPort=$5

image=`echo "${docker_image}"|awk -F":" '{print $1}'`
version=`echo "${docker_image}"|awk -F":" '{print $2}'`

if [ $# -ne 5 ]; then
    echo "The shell script must pass 5 parameters"
    exit 0
fi

echo "------拉取新版镜像--------------"
docker pull ${harbor}/${docker_image}
if [ `echo $?` -eq 0 ]; then
        echo "------停止当前容器并删除------------"
        run=$(docker ps -a| grep -w $containerName | awk '{print $1}')
        docker stop $run
        docker rm $run
        echo "------启动新版镜像---------------"
        image_new=$(docker images | grep $image | grep $version | awk '{print $3}')

        docker run -d -e ASPNETCORE_ENVIRONMENT=${DeployEnv} -p ${hostPort}:80  --restart=always  --name $containerName $image_new
fi



echo "---------------------   dotnet容器服务状态    -------------------"
docker ps | grep dotnet

注意事项:

1、不要忘记给远程主机上的脚本添加执行权限chmod +x /root/deploy-backend.sh;

2、不要忘记jenkins与远程主机采用SSH密钥对进行连接;

3、远程主机上需要通过docker login登录私有镜像仓库,否则远程主机无权拉取镜像。

声明: 本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。

给TA打赏
共{{data.count}}人
人已打赏
云原生

成都双流钓鱼好去处-钓鱼嘴

2024-11-18 20:52:36

云原生

Github 9k star 监控项目,有效解决Prom痛点,推荐了解

2024-11-20 14:58:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索