Bootstrap

jenkins使用Docker Pipeline插件

jenkins部署请参考以下文档

Docker部署jenkins_jenkins docker部署-CSDN博客        

1.安装Docker Pipeline && Publish Over SSH

1.1点击设置---点击插件

1.2 搜索 Docker Pipeline进行安装  Publish Over SSH  也是同理操作

因为我这边安装了 所以搜索不出来,安装后的插件可以在installed  plugins查看

这边查看已经安装完成了

2.创建流水线

2.1 点击新建任务--选择流水线模式

2.2这里我们以前端项目为例

jenkinsfile详情


pipeline {
    agent any
    environment {
        image_name = "nanbindaping"
        image_host = '10.10.111.23:888'
        image_passwd = "admin@123"
        image_user = "admin"
        image_data = "test"
		title = "南滨大屏工程构建"
		prot = "80"
		dev ="dev"
    }
    stages {
        stage('拉取代码') {
            agent { 
                docker { 
                    image 'node:14-alpine'
                    reuseNode true
                    }
            }
            steps {
                //checkout scmGit(branches: [[name: '${dev}']], extensions: [], 
                //userRemoteConfigs: [[credentialsId: 'd9e60a0d-7b25-453a-99c7-da773cd14808', 
                //url: 'https://gitee.com/tongyinhao/test01.git']])
                
                checkout scmGit(branches: [[name: '*/DEV']], extensions: [], 
                userRemoteConfigs: [[credentialsId: 'e184bd97-e924-42a3-a92e-ea15ba24d4f1', 
                url: '[email protected]:risenenergy/risheng-nab-screen.git']])
                echo "\n--------------------------打包完成&&开始编译----------------------------\n"
            }
            
              
        }
        stage('打包代码') {
            agent { 
                docker { 
                    image 'node:14-alpine'
                    reuseNode true
                    } 
                
            }
            steps {
                sh 'pwd &&  ls -l'
                //sh 'npm config set registry https://registry.npmjs.org/'
                //sh 'npm config set proxy false && npm cache clean'
                sh 'npm config set registry https://registry.npmmirror.com/'
                sh 'npm install && npm run build '
                echo "\n------------------------编译完成开始构建镜像-----------------------------\n"
                
            }
            
        }
              
        stage('构建镜像') {
            steps {
                sh 'pwd && ls -l '
                
                //sh 'cp -r dist ./devops_build'
            
                //sh 'docker -v '
                // 构建镜像
                sh 'docker build -t ${image_host}/${image_data}/${image_name}:${dev} .'
                // 登录地址
                //sh 'docker login -u${image_user} -p${image_passwd} ${image_host}'
                //推送镜像
                //sh 'docker push  ${image_host}/${image_data}/${image_name}:${dev}'
                
                sh 'docker save -o /root/nanbing.tar.gz ${image_host}/${image_data}/${image_name}:${dev} '
                
                ## 0.0.0.0写服务运行的地址
                sh 'scp /root/nanbing.tar.gz  0.0.0.0:/root '
                sh 'rm -rf /root/nanbing.tar.gz '
                sh 'docker rmi  ${image_host}/${image_data}/${image_name}:${dev}'
                
                echo "\n---------------------镜像推送完成------------------------------\n"
                
            }
        }
        stage('部署应用') {
            steps {
                echo '\n-------------------------现在就开始部署----------------------\n'
				
				sh 'pwd &&  ls -l'
                sshPublisher(publishers: [sshPublisherDesc(configName: "nanbin-screen01", 
                transfers: [sshTransfer(cleanRemote: false, excludes: '', 
                execCommand: " chmod +x  /root/work/deploy.sh && dos2unix /root/work/deploy.sh &&bash /root/work/deploy.sh  ${image_host} ${image_data} ${image_name} ${dev}  ${prot}", 
                execTimeout: 1080000, flatten: false, makeEmptyDirs: true, 
                noDefaultExcludes: false, patternSeparator: '[, ]+', 
                remoteDirectory: "/root/work/", remoteDirectorySDF: false, 
                removePrefix: '', sourceFiles: "deploy.sh")], usePromotionTimestamp: false, 
                useWorkspaceInPromotion: false, verbose: true)])
        
            }    
        }

    }

}




3 jenkinsfile说明

