暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

docker 中运行的 jenkins 使用 npm 构建 Node.js 应用

运维点滴记录 2020-04-29
1164

一、jenkins 的安装

配置要求

  • 最小 256MB 内存,推荐 512MB 以上

  • 10GB硬盘空间,用于安装 Jenkins、Docker 镜像和容器

在 Docker 中运行 Jenkins

我们在服务器上面为 jenkins 准备数据目录,假设为/home/data/www/jenkins.wzlinux.com
,前提是我们已经在服务器上面安装好了 docker。

docker run \
--name jenkins \
-u root \
-d \
-p 8080:8080 \
-p 50000:50000 \
-e TZ="Asia/Shanghai" \
-v /home/data/www/jenkins.wzlinux.com:/var/jenkins_home \
-v /var/run/docker.sock:/var/run/docker.sock \
--restart=on-failure:10 \
jenkinsci/blueocean

配置 jenkins

使用浏览器打开服务器的 8080 端口,并等待 Unlock Jenkins 页面出现。

可以使用如下命令获取管理员的密码:

docker logs jenkins

关于插件的安装我这里也不介绍了,有什么不懂的可以微信联系我。

二、配置 pipeline

2.1、配置源

我们从 github 上面找一个 nodejs 的案例作为我们的代码源,当然你也可以选择自己的 gitlab。

https://github.com/jenkins-docs/simple-node-js-react-npm-app

2.2、创建我们的 pipeline

  1. 进入首页,点击 New Item

  2. 在项目名的地方,我们填写simple-node-js-react-npm-ap

  3. 类型我们选择 pipeline

2.3、拉取源代码

点击确定之后,我们进入到 project 的配置界面,我们找到 pipeline 这一部分。

我们可以把 pipeline 写入到 jenkinsfile,然后保存到代码根目录,也可以直接在这里填写,我们选择在这里填写。

pipeline {
agent {
docker {
image 'node:10.20.1-alpine3.11'
}
}
stages {
stage('checkout') {
steps {
git 'https://github.com/jenkins-docs/simple-node-js-react-npm-app'
}
}
}
}

  • 因为我们是构建 nodejs 项目,所以我们这里选择 node 的镜像,大家可以选择自己的版本,使用 docker 的好处就是,一些工具我们也不需要再去安装,然后到系统工具配置了,直接选择自己需要的工具的 docker 镜像就可以了。

  • 我们这里去拉取 github 的代码,如果语法不会的话,输入框下面有流水线语法器,可以随时去生成,也可以使用我们的 gitlab。

我们运行一下,看下输出结果如何。

并且查看一下 workspace,看下载下来的代码

2.4、node.js 构建

那我们再完善一下 pipeline,我们增加打包构建,我这里选择的 node
 版本比较低,大家可以去 docker hub 上面去选择更新的版本。

pipeline {
agent {
docker {
image 'node:10.20.1-alpine3.11'
}
}
stages {
stage('checkout') {
steps {
git 'https://github.com/jenkins-docs/simple-node-js-react-npm-app'
}
}
stage('build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
}
}

然后提交,查看一下运行结果如何:

然后再查看一下 wordspace
 里面构建的文件,构建的文件在 build
 目录下面。我对代码也不是太清楚,有的好像生成在 dist
 目录。

2.5、发布到服务器上面

这里我们还是选择插件 Publish over SSH,配置这个插件,我简要说一下。

这里的 Remote Directory 比较重要,后面所有的文件都会传到以这个目录为根目录的目录下面。

这里配置好了,但是我们要写 pipeline,这里我们只能借住流水线语法生成器,我们这里计划把 build 里面的代码放到目标服务器的 /tmp/node 目录下面。

Source files:需要上传的文件(注意:相对于工作区的路径。看后面的配置可以填写多个,默认用,分隔),为了简要也可以写build/*

Remove prefix:移除前缀(只能指定Source files中的目录)。
Remote directory:远程目录(这里也是相对目录,目录根据我们配 ss h的时候填写的Remote Directory 路径,我写的是/root,所以文件会被上传到我们的 /root/nodejs 目录下面。

最终的 pipeline 如下:

pipeline {
agent {
docker {
image 'node:10.20.1-alpine3.11'
}
}
stages {
stage('checkout') {
steps {
git 'https://github.com/jenkins-docs/simple-node-js-react-npm-app'
}
}
stage('build') {
steps {
sh 'npm install'
sh 'npm run build'
}
}
stage('Deliver') {
steps {
sshPublisher(publishers: [sshPublisherDesc(configName: '应用服务器4', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: '''ls nodejs;
cp -r nodejs/* /tmp/node;
ls /tmp/node''', execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: 'nodejs', remoteDirectorySDF: false, removePrefix: 'build', sourceFiles: 'build/*')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
}
}
}
}

运行,我们查看一下结果是否如我们预期。

我们发现了一点问题,发现只能传送文件,不能传送文件夹,有可能就是不支持文件,也有可能我还没有完全搞明白,欢迎大家留意告诉我。

其实解决办法也有很多,我们在第二步构建完成之后,可以使用 zip 命令对这个文件夹打包,然后我们再使用第三步去获取,我这里不进行演示了,大家请自行测试。

欢迎大家扫码关注,获取更多信息

文章转载自运维点滴记录,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论