美文网首页
coding持续集成配置

coding持续集成配置

作者: 随风飞2019 | 来源:发表于2021-03-31 17:02 被阅读0次

    前端推送仓库后,触发jenkins部署到云服务器
    文件如下

    pipeline {
      agent any
      stages {
        stage('检出') {
          steps {
            checkout([
              $class: 'GitSCM',
              branches: [[name: GIT_BUILD_REF]],
              userRemoteConfigs: [[
                url: GIT_REPO_URL,
                credentialsId: CREDENTIALS_ID
              ]]])
            }
          }
          stage('打包') {
            steps {
              echo '打包压缩开始'
              sh '''npm i
                    npm run build
                    cd ./dist
                    tar -zcvf dist.tar.gz *
                    echo 已生成压缩包'''
            }
          }
          stage('传输文件到服务器') {
            steps {
              echo '上传...'
              script {
                def remote = [:]
                remote.name = 'web-server'
                remote.allowAnyHosts = true
                remote.host = '121.5.111.188'
                remote.port = 22
                remote.user = 'root'
    
                // 把「CODING 凭据管理」中的「凭据 ID」填入 credentialsId,而 id_rsa 无需修改
                withCredentials([sshUserPrivateKey(credentialsId: "4c7da146-84", keyFileVariable: 'id_rsa')]) {
                  remote.identityFile = id_rsa
    
                  // 删除文件
                  sshCommand remote: remote, command: "rm -rf /zyw/web/vision_admin/*"
    
                  // SSH 上传文件到远端服务器
                  sshPut remote: remote, from: './dist/dist.tar.gz', into: '/zyw/web/vision_admin/'
    
                  // 解压缩
                  sshCommand remote: remote, command: "tar -zxvf /zyw/web/vision_admin/dist.tar.gz -C /zyw/web/vision_admin/"
                  sshCommand remote: remote, command: "rm -rf /zyw/web/vision_admin/dist.tar.gz"
                }
              }
    
              echo '部署完成'
            }
          }
        }
      }
    

    后端代码推送到仓库后,触发coding构建,通过ssh登陆远程云服务器,触发shell执行

    def remote = [:]
    remote.name = 'server'
    remote.host = '121.5.111.188'
    remote.user = 'root'
    remote.password = 'z6*'
    remote.allowAnyHosts = true
     
    pipeline{
        agent any
        stages{
     
            stage("任务申请"){
                steps{
                     script{
                      sshCommand remote: remote, command: "/zyw/web/egg/auto.sh"
                     }
                    }
                }
            }  
        }
    

    下面是踩坑经历,执行shell读不到环境变量问题
    1.不认识node环境,需要把node路径软连接到/usr/sbin/
    whereis node
    /opt/node/bin/node
    ln -s /opt/node/bin/node /usr/sbin/

    2.不认识pm2命令,需要把pm2路径软连接到/usr/sbin/
    ln -s /opt/node/bin/pm2 /usr/sbin/

    1. auto.sh拒绝执行,权限不够,需要给它加权限
      chmod 777 -R auto.sh

    下面是一些积淀
    jenkins执行shell读不到/etc/profile以及用户下.bash_profile设置的环境变量
    是因为执行机制造成的

    什么是交互式shell和非交互式shell

    交互式的shell会有一个输入提示符,并且它的标准输入、输出和错误输出都会显示在控制台上。这种模式也是大多数用户非常熟悉的:登录、执行一些命令、退出。当你退出后,shell也终止了。

    非交互式shell是bash script.sh这类的shell。在这种模式下,shell不与你进行交互,而是读取存放在文件中的命令,并且执行它们。当它读到文件的结尾EOF,shell也就终止了。

    什么是登录式shell和非登陆式shell

    需要输入用户名和密码的shell就是登陆式shell。因此通常不管以何种方式登陆机器后用户获得的第一个shell就是login shell。不输入密码的ssh是公钥打通的,某种意义上说也是输入密码的。
    非登陆式的就是在登陆后启动bash等,即不是远程登陆到主机这种

    如果一个bash是交互式登录Shell或者使用--login参数的非交互式Shell,首先会执行/etc/profile文件。然后按顺序查找~/.bash_profile, /.bash_login,/.profile,这三个文件谁存在并且有读权限就执行谁,然后后面的就不会再执行。
    可以通过指定--noprofile参数来禁止这种默认行为。
    当登录Shell退出之后,bash会读取~/.bash_logout文件并执行。
    如果 ~/.bash_profile文件存在的话,一般还会执行 ~/.bashrc文件。

    通过上面的分析,对于常用环境变量设置文件,整理出如下加载情况表:


    1.png

    jenkins默认情况下是属于non-login + non-interactive

    eggjs的npm run stop会停用所有eggjs服务,所以服务器上部署了多个egg服务的话,可以一次停用,多次启用
    cd /data/xiaokang/xiaokang-server
    npm run stop
    git checkout .
    git pull
    npm install
    npm run start
    
    cd /data/vision/egg
    git checkout .
    git pull
    npm install
    npm run start
    

    相关文章

      网友评论

          本文标题:coding持续集成配置

          本文链接:https://www.haomeiwen.com/subject/kthahltx.html