国内不同版本的nodejs下载
国内不同版本的open jdk下载
新版本jdk:
Index of /Adoptium/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror
老版本jdk:
国内不同版本的gradle下载
不同版本的maven下载
使用docker compose安装
services:
jenkins:
image: jenkins/jenkins:lts-jdk11 # 使用 LTS 长期支持版
container_name: jenkins
restart: unless-stopped
ports:
- "7000:8080" # Web 访问端口
- "7001:50000" # Agent 通信端口
volumes:
# 使用宿主机的localtime和timezone,后面的localtime:ro和timezone:ro表示只读模式
- /etc/localtime:/etc/localtime:ro
- /etc/timezone:/etc/timezone:ro
- ./jenkins_data:/var/jenkins_home # 持久化数据卷
- /var/run/docker.sock:/var/run/docker.sock # 允许容器内使用宿主机 Docker
- /usr/bin/docker:/usr/bin/docker
- ./java:/opt/java
- ./node:/opt/node
environment:
- TZ=Asia/Shanghai # 设置时区
- JAVA_OPTS=-Dhudson.model.UpdateCenter.updateCenterUrl=https://mirrors.huaweicloud.com/jenkins/updates/dynamic-stable-2.462.3/ -Duser.timezone=Asia/Shanghai -Dorg.apache.commons.jelly.tags.fmt.timeZone=Asia/Shanghai -Dhudson.model.DownloadService.noSignatureCheck=true
容器启动之后,容器内部的/etc/localtime和date -R可能不一致,此时应该以date -R的为准
docker容器时区问题
查看所有容器的时区
docker ps --format '{{.Names}}' | xargs -I {} sh -c 'echo -n "{}: " && docker exec {} date'
查看单个容器时区(如果与宿主机: date -R的结果不一致,就说明要调整)
docker exec jenkins date -R
查看容器中运行中的java时区
docker exec jenkins bash -c "java -XshowSettings:properties -version"
进入容器中查看java运行状态
docker docker exec -it jenkins /bin/bash
ps -ef | grep java
jps -lv
jenkins pipeline 示例
pipeline {
agent any
stages {
stage('清理工作空间') {
steps {
deleteDir() // 删除当前目录(通常是工作空间根目录)
}
}
stage('代码拉取') {
steps {
git branch:'master', credentialsId: 'pan-gitee-account-pwd', url: 'https://gitee.com/free_pan/ms-skeleton-vue3.git'
sh '''
git branch --show-current
'''
echo '代码拉取成功'
}
}
stage('设置环境变量') {
steps {
script {
// 动态获取当前分支名, 并设置环境变量, 避免semantic-release 在jenkins中,无法获取到git当前的分支名, 导致的无法升级版本号的问题
// 详见: https://github.com/semantic-release/semantic-release/issues/1090
env.GIT_BRANCH = sh(
script: 'git branch --show-current',
returnStdout: true
).trim()
echo "当前分支: ${env.GIT_BRANCH}"
}
}
}
stage('执行pnpm install') {
steps {
nodejs(cacheLocationStrategy: workspace(), nodeJSInstallationName: '20.19.0') {
echo "当前分支: ${env.GIT_BRANCH}"
sh '''
node --version
npm config set registry https://registry.npmmirror.com/
corepack enable
corepack prepare pnpm@8.15.9 --activate
pnpm config set registry https://registry.npmmirror.com/
// 设置pnpm下载的包, 存放目录(该目录是通过挂载卷实现的),避免单个容器磁盘空间不断变大的问题, 也能减少重复下载
// --frozen-lockfile: 严格根据lock文件下载包, 加快下载速度, 以及避免包版本冲突问题
// --shamefully-hoist: 避免软链接的开销
export PNPM_STORE_PATH=/var/jenkins_home/.pnpm-store
pnpm install --frozen-lockfile --shamefully-hoist --store-dir $PNPM_STORE_PATH
'''
echo 'pnpm install执行成功'
}
}
}
stage('执行前端打包') {
steps {
nodejs(cacheLocationStrategy: workspace(), nodeJSInstallationName: '20.19.0') {
sh '''
node --version
npm config set registry https://registry.npmmirror.com/
corepack enable
corepack prepare pnpm@8.15.9 --activate
pnpm config set registry https://registry.npmmirror.com/
export PNPM_STORE_PATH=/var/jenkins_home/.pnpm-store
pnpm run build-only
pnpm run semantic-release-local
'''
echo 'pnpm install执行成功'
}
}
}
stage('变更推送git仓库') {
steps {
withCredentials([
gitUsernamePassword(credentialsId: 'pan-gitee-account-pwd', gitToolName: 'Default')
]){
sh """
git rev-parse --abbrev-ref HEAD
git log -n 10 --oneline
git push origin master:master
"""
echo 'git push执行成功'
}
}
}
}
}