通过 Jenkins 和 Docker 部署微信小程序,并实现自动构建、发布和版本更新,主要涉及以下几个步骤:
- 设置 Jenkins 环境
- 配置 GitLab 与 Jenkins 的集成
- 构建 Docker 镜像
- 部署和发布微信小程序
- 配置 Jenkins 自动构建
以下是详细的步骤说明:
1. 设置 Jenkins 环境
首先,确保你已经安装和配置了 Jenkins 服务器。假设你已经安装了 Jenkins,并且 Jenkins 能够正常运行。
安装 Jenkins 所需插件:
- Docker Plugin:用于在 Jenkins 中执行 Docker 操作。
- GitLab Plugin:用于集成 GitLab 仓库与 Jenkins。
- Pipeline Plugin:用于通过流水线(Pipeline)来定义构建过程。
在 Jenkins 上安装插件的方法:
- 进入 Jenkins Dashboard,点击 Manage Jenkins。
- 选择 Manage Plugins。
- 在 Available 标签页中,搜索并安装以下插件:
- GitLab Plugin
- Docker Pipeline Plugin
- Pipeline Plugin
2. 配置 GitLab 与 Jenkins 集成
确保你在 Jenkins 上配置了与 GitLab 的集成,以便 Jenkins 可以从 GitLab 获取代码并触发构建。
配置 GitLab Webhook
-
登录到你的 GitLab 仓库。
-
进入 Settings -> Webhooks。
-
添加一个新的 Webhook,输入 Jenkins 服务器的 URL,格式为:
http://<jenkins_url>/project/<jenkins_job_name>
例如:
http://localhost:8080/project/wechat-miniapp-build
-
选择 Push events 和 Merge requests,这样每次代码提交到 GitLab 时,Jenkins 会自动开始构建。
配置 GitLab 连接到 Jenkins
- 进入 Jenkins,点击 Manage Jenkins -> Configure System。
- 在 GitLab 配置部分,输入 GitLab 的 API URL 和 API Token。你需要创建一个 GitLab 访问令牌(Token):
- 在 GitLab 上,进入 User Settings -> Access Tokens,创建一个新的访问令牌。
- 保存设置后,你可以通过 GitLab Plugin 连接到 GitLab 仓库。
3. 构建 Docker 镜像
在 Jenkins 中创建一个 Pipeline 作业,用来构建 Docker 镜像并部署微信小程序。
Dockerfile 示例
首先,在你的微信小程序项目根目录下创建一个 Dockerfile
,用于构建 Docker 镜像。
# 使用 Node.js 镜像作为基础镜像
FROM node:16
# 创建并设置工作目录
WORKDIR /app
# 将当前目录下的项目文件复制到 Docker 容器中
COPY . .
# 安装依赖
RUN npm install
# 执行构建命令
RUN npm run build
# 暴露端口
EXPOSE 3000
# 启动微信小程序构建服务(例如,使用 Nginx 或其他方式)
CMD ["npm", "start"]
Jenkins Pipeline 脚本
创建一个 Jenkins Pipeline 来执行代码的拉取、Docker 镜像的构建和发布。
pipeline {
agent any
environment {
DOCKER_IMAGE = "wechat-miniapp"
DOCKER_REGISTRY = "your-docker-registry" // Docker registry 地址
}
stages {
stage('Checkout') {
steps {
// 从 GitLab 获取代码
git 'http://your_gitlab_repo_url.git'
}
}
stage('Build Docker Image') {
steps {
script {
// 构建 Docker 镜像
sh 'docker build -t ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest .'
}
}
}
stage('Push Docker Image') {
steps {
script {
// 将构建的镜像推送到 Docker Registry
sh 'docker push ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest'
}
}
}
stage('Deploy') {
steps {
script {
// 在服务器上拉取并运行 Docker 镜像
sh 'docker pull ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest'
sh 'docker run -d -p 3000:3000 ${DOCKER_REGISTRY}/${DOCKER_IMAGE}:latest'
}
}
}
}
post {
always {
// 构建结束后执行的操作,比如清理旧的容器
sh 'docker system prune -f'
}