通过Jenkins自动化构建VUE前端项目

Jenkins奴隶机配置

  • 首先登录奴隶机,确保奴隶机有JDK,没有则下载解压JDK。下面简单描述下安装JDK过程
    • ORACLE官网下载个JDK,比如jdk-8u241-linux-x64.tar.gz
    • 挪到想要的路径下,比如/home/: mv jdk-8u241-linux-x64.tar.gz /home/
    • 解压: tar -zxvf jdk-8u241-linux-x64.tar.gz
    • 至此,JDK就放在/home/jdk1.8.0_241/
    • 配置bin: cd /usr/bin/ & ln -s /home/jdk1.8.0_241/bin/java
    • 测试下是否正确配置: java -version,如下则正常


      image.png
  • 登录Jenkins,在Jenkins首页:Manage Jenkins -> Manage Nodes and Clouds,进入到节点配置界面
    image.png
  • 然后点击新建节点,配置信息,其中启动方式要改成Launch agents via SSH
    image.png
  • 保存后,Master就会开始尝试连接奴隶机,此时会报错,提示没有奴隶机的ssh指纹信息,可以如下解决:
    • 登录Master所在机器A,通过A去登录奴隶机所在机器B
    • 注意因为Jenkins使用Docker部署的,因此Master所在机器在Docker Container内,进去使用:docker exec -it xxx bash
    • 然后ssh一次:ssh root@B
    • 这样A的know_hosts里面就有B的指纹信息了
  • 在重启代理尝试连接奴隶机,成功后如图


    image.png

创建Jenkins自动化构建任务

  • 首先创建一个用于登录Gitlab的凭证
    • Manage Jenkins -> Manage Credentials

    • 添加凭据

      image.png

    • 创建完毕后,记得复制凭证id,用于编写流水线时要用到

  • 插件管理,搜索DingTalk插件,安装重启Jenkins
    • 这边是DingTalk插件使用说明,传送门
  • 插件管理,搜索NodeJS插件,安装重启Jenkins
  • 然后到全局工具配置NodeJS新增,填写名字,选择版本
  • 首页->新建item,进入任务创建页
  • 填入名字,选择流水线,开始填写流水线脚本
pipeline {
    agent {
        label '226.243'
    }
    stages {
        stage('Preparation') {
            steps {
              git branch: 'develop', credentialsId: 'Gitlab-Jenkins', url: 'http://192.168.1.1/xxxxx.git'       
            }
        }
        stage('Clean') {
            steps {
                sh'''
                    touch pid
                    pid=`cat pid`
                    if [ -n "$pid" ]
                    then 
                        echo "kill pid"
                        kill -9 $pid 2>&1
                    else
                        echo "application is already stopped"
                    fi
                    rm -rf dist/
                '''     
            }
        }
        stage('Build') {
            steps{
                script {
                    nodeHome = tool 'NodeJS10_24'
                }
                withEnv(["NODE_HOME=$nodeHome"]) {
                     sh'''
                        export JENKINS_NODE_COOKIE=dontKillMe
                        export PATH=$PATH:$NODE_HOME/bin
                        $NODE_HOME/bin/npm i -g http-server
                        $NODE_HOME/bin/npm install
                        $NODE_HOME/bin/npm run build:prod
                        cd dist
                        nohup $NODE_HOME/bin/http-server -p 9009 > ../run_log.out 2>&1 &
                        echo "$!" > ../pid
                    '''
                }
            }
        }
    }
    post { 
        always { 
          echo 'always'
        } 
        success { 
            // 当此Pipeline成功时打印消息 
            echo 'success' 
            dingtalk (
                        robot: 'robot1',
                        type: 'LINK',
                        title: '前端构建成功',
                        text: [
                            '点击直接跳转到页面'
                        ],
                        messageUrl: 'http://xxxx.com',
                        picUrl: 'https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fpic.51yuansu.com%2Fpic2%2Fcover%2F00%2F44%2F98%2F5814c9627afc2_610.jpg&refer=http%3A%2F%2Fpic.51yuansu.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1619152494&t=4eb45fe7198c51f8bf54968f5dcc75d1'
                    )
        } 
        failure { 
            //当此Pipeline失败时打印消息
            echo 'failure'
            dingtalk (
                        robot: 'robot1',
                        type: 'TEXT',
                        text: [
                            '前端构建失败'
                        ]
                    )
        } 
        unstable { 
            //当此Pipeline 为不稳定时打印消息 
            echo 'unstable'         
        } 
        aborted { 
            //当此Pipeline 终止时打印消息
            echo 'aborted'
            dingtalk (
                        robot: 'robot1',
                        type: 'TEXT',
                        text: [
                            '前端构建被终止'
                        ]
                    )
        } 
        changed { 
            //当pipeline的状态与上一次build状态不同时打印消息 
            echo 'changed'             
        }         
    }
}

配置自动触发

  • 插件管理中搜索Gitlab,安装Gitlab触发器
  • 然后到item中触发器就会多出一个Build when a change is pushed to GitLab. GitLab webhook URL:xxxx
  • 将URL复制到Gitlab项目中,通过Setting->Webhook添加该url和token.
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,015评论 4 362
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,262评论 1 292
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,727评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,986评论 0 205
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,363评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,610评论 1 219
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,871评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,582评论 0 198
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,297评论 1 242
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,551评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,053评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,385评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,035评论 3 236
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,079评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,841评论 0 195
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,648评论 2 274
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,550评论 2 270