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进行构建部署。

详情参考

上一篇:Proj FuzzViz Paper Reading: An Architecture-Tracking Approach to Evaluate a Modular and Extensible F


下一篇:jenkins主题简单美化