

小程序结合Jenkins实现CICD
source link: https://aoppp.com/xiao-cheng-xu-jie-he-jenkinsshi-xian-cicd/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.

小程序结合Jenkins实现CICD
在将公司前后端大多数项目都接入了 CI
流程后,发布效率快的一批。但是我最近发现我司在微信小程序这的发布,居然还是手动??? 程序员天生就对重复的事情敏感,这些事情得想个法弄成自动的。
但是在微信小程序出现,上传体验版/生成开发版都需要利用微信开发者工具,最开始是依赖于人手动去点 ide
上的上传按钮,再然后就是,微信开放出了命令行调用接口
之前看了一些利用 Mac Os + Jenkins
做 CI
,这个方案并不能够适用所有项目组,我们重点还是希望通过服务器进行 CI
,于是就去翻找小程序文档以及网上文章, 天无绝人之路,发现小程序的文档多了 CI
这一项
miniprogram-ci 从 1.0.28 开始支持第三方平台开发的上传和预览,调用方式与普通开发模式无异
整理目录结构
因为 miniprogram-ci
需要依赖于 npm
安装,但是又不需要与我们项目的包相关,所以就有了如下结构
npm install miniprogram-ci
获取小程序代码上传秘钥
在公众平台的开发管理 -> 开发设置中,需要先将秘钥下载下来,我们可以写入到项目的根目录的 ci-private.key
文件中,加入版本管理,因为我们有 IP
白名单,所以泄露也不打紧
配置本次版本更新内容
我们将配置放入到根目录中,方便自动更新的时候获取
- 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
这样就是可以成功了,然后我们利用 Jenkins
让我提交代码时自动发布体验版
接入Jenkins
- git秘钥等凭据添加
- 安装钉钉通知插件、NodeJs环境插件
- 配置钉钉机器人、Node别名
- 创建流水线项目
- 项目基本配置 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提交测试
钉钉通知成功
如果上传失败,要记得去增加 IP白名单
本文为作者原创或转载,允许转载,由憧憬在 aoppp.com发布 转载请说明文章出处。
您的支持是对我最大的鼓励!
发表于:2021-05-08 作者:憧憬。 关注互联网以及分享全栈工作经验的原创个人博客和技术博客,热爱编程,极客精神
Recommend
-
50
从2018年9月11日开始写高级篇到今天11月21日,短短2个月高级的收获还是满满的。docker命令越来越熟悉,jenkins在中级篇里没有涉及到,这次也把jenkins的内容给补充了,在中级篇里k8s,一直安装很多坑,到现在可以顺利的安装k8s,而且一步...
-
20
lyonger...
-
5
CICD_DEMO完整版示例 2020-09-17
-
15
ArgoCD二:一个完整的CICD流程例子 此篇文章演示一个完整的GitOps工作流程,使用Gitlab-CI+ArgoCD来实现,其中Gitlab-CI主要...
-
5
Issues · NishkarshRaj/CICD-Using-Jenkins · GitHub Clear current search query, filters, and sorts Author...
-
11
CICD Doesn’t Have To Be a Four Letter Word for Oracle Database Developers ...
-
6
A CICD pipeline that pushes code to cpanel or any other server via FTP or SSH The code is on
-
10
jenkins结合gitlab实现pipline的自动构建部署 精选 原创 部署jenkins与gitlab服务就在这不...
-
1
Feb 11, 2020 · cloudk8s+gitlab实现cicd目前 Gitlab11 已经支持了 Kubernetes Runner, 任务可以跑在 Pod 中。...
-
4
DHorse(K8S的CICD平台)的实现原理 首先,本...
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK