Jenkins使用——基于docker镜像nodejs编译打包发布前端项目

准备插件,安装好以下插件

  1. SSH Pipeline Steps 在SSH Over Publisher 插件不能用的情况下安装,可以在远程服务器上运行命令与操作文件详细说明 https://github.com/jenkinsci/ssh-steps-plugin#pipeline-steps
  2. Generic Webhook Trigger Plugin 用于设置钩子,在git push 时自动触发构建,详细说明 https://github.com/jenkinsci/generic-webhook-trigger-plugin

Jenkins 自动部署Nodejs 项目

打开 Blue Ocean

  1. 创建流水线项目
  2. 选择 git项目,填写git服务项目的URL
    在这里插入图片描述
  3. 拷贝公钥添加的git服务器中的SSH key 中
  4. 点击完成,将自动下载项目的Jenkinsfile文件

项目中添加Jenkinsfile文件

在项目中添加 Jenkinsfile文件,并且提交。Jenkins将根据该文件内容进行构建。

完成基本的编译与打包

先按照插件Docker
在Jenkinsfile文件中添加内容如下,保证Jenkins能完成基本的包下载与打包功能。详细如下:

node {
	checkout scm
  	docker.image('node:14-alpine').inside('-v $HOME/node_modules:/node_modules -p 3000:3000') {
	    stage('Build') {
	      sh 'yarn config set registry https://registry.npm.taobao.org'  //设置国内服务,加速下载
	      sh 'yarn -v'  //查看版本
	      sh 'yarn'  //下载包
	      sh 'yarn build' //编译打包
	      sh 'ls -l'   //查看目录结构
	    }
	}
}

自动发布到其他服务器

先安装插件 SSH Step Plugin
在Jenkins中拷贝文件到远程服务器Web-Server,其代码如下:

	def remote = [:]
    remote.name = 'Web-Server'
    remote.host = 'xxx.xxx.xxx.xxx'
    remote.user = 'root'
    remote.password = 'yor password'
    remote.allowAnyHosts = true
    stage('Deploy') {
      //一起
      //writeFile file: 'abc.sh', text: 'ls -lrt'
      //sshScript remote: remote, script: 'abc.sh' //远程执行脚本

      // sshCommand remote: remote, command: 'ls -l',
      // sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done" //远程执行命令

      sh 'ls -l'
      sshRemove remote: remote, path: '/home/warehouse'
      sshPut remote: remote, from: 'warehouse', into: '/home'
    }

push到gitlab时自动构建

先安装插件 Generic Web Hook
在Jenkins中添加触发器,用于出发Jenkins自动构建,其代码如下:

properties([
    pipelineTriggers([
    [$class: 'GenericTrigger',
      genericVariables: [
        [key: 'ref', value: '$.resource.refUpdates[0].name'], //定义变量
        //[key: 'ref', value: '$.ref'],
        // [
        //   key: 'before',
        //   value: '$.before',
        //   expressionType: 'JSONPath', //Optional, defaults to JSONPath
        //   regexpFilter: '', //Optional, defaults to empty string
        //   defaultValue: '' //Optional, defaults to empty string
        // ]
      ],
      // genericRequestVariables: [
      //     [key: 'requestWithNumber', regexpFilter: '[^0-9]', defaultValue:'requestWithNumber_test'],
      //     [key: 'requestWithString', regexpFilter: '']
      // ],
      // genericHeaderVariables: [
      //     [key: 'headerWithNumber', regexpFilter: '[^0-9]', defaultValue:'headerWithNumber_test'],
      //     [key: 'headerWithString', regexpFilter: '']
      // ],

      causeString: 'Triggered on $ref',
      token: 'VXnNT5X/GH8Rs', //请求的token
      tokenCredentialId: '',

      printContributedVariables: true,
      printPostContent: true,

      silentResponse: false,

      regexpFilterText: '$ref',
      regexpFilterExpression: 'refs/heads/' + BRANCH_NAME
    ]
    ])
  ])

在gitlab 选择push事件,添加 http://JENKINS_URL/generic-webhook-trigger/invoke?token=VXnNT5X/GH8Rs通知。可参考 https://docs.gitlab.com/ee/user/project/integrations/webhooks.html
在开发机器上push代码到git服务器时,将会发送通知请求到Jenkins服务器,Jenkins服务器将自动构建。

完整代码:

node {
	properties([
	    pipelineTriggers([
	    [$class: 'GenericTrigger',
	      genericVariables: [
	        [key: 'ref', value: '$.resource.refUpdates[0].name'], //定义变量
	        //[key: 'ref', value: '$.ref'],
	        // [
	        //   key: 'before',
	        //   value: '$.before',
	        //   expressionType: 'JSONPath', //Optional, defaults to JSONPath
	        //   regexpFilter: '', //Optional, defaults to empty string
	        //   defaultValue: '' //Optional, defaults to empty string
	        // ]
	      ],
	      // genericRequestVariables: [
	      //     [key: 'requestWithNumber', regexpFilter: '[^0-9]', defaultValue:'requestWithNumber_test'],
	      //     [key: 'requestWithString', regexpFilter: '']
	      // ],
	      // genericHeaderVariables: [
	      //     [key: 'headerWithNumber', regexpFilter: '[^0-9]', defaultValue:'headerWithNumber_test'],
	      //     [key: 'headerWithString', regexpFilter: '']
	      // ],
	
	      causeString: 'Triggered on $ref',
	      token: 'VXnNT5X/GH8Rs', //请求的token
	      tokenCredentialId: '',
	
	      printContributedVariables: true,
	      printPostContent: true,
	
	      silentResponse: false,
	
	      regexpFilterText: '$ref',
	      regexpFilterExpression: 'refs/heads/' + BRANCH_NAME
	    ]
	    ])
  	])
	checkout scm
  	docker.image('node:14-alpine').inside('-v $HOME/node_modules:/node_modules -p 3000:3000') {
	    stage('Build') {
	      sh 'yarn config set registry https://registry.npm.taobao.org'  //设置国内服务,加速下载
	      sh 'yarn -v'  //查看版本
	      sh 'yarn'  //下载包
	      sh 'yarn build' //编译打包
	      sh 'ls -l'   //查看目录结构
	    }
	}
	def remote = [:]
    remote.name = 'Web-Server'
    remote.host = 'xxx.xxx.xxx.xxx'
    remote.user = 'root'
    remote.password = 'yor password'
    remote.allowAnyHosts = true
    stage('Deploy') {
      //一起
      //writeFile file: 'abc.sh', text: 'ls -lrt'
      //sshScript remote: remote, script: 'abc.sh' //远程执行脚本

      // sshCommand remote: remote, command: 'ls -l',
      // sshCommand remote: remote, command: "for i in {1..5}; do echo -n \"Loop \$i \"; date ; sleep 1; done" //远程执行命令

      sh 'ls -l'
      sshRemove remote: remote, path: '/home/warehouse'
      sshPut remote: remote, from: 'warehouse', into: '/home'
    }
}

完成以上步骤将可进行自动发布。

  • 如有问题欢迎指正,谢谢!
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值