3.1变量说明

    environment {
        image_name = "nanbindaping"
        image_host = '10.10.111.23:888'
        image_passwd = "admin@123"
        image_user = "admin"
        image_data = "test"
		title = "南滨大屏工程构建"
		prot = "80"
		dev ="dev"
    }

全局变量方便后面进行使用

3.2 docker字段说明

                docker { 
                    image 'node:14-alpine'
                    reuseNode true
                    }

这里是指定我们需要的nodejs的版本 可以根据前端的项目需求自行进行调节镜像的版本,比如前端需要18版本的nodejs的版本 ,只需要在安装jenkins的机器上拉取一个18版本的镜像,然后这image这里做更改即可,当设置reuseNode设置为true时:不会创建新的工作区,当前代理的当前工作区将被装入容器,且将在同一节点上启动该容器,所以整体数据将被同步

3.3 拉取代码说明

        stage('拉取代码') {
            agent { 
                docker { 
                    image 'node:14-alpine'
                    reuseNode true
                    }
            }
            steps {                
                checkout scmGit(branches: [[name: '*/DEV']], extensions: [], 
                userRemoteConfigs: [[credentialsId: 'e184bd97-e924-42a3-a92e-ea15ba24d4f1', 
                url: '[email protected]:risenenergy/risheng-nab-screen.git']])
                echo "\n--------------------------打包完成&&开始编译----------------------------\n"
            }
            
              
        }

steps下的checkout  我们可以根据jenkins提供的模版进行生成,请参考以下示例

点击流水线语法

选择对应的checkout

填写模版生成脚本

3.4 打包代码说明

        stage('打包代码') {
            agent { 
                docker { 
                    image 'node:14-alpine'
                    reuseNode true
                    } 
                
            }
            steps {
                sh 'pwd &&  ls -l'
                sh 'npm config set registry https://registry.npmmirror.com/'
                sh 'npm install && npm run build '
                echo "\n------------------------编译完成开始构建镜像-----------------------------\n"
                
            }
            
        }

这里就是替换了一下源地址然后安装编译

3.5 镜像构建说明

        stage('构建镜像') {
            steps {
                sh 'pwd && ls -l '
                
                // 构建镜像
                sh 'docker build -t ${image_host}/${image_data}/${image_name}:${dev} .'
                // 登录地址
                //sh 'docker login -u${image_user} -p${image_passwd} ${image_host}'
                //推送镜像
                //sh 'docker push  ${image_host}/${image_data}/${image_name}:${dev}'
                
                sh 'docker save -o /root/nanbing.tar.gz ${image_host}/${image_data}/${image_name}:${dev} '
                
                ## 0.0.0.0改成服务运行的节点
                sh 'scp /root/nanbing.tar.gz  0.0.0.0:/root '
                sh 'rm -rf /root/nanbing.tar.gz '
                sh 'docker rmi  ${image_host}/${image_data}/${image_name}:${dev}'
                
                echo "\n---------------------镜像推送完成------------------------------\n"
                
            }
        }

这里因为push镜像过于缓慢,所以直接将镜像打包直接推送到要运行容器的节点上

3.6 应用部署说明

        stage('部署应用') {
            steps {
                echo '\n-------------------------现在就开始部署----------------------\n'
				
				sh 'pwd &&  ls -l'
                sshPublisher(publishers: [sshPublisherDesc(configName: "nanbin-screen01", 
                transfers: [sshTransfer(cleanRemote: false, excludes: '', 
                execCommand: " chmod +x  /root/work/deploy.sh && dos2unix /root/work/deploy.sh &&bash /root/work/deploy.sh  ${image_host} ${image_data} ${image_name} ${dev}  ${prot}", 
                execTimeout: 1080000, flatten: false, makeEmptyDirs: true, 
                noDefaultExcludes: false, patternSeparator: '[, ]+', 
                remoteDirectory: "/root/work/", remoteDirectorySDF: false, 
                removePrefix: '', sourceFiles: "deploy.sh")], usePromotionTimestamp: false, 
                useWorkspaceInPromotion: false, verbose: true)])
        
            }    
        }

这块部署应用是依赖Publish Over SSH 插件 先对部署服务进行免密认证

点击设置点击系统  找到Publish Over SSH 进行配置 

配置完成后配置流水线脚本模版  注意如果没有安装Publish Over SSH  是不会有这个脚本生成的模版的

点击下方生成脚本添加到jenkinsfile上

配置完成后开始构建

;