| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101 |
- sharedLibsPath = "${env.WORKSPACE}/sharedLibs"
- backup_destination = '/var/jenkins_home/backups'
- backup_targetFile = 'dockerImage.tar'
- // 获取镜像URL
- generateFullImageUri = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
- return "${DOCKER.registry}/${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
- }
- // 获取镜像名
- generateImageName = {Map DOCKER, String base_branch, String BUILD_NUMBER ->
- return "${DOCKER.image}:${base_branch}-${BUILD_NUMBER}"
- }
- def generateImageName(String imageName, String base_branch, String BUILD_NUMBER) {
- return "${imageName}:${base_branch}-${BUILD_NUMBER}"
- }
- def generateDockerfile(Object SERVICE, String pathOfDockerfile='projdir') {
-
- def module = SERVICE.module == null ? '' : (SERVICE.module[-1] == '/' ? SERVICE.module : SERVICE.module + '/')
- echo "-----> Generating Dockerfile: ${pathOfDockerfile}/Dockerfile ..."
- sh """cat > ${pathOfDockerfile}/Dockerfile<<EOF
- FROM node:14-slim as BUILD
- LABEL stage=STATICRES-BUILD
- COPY ./admin /admin
- WORKDIR /admin
- RUN npm config set registry https://registry.npm.taobao.org && npm install && npm run build
- FROM nginx:1.23-alpine as FINAL
- # configs for default
- COPY ./default.conf /etc/nginx/conf.d
- COPY ./html /usr/share/nginx/html
- # configs for partner.hobbystocks.cn
- COPY ./partner.hobbystocks.cn.conf /etc/nginx/conf.d
- COPY --from=BUILD /admin/dist /usr/share/nginx/partner/admin
- EOF
- """
- return pathOfDockerfile
- }
- def buildDockerImage(Object SERVICE, Object DOCKER, String base_branch, projDir='projdir', String filter2Remove=null) {
- def imageUri = generateFullImageUri(DOCKER, base_branch, BUILD_NUMBER)
- echo "-----> Building docker image: ${imageUri} ..."
- dir(projDir) {
- docker.withRegistry("http://${DOCKER.registry}", "${DOCKER.push_credentialId}") {
- def imageName = generateImageName(DOCKER, base_branch, BUILD_NUMBER)
- def image = docker.build(imageName)
- image.push()
- sh "docker rmi ${imageName}"
- if(filter2Remove != null)
- sh "docker image prune --filter label=${filter2Remove} -f"
- }
- }
- return imageUri
- }
- def cleanDockerImage(String dockerImgName) {
- sh "docker rmi ${dockerImgName}"
- }
- // Jenkins pipeline stages
- def execute(CONFIG, base_branch, closures=[:]) {
- stage('source code check out') {
-
- println "loading ${sharedLibsPath}/gitUtil.groovy..."
- def gitUtils = load "${sharedLibsPath}/gitUtil.groovy"
- COMMIT_SHA = closures.GITCLONE == null ? gitUtils.clone(CONFIG.git, base_branch) : closures.GITCLONE()
- }
- stage("docker image build") {
- def projDir = 'projdir'
- if (closures.GENERATEDOCKERFILE != null)
- projDir = closures.GENERATEDOCKERFILE()
- else
- projDir = generateDockerfile(CONFIG.service) //default
- if (closures.BUILDIMAGE != null)
- imageUri = closures.BUILDIMAGE()
- else
- imageUri = buildDockerImage(CONFIG.service, CONFIG.docker, base_branch, projDir, 'stage=STATICRES-BUILD')
- }
- stage("run docker container") {
- if(closures.DOCKERRUN != null){
- closures.DOCKERRUN()
- return
- }
- }
- }
- return this
|