讲讲前端jenkins部署流程

482 阅读3分钟

我也是很久没写过文章了,刚好公司最近一直在部署项目,我这边刚好参与,所以想把自己部署的流程写下来,共大家参考,好废话不多说开整。 项目这块我就不说了,相信大家已经参与到部署这块,那项目应该是已经了解知道把项目打包成静态文件了 首先:要跟公司的运维人员要一个jenkins账号,因为一般项目的发版都需要运维人员,如果没有需要自己整一个,接下来是登录jenkins后的页面 由于公司的硬件要求,我偷偷加了点马赛克,望大佬谅解。 如上图,这边可以自己新建一个项目点击New Item,注意这里新建的项目要点流水线如下图 然后在点OK就完事了。到这我们的项目算是新建完成了,接下来想要在jenkins上构建,走流水线工程化,需要在我们的项目下配置如图所示点击configure配置项,进入配置项目直接拉到最下边,其他的配置不东,如图 也就是拉到Pipeline这项,按选择配置项,第一项Definition选择Pipeline script from SCM,第二项SCM选择GIT,这里git是一个链接配置,我下边把代码放出来,然后是Credentials这项是选有权限的人员(一般选择自己),Branches to build是选择git链接的分支,最下边还有一项Script Path是git链接的脚本名称. git链接的配置脚本 `node { def label = "mypod-${UUID.randomUUID().toString()}" def git_link = "git.xxx.com/xxx/xxxx.gi…" def branch = '*/develop' def app_name = 'smc-core-web' def imageTag = "latest"

podTemplate(label: label, cloud: 'kubernetes',
    containers: [
        containerTemplate(
            name: 'jnlp', 
            image: '10.58.239.195/devops/jenkins-slave-node:v1.2', 
            alwaysPullImage: false, 
            // args: '${computer.jnlpmac} ${computer.name}'
        ),
    ],
    volumes: [
        hostPathVolume(mountPath: '/var/run/docker.sock',hostPath: '/var/run/docker.sock'),
        hostPathVolume(mountPath: '/usr/bin/docker',hostPath: '/usr/bin/docker'),
        hostPathVolume(mountPath: '/usr/lib/libdevmapper.so.1.02',hostPath: '/lib64/libdevmapper.so.1.02'),
        hostPathVolume(mountPath: '/usr/lib/libltdl.so.7',hostPath: '/usr/lib/x86_64-linux-gnu/libltdl.so.7'),
    ]
) {
    node(label) {
        stage('Checkout') {
            checkout([$class: 'GitSCM', branches: [[name: "${branch}"]], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: 'GITLIB_ID', url: "${git_link}"]]])
        }
        stage('Build&Push') {
            sh """npm config list

npm config set registry http://10.58.248.195/repository/npm/ #npm config list

#npm install node-sass --sass_binary_site=npm.taobao.org/mirrors/nod… #npm install node-sass --unsafe-perm=true --allow-root #npm install chalk --unsafe-perm=true --allow-root npm install --ignore-scripts --unsafe-perm=true --allow-root npm -U install -g --unsafe-perm=true --allow-root

npm run build:prod --unsafe-perm=true --allow-root

            """
        }
        
        stage('Build&Push') {
            withCredentials([usernamePassword(credentialsId: 'Harbor_195', passwordVariable: 'password', usernameVariable: 'username')]) {
                sh """

docker login -u usernamepusername -p password http://10.58.239.195/ docker build -t 10.58.239.195/secp-smc/dev/appname:{app_name}:{imageTag} . docker push 10.58.239.195/secp-smc/dev/appname:{app_name}:{imageTag} """ } }

        stage('Deploy') {
            sshPublisher(publishers: [sshPublisherDesc(configName: 'lec_dev_deploy_host', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''

kubectl patch deployment smc-web-server -p "{\"spec\":{\"template\":{\"metadata\":{\"annotations\":{\"date\": \"date +'%s'\"}}}}}" -n secp ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } } } }这里说下变化的地方 1.git_link:是你需要打包的git的项目地址 2.branch:是你需要打包的项目的分支 3.app_name:是你项目的名字 接下来是这个地方stage('Build&Push') { withCredentials([usernamePassword(credentialsId: 'Harbor_195', passwordVariable: 'password', usernameVariable: 'username')]) { sh """ docker login -u usernamepusername -p password http://10.58.239.195/ docker build -t 10.58.239.195/secp-smc/dev/appname:{app_name}:{imageTag} . docker push 10.58.239.195/secp-smc/dev/appname:{app_name}:{imageTag} """ } }`

10.58.239.195/secp-smc/dev/这是镜像中的路径(这块是运维配的,这块也不是很懂,如果没有运维,我自己的理解是这块是你服务器的路径) 还有最后这块 stage('Deploy') { sshPublisher(publishers: [sshPublisherDesc(configName: 'lec_dev_deploy_host', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: ''' kubectl patch deployment smc-web-server -p \"{\\\"spec\\\":{\\\"template\\\":{\\\"metadata\\\":{\\\"annotations\\\":{\\\"date\\\": \\\"date +'%s'\\\"}}}}}\" -n secp ''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)]) } 这里的configName:这里是运维配置的(我的理解这里应该是一个文件名) 这里的smc-web-server是文件名,后边的secp是目录(换句话说就是在哪个目录下)。 讲到这基本就结束了,后边还有nacos配置,还有yml文件配置,我在这就不赘述了,怕大佬喷。 希望大佬帮忙指点其中不妥的地方,及时修正,免得误导他人,再次谢谢。