配置流水线

Pipeline script:

pipeline {
    agent any

    stages {
        stage('pull') {
            steps {
                git branch: 'release/5.1-prod-merge-20240301_fagnbao_refactor', credentialsId: '75c1d879-bb95-4fca-8dc5-df7b4ea06e3c', url: 'http://gitlab.xxxxxx.cn/chengduteam/rd/yuexiu-crm.git'
            }
        }
        
        stage('build') {
            steps {
                sh "/var/jenkins_home/apache-maven-3.6.3/bin/mvn clean package -pl yx-gateway -am -Dmaven.test.skip=true"
                echo "Compile complete."
            }
        }
        
        stage('deploy') {
            steps {
                sshagent(['ssh_root_key']) {
                    script {
                        sh 'ssh [email protected] "bash /data/docker_data/jenkins/jenkins_home/DockerFiles/yx-gateway/deploy.sh"'
                    }
                }
            }
        }
    }
}

执行上方 Pipeline script 需先安装插件 SSH Agent,然后配置 Jenkins 的 SSH 密钥凭证,最后在脚本的 sshagent 项里添加上相关凭证

deploy.sh

#!/bin/bash
echo "拷贝jar包至Dockerfile同级目录"
cp /data/docker_data/jenkins/jenkins_home/workspace/yx-gateway/yx-gateway/target/yx-gateway-0.0.1-SNAPSHOT.jar /data/docker_data/jenkins/jenkins_home/DockerFiles/yx-gateway/

cd /data/docker_data/jenkins/jenkins_home/DockerFiles/yx-gateway/

DATETIME=$(date "+%F-%H-%M-%S")


LABEL_NAME="gateway"

echo "删除历史镜像开始==========================================="

# 定义时间间隔
TIME_INTERVAL="30 minutes"  # 时间间隔可以修改为 1 hour 或 1 day 或 2 hours 或 2 days

# 获取时间间隔之前的时间
TIME_AGO=$(date -d "$TIME_INTERVAL ago" "+%Y-%m-%dT%H:%M:%S")

echo "即将删除 $TIME_INTERVAL 前的无用镜像"
# 打印所有匹配标签的镜像 ID、名称和创建日期
echo "获取所有匹配标签的镜像信息为:"
docker image ls --filter "label=com.example.service=$LABEL_NAME"

docker image ls --filter "label=com.example.service=$LABEL_NAME" --format '{{.ID}}' | while read IMAGE_ID; do
  CREATED_AT=$(docker inspect --format='{{.Created}}' "$IMAGE_ID")
  # 提取日期和时间部分,只保留年-月-日 时:分:秒
  CREATED_AT=$(echo "$CREATED_AT" | cut -d 'T' -f1,2)
  # 判断时间是否超过指定时间或镜像是否被容器使用
  if [[ ("$CREATED_AT" < "$TIME_AGO") && (-z "$(docker ps -q --filter ancestor="$IMAGE_ID")") ]]; then
    docker image rm "$IMAGE_ID"
    echo "删除镜像: $IMAGE_ID"
  else
    echo "保留镜像: $IMAGE_ID (被容器使用中或创建于 $TIME_INTERVAL 内)"
  fi
done

echo "删除镜像结束======================================================="

echo "docker build 构建镜像"
docker build -t yx-gateway:${DATETIME} --label=com.example.service=$LABEL_NAME .

echo "启动容器"
docker ps -a | grep yx-gateway
if [ "$?" -eq 0 ]; then
  docker rm -f yx-gateway
fi
docker run --name yx-gateway -itd -p 8331:8331 -v /data/docker_data/jenkins/jenkins_home/DockerFiles/yx-gateway/logs:/logs yx-gateway:${DATETIME}

echo "部署成功"

Last updated