小程序结合Jenkins实现CICD

简介: 小程序结合Jenkins实现CICD

小程序结合Jenkins实现CICD

在将公司前后端大多数项目都接入了 CI 流程后,发布效率快的一批。但是我最近发现我司在微信小程序这的发布,居然还是手动??? 程序员天生就对重复的事情敏感,这些事情得想个法弄成自动的。

但是在微信小程序出现,上传体验版/生成开发版都需要利用微信开发者工具,最开始是依赖于人手动去点 ide 上的上传按钮,再然后就是,微信开放出了命令行调用接口

之前看了一些利用 Mac Os + JenkinsCI,这个方案并不能够适用所有项目组,我们重点还是希望通过服务器进行 CI,于是就去翻找小程序文档以及网上文章, 天无绝人之路,发现小程序的文档多了 CI 这一项

miniprogram-ci 从 1.0.28 开始支持第三方平台开发的上传和预览,调用方式与普通开发模式无异

image.png

整理目录结构

因为 miniprogram-ci 需要依赖于 npm 安装,但是又不需要与我们项目的包相关,所以就有了如下结构

image.png

npm install miniprogram-ci

获取小程序代码上传秘钥

在公众平台的开发管理 -> 开发设置中,需要先将秘钥下载下来,我们可以写入到项目的根目录的 ci-private.key 文件中,加入版本管理,因为我们有 IP 白名单,所以泄露也不打紧

image.png

配置本次版本更新内容

我们将配置放入到根目录中,方便自动更新的时候获取

  • version.config.json
{
    "version":"1.1.5",
    "versionDesc":"Test Jenkins"
}

CI程序编写

  • start.js
const ci = require('miniprogram-ci');
const fs = require('fs');
/* 项目配置 */
const projectConfig = require('./project.config.json'); // 就是小程序的配置文件
const versionConfig = require('./version.config.json');
// new ci实例
const project = new ci.Project({
    appid: projectConfig.appid,
    type: 'miniProgram',
    projectPath: projectConfig.miniprogramRoot,
    privateKeyPath: './ci-private.key',
    ignores: ['node_modules/**/*'],
});
/** 上传 */
async function upload({version = '0.0.0', versionDesc ='test'}) {
    await ci.upload({
        project,
        version,
        desc: versionDesc,
        setting: {
            es7: true,
            minify: true,
            autoPrefixWXSS: true
        },
        onProgressUpdate: console.log,
      })
}
/** 入口函数 */
async function init() {
    // 上传
    await upload(versionConfig);
}
init();

测试能否上传成功

node start.js


image.png

这样就是可以成功了,然后我们利用 Jenkins 让我提交代码时自动发布体验版

接入Jenkins

  • git秘钥等凭据添加

image.png

  • 安装钉钉通知插件、NodeJs环境插件
  • 配置钉钉机器人、Node别名

image.png


  • 创建流水线项目
  • 项目基本配置 webhook、构建记录滚动配置等

编写Jenkinsfile

pipeline {
   agent any
   // 环境变量 
   environment {
       GIT_ADDRESS = 'git@xxxx/wechat-blog.git'
       BRANCH_NAME = 'master'
   }
   stages {
        // 拉取git代码
        stage('git pull') {
            steps {
                git branch: "${BRANCH_NAME}", credentialsId: '1', url: "${GIT_ADDRESS}"
            }
        }
        // 构建
        stage('build') {
            steps {
                nodejs('nodejs') {
                    sh "npm install"
                    sh "node start.js"
                }
            }
        }
   }
   post {
    success {
            dingtalk (
                robot: '58f10219-2cd3-4de7-a1af-f85f4010c10a',
                type: 'MARKDOWN',
                title: "水商城构建通知 - $BRANCH_NAME",
                text: [
                    '# 水商城构建通知 - $BRANCH_NAME',
                    '',
                    '---',
                    "- 任务: ${env.BUILD_NUMBER}",
                    '- 状态: <font color=blue>构建成功</font>',
                ]
            )
    }
        failure {
            dingtalk (
                robot: '58f10219-2cd3-4de7-a1af-f85f4010c10a',
                type: 'MARKDOWN',
                title: "构建通知 - $BRANCH_NAME",
                text: [
                    '# 构建通知 - $BRANCH_NAME',
                    '',
                    '---',
                    "- 任务: ${env.BUILD_NUMBER}",
                    '- 状态: <font color=red>构建失败</font>',
                    ]
            )
    }
  }
}

Git提交测试

钉钉通知成功

image.png

注意

如果上传失败,要记得去增加 IP白名单

目录
相关文章
|
jenkins Java 持续交付
实战:Docker+Jenkins+Gitee构建CICD流水线
实战:Docker+Jenkins+Gitee构建CICD流水线
|
Java jenkins Shell
《项目实战》 Jenkins 与 CICD、发布脚本
《项目实战》 Jenkins 与 CICD、发布脚本
251 0
|
监控 jenkins Java
CICD:CentOS 下 Jenkins 安装
Jenkins 是一个可扩展的持续集成引擎。
208 0
|
Java jenkins 持续交付
第四十三章 微服务CICD(5)- gitlab + jenkins + docker + dockerregsitry
一、总体流程 部署: 开发机(mac) ip:11.11.11.11 docker:1.12.1 部署机(centos7) ip:10.211.55.4 docker:1.12.3 生产机(centos7) ip:10.211.55.3 docker:1.10.3(装k8s1.4的时候自带安装的版本) 总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry, 之后将该镜像推到生产机。
2420 0
|
jenkins 持续交付 Docker
第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
在开发机开发代码后提交到gitlab之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry之后将在k8s-master上执行rc、service的创建,进而创建Pod,从私服拉取镜像,根据该镜像启动容器 1 api.
2549 0
|
jenkins 持续交付 容器
阿里云容器服务Kubernetes之Jenkins X(2)-自动化CICD实践篇
本文主要演示基于阿里云容器服务Kubernetes和Jenkins-X-Platform创建、构建和发布一个Spring Boot应用。
6253 0
|
15天前
|
jenkins Devops Java
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第27天】在快速发展的软件开发领域,DevOps实践日益重要。Jenkins作为一款流行的开源自动化服务器,在持续集成(CI)和持续部署(CD)中扮演关键角色。本文通过案例分析,探讨Jenkins在Java项目中的应用,展示其自动化构建、测试和部署的能力,提高开发效率和软件质量。
39 2
|
3月前
|
jenkins 持续交付 开发者
自动化部署:使用Jenkins和Docker实现持续集成与交付
【8月更文挑战第31天】本文旨在为读者揭示如何通过Jenkins和Docker实现自动化部署,从而加速软件开发流程。我们将从基础概念讲起,逐步深入到实际操作,确保即使是初学者也能跟上步伐。文章将提供详细的步骤说明和代码示例,帮助读者理解并应用这些工具来优化他们的工作流程。
|
3天前
|
运维 jenkins Java
Jenkins在持续集成与持续部署中的价值
Jenkins在持续集成与持续部署中的价值
|
16天前
|
jenkins Devops 测试技术
DevOps实践:Jenkins在持续集成与持续部署中的价值
【10月更文挑战第26天】随着DevOps理念的普及,Jenkins作为一款开源自动化服务器,在持续集成(CI)与持续部署(CD)中发挥重要作用。本文通过某中型互联网企业的实际案例,展示了Jenkins如何通过自动化构建、持续集成和持续部署,显著提升开发效率、代码质量和软件交付速度,帮助企业解决传统手工操作带来的低效和错误问题。
44 4