Jenkins 容器化实践:Docker 部署与 CI/CD 流水线配置

容器启动命令

docker run -d \
  --name jenkins \
  -p 8080:8080 \
  -p 50000:50000 \
  -v /etc/config/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v $(which docker):/usr/bin/docker \
  -e TZ=Asia/Shanghai \
  jenkins/jenkins:lts

设置权限:

# 在宿主机创建目录并设置权限
sudo mkdir -p /etc/config/jenkins_home
sudo chown -R 1000:1000 /etc/config/jenkins_home  
sudo chmod -R 755 /etc/config/jenkins_home

 

 

流水线脚本

pipeline {
    agent any
    environment {
        IMAGE_NAME = "yourimagename"
        IMAGE_TAG = "${env.BUILD_ID}"
        DOCKER_REGISTRY_CREDENTIALS = 'your key'
    }
    stages {
        stage('Checkout') {
            steps {
                git branch: 'master',
                    credentialsId: 'your key',
                    url: 'your git url'
            }
        }
        
        stage('Publish') {
            steps {
                script {
                    docker.image('mcr.microsoft.com/dotnet/sdk:6.0').inside('-u root -v /var/jenkins_home/workspace:/workspace') {
                        dir('your proj') {
                            sh 'dotnet restore'
                            sh 'dotnet publish -c Release -o publish'
                        }
                    }
                }
            }
        }
        
        stage('Docker Build & Push') {
            steps {
                script {
                    docker.withRegistry('https://registry.cn-hangzhou.aliyuncs.com', "${DOCKER_REGISTRY_CREDENTIALS}") {
                        def app = docker.build("${IMAGE_NAME}:${IMAGE_TAG}", ".")
                        app.push()
                    }
                }
            }
        }
    }
}

 

如果需要自动部署可以在后面继续加stage

stage('Deploy') {
    steps {
        script {
            sh """
            docker stop you_container || true
            docker rm you_container || true
            docker pull ${IMAGE_NAME}:${IMAGE_TAG}
            docker run -d \
                --name you_container \
                --restart always \
                ${IMAGE_NAME}:${IMAGE_TAG}
            """
        }
    }
}

 

另外,在线上服务器则只需要拉取镜像部署即可。

posted @ 2025-08-15 16:45  daviyoung  阅读(17)  评论(0)    收藏  举报