• Jenkins 流水线语法自动部署


    Jenkins 流水线语法自动部署

    Jenkins自动编译自动部署要完成以下几个任务

    1、拥有NodeJS环境,执行npm i & npm run build指令,在工作空间打出dist包

    2、利用Dockfile制作以nginx为基础镜像的前端镜像

    3、镜像上传到镜像库

    4、在服务器上部署Docker镜像

    可以按如下步骤验证此功能。

    初始化Vue3.0工程

    创建本地vue3.0工程,并将代码提交到gitlab上。

    安装NodeJS插件

    如果还没安装NodeJS插件,先去系统的插件管理里面安装NodeJS插件。插件安装好了之后再去全局配置中配置NodeJS版本,并为之取一个别名(别名会在脚本中引用)。步骤参考Jenkins使用笔记

    我本地安装的Node是14.17.5版本,所以Jenkins全局配置此版本,别名为Nodev14.17.5

    创建Jenkinsfile

    Jenkinsfile采用声明式脚本语法。

    pipeline {
        agent any
        stages {
            stage('Stage 1: Build') {
                steps {
                    sh 'echo 1.exec Nodev14.17.5.'
                    nodejs("Nodev14.17.5") {
                        sh("node -v && npm -v")
                        sh("npm install")
                        sh("npm run build")
                    }
                }
            }
            stage('Stage 2: Mack image') {
                steps {
                    echo '1.shell chmod.'
                    sh 'chmod 777 ./cicd/*.sh'
                    echo '2.exec mackimage'
                    sh './cicd/mackimage.sh'
                }
            }
        }
        post {
            always {
                echo 'This will always run'
            }
            success {
                echo 'This will run only if successful'
            }
            failure {
                echo 'This will run only if failed'
            }
        }
    }
    

    nodejs("Nodev14.17.5")括起来的区域可使用npm指令。

    第二步Docker命令太多,所以编写成shell脚本,归档在/cicd/下。注意,执行shell脚本前应赋予用户可执行权限,否则会报权限相关错误,此处简单处理为所有用户都能执行chmod 777

    如果对安全要求很严格,777权限可能不合适了。应修改Jenkins用户为root权限或者给jenkins用户添加对应文件权限。(我使用Docker部署的jenkinsci/blueocean,/etc下没有sysconfig目录,找不到对应权限配置的文件)

    makimage.sh内容如下:

    docker -v
    #登录镜像库
    docker login -u longdage -p xxxx 
    #制作docker镜像,注意末尾有个[.]指代Dockerfile操作的文件路径
    docker build  -t automatic-deployment . 
    #打标签,可以在build步骤一步到位
    docker tag automatic-deployment longdage/automatic-deployment:v0.0.1 
    #将镜像传到镜像库
    docker push longdage/automatic-deployment:v0.0.1 
    #删除老实例,重做新镜像实例
    docker stop myApp || true \
     && docker rm myApp || true \
     && docker run -d -p 8989:80 --name myApp longdage/automatic-deployment:v0.0.1
    #退出登录
    docker logout
    

    Dockerfile内容如下:

    FROM nginx
    COPY dist/ /usr/share/nginx/html
    

    nginx为基础镜像,将前端包dist目录下所有静态资源拷贝到nginxhtml目录下。nginx默认配置自动监听http80端口和https443端口,创建docker容器时要映射80端口或者443端口。

    也可以替换成自定义nginx.conf文件,Dockerfile多拼接一个替换步骤,此处不做详细记录。

    附录

    问题1:jenkins中npm安装慢

    换npm源,可以维护自己的内源,100M+的下载速度。

    在Jenkins使用Docker

    Jenkins可以使用docker插件直接调用相关API进行构建部署。

    详情参考

    敌人总是会在你最不想它出现的地方出现!
  • 相关阅读:
    我和Socket的第一次亲密接触
    JS获取浏览器高度,JS获取屏幕高度,JS获取宽屏
    GridControl默认不选中任何行样式
    C# Image和Byte[]互相转换
    导出Excel神器最终版
    Log4NET SQL配置
    Log4NET Oracle 配置
    oracle客户端配置
    pgsql环比和同比计算
    02_接管Activiti流程用户及用户组
  • 原文地址:https://www.cnblogs.com/longhx/p/15741685.html
Copyright © 2020-2023  润新知