一、Jenkins服务器添加配置
- 通过WinSCP连接访问Jenkins所在服务器
- 将以下文件复制到某个目录下,然后在当前目录启动控制台
文件下载地址(linux版):https://help.aliyun.com/zh/oss/developer-reference/install-ossutil#concept-303829 - 接着执行以下指令
chmod +x ossutil64
mv ossutil64 /usr/local/bin/ossutil
二、项目自动化构建脚本
在auto-deploy(自动化构建脚本)目录下添加prod目录
- build.sh
#!/bin/bash
echo $PATH
node -v
npm -v
pnpm -v
rm -rf ./node_modules
pnpm i
pnpm run build:release
upload.sh
echo $PATH
cd build
rm -rf projectName.tar.gz
tar -zcvf projectName.tar.gz *
cp projectName.tar.gz projectName-$(date -d today +"%Y.%m.%d")-release.tar.gz
/usr/local/bin/ossutil config -e oss-cn-shanghai.aliyuncs.com -i LTAxxxxxxxxxxxMAD -k Pc7xxxxxxxxxxxXzM
/usr/local/bin/ossutil cp -f projectName-$(date -d today +"%Y.%m.%d")-release.tar.gz oss://xxx-xx
- 添加Jenkins流水线脚本
import java.text.SimpleDateFormat;
import java.util.Date;
def now_date = new Date().format('yyyyMMdd');
def notifyStarted() {
emailext (
subject: "部署任务开始 '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """<p>开始'${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>部署项目: 项目名称</p>
<p>部署环境: ${deploy_env}</p>
<p>部署分支/Tag: ${git_tag}</p>
<p>Check console output at "<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
// recipientProviders: [[$class: 'DevelopersRecipientProvider']]
to: "${recepients}"
)
}
def notifySuccessful() {
emailext (
subject: "部署任务成功: '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """<p>成功'${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>部署项目: photovoltaics</p>
<p>部署环境: ${deploy_env}</p>
<p>部署分支/Tag: ${git_tag}</p>
<p>Check console output at "<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
to: "${recepients}"
)
}
def notifyFailed() {
emailext(
subject: "部署任务失败: '${env.JOB_NAME} [${env.BUILD_NUMBER}]'",
body: """<p>失败 '${env.JOB_NAME} [${env.BUILD_NUMBER}]':</p>
<p>部署项目: photovoltaics</p>
<p>部署环境: ${deploy_env}</p>
<p>部署分支/Tag: ${git_tag}</p>
<p>Check console output at "<a href='${env.BUILD_URL}'>${env.JOB_NAME} [${env.BUILD_NUMBER}]</a>"</p>""",
to: "${recepients}"
)
}
pipeline {
agent any
tools {
nodejs 'NodeJS_16.14.0'
}
stages {
stage('拉取代码') {
steps {
echo "开始拉取代码"
checkout(
[
$class: 'GitSCM',
branches: [[name: '$git_tag']],
doGenerateSubmoduleConfigurations: false,
extensions: [],
submoduleCfg: [],
userRemoteConfigs: [
[
credentialsId: 'xxxxx-xxxx-xxxx-xxxx-xxxxx',
url: 'http://xxx.xx/projectNmae.git']]])
echo "拉取代码结束"
}
}
stage('处理依赖及构建') {
steps {
script{
def projects = "projectName"
echo "${projects} 开始构建"
sh "bash ${env.WORKSPACE}/auto-deploy/${deploy_env}/build.sh"
echo "${projects} 构建结束"
}
}
}
stage('上传阿里云oss'){
steps {
echo "开始上传"
script{
def projects = params.deploy_projects
def deploy_servers = params.deploy_servers
echo "${projects} 开始上传"
sh "bash ${env.WORKSPACE}/auto-deploy/${deploy_env}/upload.sh"
echo "${projects} 上传结束"
}
echo "上传完成"
}
}
}
post {
failure {
notifyFailed()
}
success {
notifySuccessful()
}
}
}
- 查看是否推送成功
ossutil ls oss://xxx-xx/