持续集成交付CICD:Jenkins使用GitLab共享库实现前端项目镜像构建

目录

一、实验

[1. GitLab修改项目文件与Harbor环境确认](#1. GitLab修改项目文件与Harbor环境确认)

2.Jenkins使用GitLab共享库实现前端项目镜像构建

3.优化CI流水线封装Harbor账户密码

4.Jenkins再次使用GitLab共享库实现前端项目镜像构建


一、实验

1. GitLab修改项目文件与Harbor环境确认

(1)环境

表1 主机

|---------|--------------------------------------------------------------------------------|----------|---------------------|---------------------------------------------------------------------------------------|
| 主机 | 架构 | 版本 | IP | 备注 |
| jenkins | jenkins 主节点 | 2.414.2 | 192.168.204.15:8080 | gitlab runner (从节点) |
| | harbor私有仓库 | 1.2.2 | 192.168.204.15 | |
| gitlab | gitlab 主节点 | 12.10.14 | 192.168.204.8:82 | jenkins slave (从节点) |
| | sonarqube | 9.6 | 192.168.204.8:9000 | |

(2)GitLab共享库新建k8sci.jenkinsfile

(3) 查看目录

(4)修改k8sci.jenkinsfile

bash 复制代码
@Library("mylib@master") _
import org.devops.*


def checkout = new Checkout()
def build = new Build()
def unittest = new UnitTest()
def sonar = new Sonar()


pipeline {
    agent { label "build"}

    options {
        skipDefaultCheckout true
    }
    stages{
        stage("Checkout"){
            steps{
                script {
                    println("GetCode")
                    checkout.GetCode("${env.srcUrl}","${env.branchName}")
                }
            }
        }
        stage("build"){
            steps{
                script{
                    println("Build")
                    build.CodeBuild("${env.buildTool}")
                }
            }

        }

        stage("UnitTest"){
            steps{
                script{
                    println("Test")
                    unittest.CodeTest("${env.buildTool}")
                }
            }

        }
        stage("SonarScan"){
            steps {
                script {
                    groupName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1].split("_")[0]
                    sonar.CodeSonar("${env.buildTool}",projectName,groupName)
                }

            }

        }
        stage("PushImage"){
            steps {
                script {
                    repoName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1].split("_")[0]
                    env.registry = "192.168.204.15"
                    env.imageName = "${env.registry}/${repoName}/${projectName}:${env.branchName}"
                   
                        sh """
                            #重写HTML首页
                            echo "${env.imageName}" > dist/index.html 
    
                            #构建镜像
                            docker build -t ${env.imageName} .
                           
                            #登录镜像仓库
                            docker login -u admin -p Harbor12345 ${env.registry}
                            
                            #上传镜像
                            docker push  ${env.imageName}
    
                            #删除镜像
                            sleep 2
                            docker rmi ${env.imageName}
                        """



                }

            }

        }

    }

}

(5)前端项目新增Dockerfile

bash 复制代码
FROM nginx:1.17.7

COPY dist/ /usr/share/nginx/html

(6)Harbor确认devops03项目

2.Jenkins使用GitLab共享库实现前端项目镜像构建

(1)Jenkins新建流水线

(2)取消构建触发器

(3)修改SCM脚本路径

(4)手动构建前端项目流水线

(5)成功

(6)查看Blue Ocean

(7)Harbor已上传前端项目镜像

(8)本地拉取镜像测试

bash 复制代码
docker pull 192.168.204.15/devops03/devops03-devops-ui:master

docker run -itd --name devops03demo1 -p 8092:80 192.168.204.15/devops03/devops03-devops-ui:master

curl http://127.0.0.1:8092

(9)删除容器

bash 复制代码
docker rm devops03demo1 -f

3.优化CI流水线封装Harbor账户密码

(1)Jenkins新建凭据

(2)生成流水线脚本

(3)Jenkins新建视图

(4)列表添加流水线项目

(5)GitLab共享库修改k8sci.jenkinsfile

bash 复制代码
@Library("mylib@master") _
import org.devops.*


def checkout = new Checkout()
def build = new Build()
def unittest = new UnitTest()
def sonar = new Sonar()


pipeline {
    agent { label "build"}

    options {
        skipDefaultCheckout true
    }
    stages{
        stage("Checkout"){
            steps{
                script {
                    println("GetCode")
                    checkout.GetCode("${env.srcUrl}","${env.branchName}")
                }
            }
        }
        stage("build"){
            steps{
                script{
                    println("Build")
                    build.CodeBuild("${env.buildTool}")
                }
            }

        }

        stage("UnitTest"){
            steps{
                script{
                    println("Test")
                    unittest.CodeTest("${env.buildTool}")
                }
            }

        }
        stage("SonarScan"){
            steps {
                script {
                    groupName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1].split("_")[0]
                    sonar.CodeSonar("${env.buildTool}",projectName,groupName)
                }

            }

        }
        stage("PushImage"){
            steps {
                script {
                    repoName = "${JOB_NAME}".split("/")[0]
                    projectName ="${JOB_NAME}".split("/")[-1].split("_")[0]
                    env.registry = "192.168.204.15"
                    env.imageName = "${env.registry}/${repoName}/${projectName}:${env.branchName}"
                    withCredentials([usernamePassword(credentialsId: '8c662308-4991-4576-9826-74a5417de685', passwordVariable: 'DOCKER_PASSWD', usernameVariable: 'DOCKER_USER')]) {
                        sh """
                            #重写HTML首页
                            echo "${env.imageName}" > dist/index.html 
    
                            #构建镜像
                            docker build -t ${env.imageName} .
                           
                            #登录镜像仓库
                            docker login -u ${DOCKER_USER} -p ${DOCKER_PASSWD} ${env.registry}
                            
                            #上传镜像
                            docker push  ${env.imageName}
    
                            #删除镜像
                            sleep 2
                            docker rmi ${env.imageName}
                        """
                    }


                }

            }

        }

    }

}

4.Jenkins再次使用GitLab共享库实现前端项目镜像构建

(1)GitLab前端项目新建RELEASE-1.1.5分支

(2)Jenkins手动构建流水线

(3)成功

(4)Blue Ocean查看

(5)Harbor已上传前端项目镜像

相关推荐
IAR Systems6 天前
松下电工借助IAR CI/CD解决方案,实现品质与效率双重飞跃
ci/cd
Cherry的跨界思维6 天前
【AI测试全栈:质量】47、Vue+Prometheus+Grafana实战:打造全方位AI监控面板开发指南
vue.js·人工智能·ci/cd·grafana·prometheus·ai测试·ai全栈
Aliex_git6 天前
Dockerfile 优化实践笔记
笔记·学习·gitlab
海兰6 天前
Jina Embeddings V5 Text + Elasticsearch 9.x 本地部署指南
elasticsearch·jenkins·jina
luod6 天前
Docker 快速安装Jenkins
java·docker·jenkins
小道仙976 天前
jenkins对接、jenkins-rest
java·servlet·jenkins·jenkins-rest
成为你的宁宁6 天前
Jenkins 自动化部署前后端分离若依项目全攻略:涵盖环境配置、Maven/Node.js 工具安装、GitLab 项目协同,及前后端构建、服务器推送与代码更新验证全步骤
node.js·自动化·gitlab·jenkins·maven
声声长乐6 天前
Jenkins + Docker 完整部署指南
ubuntu·docker·jenkins
古斯塔夫歼星炮6 天前
Dify + Jenkins 实现AI应用持续集成与自动化部署
ci/cd·jenkins·dify
codingWhat7 天前
手把手系列之——前端工程化
ci/cd·devops·前端工程化