持续集成基于腾讯云coding

持续集成基于腾讯云coding,第1张

持续集成基于腾讯云coding 持续集成基于腾讯云coding

在项目开发中,每次修改完代码后,都需要我们手动打包部署到服务器中。

这个过程是重复的机械的,我们可以使用一定的方式来简化这个过程,让它自动化执行。

常见的方法有Jenkins配合对应的代码仓库,在代码提交后自动打包发布到服务器上。

这里我使用的代码仓库是coding,以部署我的个人网站为例

环境
  • 项目:vuepress(node环境)
  • 部署:nginx服务器
流程
  1. 在conding打包生成结果文件
  2. 推送到服务器上nginx对应的文件夹中
过程 创建全功能DevOps项目

创建代码仓库

提交代码到云仓库

我的项目使用的vuepress模版(一个简单的vue个人网站模版)

持续集成 创建构建过程

在左侧菜单中有持续集成的选项

创建构建计划

可以选择模版

这里选择自定义构建过程

设置构建过程

配置构建过程

Jenkinsfile
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 'rm -rf /usr/lib/node_modules/npm/'
        dir('/root/.cache/downloads') {
          sh 'wget -nc "https://coding-public-generic.pkg.coding.net/public/downloads/node-linux-x64.tar.xz?version=v16.13.0" -O node-v16.13.0-linux-x64.tar.xz | true'
          sh 'tar -xf node-v16.13.0-linux-x64.tar.xz -C /usr --strip-components 1'
        }

        withCredentials([
          usernamePassword(
            // CODING 持续集成的环境变量中内置了一个用于上传到当前项目制品库的凭证
            credentialsId: env.CODING_ARTIFACTS_CREDENTIALS_ID,
            usernameVariable: 'CODING_ARTIFACTS_USERNAME',
            passwordVariable: 'CODING_ARTIFACTS_PASSWORD'
          )]) {
            script {
              sh '''
CODING_ARTIFACTS_PASSWORD_ENCODED=$(echo -n "${CODING_ARTIFACTS_PASSWORD}" | base64)
echo "CODING_ARTIFACTS_USERNAME=${CODING_ARTIFACTS_USERNAME}" >> $CI_ENV_FILE
echo "CODING_ARTIFACTS_PASSWORD_ENCODED=${CODING_ARTIFACTS_PASSWORD_ENCODED}" >> $CI_ENV_FILE
'''
              readProperties(file: env.CI_ENV_FILE).each {key, value -> env[key] = value }
            }

          }

          sh 'npm install'
        }
      }
      stage('构建') {
        steps {
          echo '构建中...'
          sh 'npm run  docs:build'
          sh 'tar -zcf /tmp/tmp.tar.gz  docs/.vuepress/dist/'
          echo '构建完成.'
        }
      }
      stage('部署') {
        steps {
          echo '部署中...'
          script {
            def remote = [:]
            remote.name = 'web-server'
            remote.allowAnyHosts = true
            remote.host = '1.1.1.1'
            remote.port = 22
            remote.user = 'root'

            // 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 username 和 password 无需修改
            withCredentials([usernamePassword(credentialsId: "****", usernameVariable: 'username', passwordVariable: 'password')]) {
              remote.user = username
              remote.password = password

              // SSH 上传文件到远端服务器
              sshPut remote: remote, from: '/tmp/tmp.tar.gz', into: '/tmp/'
              // 解压缩
              sshCommand remote: remote, command: "tar -zxf /tmp/tmp.tar.gz -C /tmp/"
              sshCommand remote: remote, sudo: true, command: "cp -R /tmp/docs/.vuepress/dist/* /usr/local/nginx/html/web/blog/"
            }
          }

          echo '部署完成'
        }
      }
    }
  }
构建

点击立即构建,可以看到如下图示

如果全程没有报错,那就是成功了,如果报错就根据报错提示修改Jenkinsfile

设置触发规则

可以根据自己的需求来设置触发规则,我这里是代码提交到master后执行

结果

访问网站就能看见最新的修改

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5682131.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存