
在開發各種前端框架時,總會有些靜態檔案, 過去手動複製檔案到CDN太花時間了,所以花了些時間在Jenkins 寫個腳本,在建置過程中,將靜態檔案自動複製到CDN,並順便清除Cloudflare cache。
properties([pipelineTriggers([githubPush()])])
pipeline {
agent any
tools {nodejs "Node Core"}
options {
buildDiscarder logRotator(artifactDaysToKeepStr: '', artifactNumToKeepStr: '20', daysToKeepStr: '', numToKeepStr: '20')
disableConcurrentBuilds()
}
stages {
stage("GitHub Pull") {
steps {
script {
def branchName = CdnEnv
if (CdnEnv == "staging") {
branchName = "staging-master"
} else if (CdnEnv == "production") {
branchName = "master"
}
echo "CdnEnv value: ${env.CdnEnv}"
echo "branchName value: ${branchName}"
git branch: branchName, url: "https://[email protected]/iBuypowerUS/iBuypower.NextJS.git"
}
}
}
stage("Copy assets to content server ") {
steps {
powershell(script: """
robocopy \"${WORKSPACE}\\public\" \"\\\\192.168.0.20\\Content\\\\${CdnEnv}\\assets\" /E /MIR /MT:100 \r\n
""", returnStatus: true)
}
}
}
}
pipeline {
agent any
environment {
CLOUDFLARE_EMAIL = '[email protected]'
CLOUDFLARE_API_KEY = 'xxxxxxx'
CLOUDFLARE_ZONE_ID = 'xxxxxxxxxxxxxxxxxxxxxxxxx'
}
stages {
stage('Purge Cloudflare Cache') {
steps {
script {
// PowerShell script to purge Cloudflare cache
powershell """
\$headers = @{
"X-Auth-Email" = "${env.CLOUDFLARE_EMAIL}"
"X-Auth-Key" = "${env.CLOUDFLARE_API_KEY}"
"Content-Type" = "application/json"
}
\$body = @{
prefixes = @("${PrefixUrl}")
} | ConvertTo-Json
\$response = Invoke-RestMethod -Uri "https://api.cloudflare.com/client/v4/zones/${env.CLOUDFLARE_ZONE_ID}/purge_cache" -Method POST -Headers \$headers -Body \$body
Write-Host prefix: \"${PrefixUrl}\" - response: \$response
"""
}
}
}
}
}
stages {
stage('Copy Next JS public folder to CDN assets') {
steps {
script {
build job: 'Live - Copy Next JS public folder to CDN assets', parameters: [string(name: 'CdnEnv', value: "$cdnEnv")]
}
}
}
stage('Clear Cloudflare cache') {
steps {
script {
build job: 'Live - Clear Cloudflare cache' , parameters: [string(name: 'PrefixUrl', value: "content.ibuypower.com/$cdnEnv/assets")]
}
}
}
// Original process... ...
}
Jenkins在windows的安裝後,使用命令或者某些插件的時候容易出現權限錯誤的情況,此時因為使用的是jenkins賬戶,不是administrator管理員權限的賬戶,我們可以按Ctrl+windows鍵,輸入services.msc 在服務中右鍵選中並點擊jenkins服務,查看屬性對話框,切換登錄標簽,選中此賬戶登錄,里邊填寫administrator或者有權限的賬戶,密碼就是登錄密碼,此時重啟jenkins服務即可