欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

在编码过程中如何利用Jenkins实现持续部署

最编程 2024-08-01 21:30:30
...

scp

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([
          $class: 'GitSCM',
          branches: [[name: env.GIT_BUILD_REF]],
          userRemoteConfigs: [[
            url: env.GIT_REPO_URL,
            credentialsId: env.CREDENTIALS_ID
          ]]])
        }
      }
      stage('编译打包') {
        steps {
          sh 'npm config set registry https://registry.npm.taobao.org'
          sh 'npm install'
          sh 'npm run build'
        }
      }
      stage('部署到服务器') {
        steps {
          script {
            def remoteConfig = [:]
            remoteConfig.name = "my-remote-server"
            remoteConfig.host = "${env.REMOTE_HOST}"
            remoteConfig.allowAnyHosts = true
            // 使用 SCP 作为文件传输
            remoteConfig.fileTransfer = "scp"

            withCredentials([sshUserPrivateKey(
              credentialsId: "${env.REMOTE_CRED}",
              keyFileVariable: "privateKeyFilePath"
            )]) {
              // SSH 登陆用户名
              remoteConfig.user = "${env.REMOTE_USER_NAME}"
              // SSH 私钥文件地址
              remoteConfig.identityFile = privateKeyFilePath

              // 将本地的文件复制到远端
              sh 'mv dist i'
              // 删除旧文件
              sshCommand(
                remote: remoteConfig,
                command: "rm -rf /www/html/mp/i",
                sudo: true,
              )
              sshPut(
                remote: remoteConfig,
                // 本地文件或文件夹
                from: 'i',
                // 远端文件或文件夹
                into: '/www/html/mp'
              )
            }
          }

        }
      }
    }
  }

docker

pipeline {
  agent any
  stages {
    stage('检出') {
      steps {
        checkout([$class: 'GitSCM',
        branches: [[name: env.GIT_BUILD_REF]],
        userRemoteConfigs: [[
          url: env.GIT_REPO_URL,
          credentialsId: env.CREDENTIALS_ID
        ]]])
      }
    }
    stage('编译') {
      steps {
        sh 'mvn package -Dmaven.test.skip=true -Ddockerfile.skip=true'
      }
    }
    stage('构建 Docker 镜像') {
      steps {
        sh "docker build -f ${env.DOCKERFILE_PATH} -t ${env.CODING_DOCKER_IMAGE_NAME}:${env.DOCKER_IMAGE_VERSION} ${env.DOCKER_BUILD_CONTEXT}"
      }
    }
    stage('推送到 CODING Docker 制品库') {
      steps {
        script {
          docker.withRegistry(
            "${env.CCI_CURRENT_WEB_PROTOCOL}://${env.CODING_DOCKER_REG_HOST}",
            "${env.CODING_ARTIFACTS_CREDENTIALS_ID}"
          ) {
            docker.image("${CODING_DOCKER_IMAGE_NAME}:${env.DOCKER_IMAGE_VERSION}").push()
          }
        }

      }
    }
    stage('部署到远端服务') {
      steps {
        script {
          def remoteConfig = [:]
          remoteConfig.name = "wx-api"
          remoteConfig.host = "${env.REMOTE_HOST}"
          remoteConfig.port = "${env.REMOTE_SSH_PORT}".toInteger()
          remoteConfig.allowAnyHosts = true

          withCredentials([
            sshUserPrivateKey(
              credentialsId: "${env.REMOTE_CRED}",
              keyFileVariable: "privateKeyFilePath"
            ),
            usernamePassword(
              credentialsId: "${env.CODING_ARTIFACTS_CREDENTIALS_ID}",
              usernameVariable: 'CODING_DOCKER_REG_USERNAME',
              passwordVariable: 'CODING_DOCKER_REG_PASSWORD'
            )
          ]) {
            // SSH 登陆用户名
            remoteConfig.user = "${env.REMOTE_USER_NAME}"
            // SSH 私钥文件地址
            remoteConfig.identityFile = privateKeyFilePath

            // 请确保远端环境中有 Docker 环境
            sshCommand(
              remote: remoteConfig,
              command: "docker login -u ${CODING_DOCKER_REG_USERNAME} -p ${CODING_DOCKER_REG_PASSWORD} ${CODING_DOCKER_REG_HOST}",
              sudo: true,
            )

            sshCommand(
              remote: remoteConfig,
              command: "/usr/local/bin/docker-compose pull api && /usr/local/bin/docker-compose up -d api",
              sudo: true,
            )

            echo "部署成功"
          }
        }

      }
    }
  }
  environment {
    CODING_DOCKER_REG_HOST = "${env.CCI_CURRENT_TEAM}-docker.pkg.${env.CCI_CURRENT_DOMAIN}"
    CODING_DOCKER_IMAGE_NAME = "${env.PROJECT_NAME.toLowerCase()}/${env.DOCKER_REPO_NAME}/${env.DOCKER_IMAGE_NAME}"
  }
}

 

推荐阅读