docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)

基于Nodejs项目的CI/CD(gitlab+verdaccio+jenkins)

  • CI/CD场景
    • jenkins搭建
    • Jenkins配置
    • gitlab webhook配置
    • 检查Jenkins构建

CI/CD场景

所有软件都用docker部署,jenkins在测试服务器上,developer 上传分支代码提交合并,code-manager审核代码并同意合并到master分支,触发gitlab的webhook,代码推送到jenkins,开始自动构建image,并替换部署原container

jenkins搭建

由于jenkins本来就在测试服务器上,那我们就没必要传送打包文件到测试服务器上再替换容器,直接把测试服务器上docker的入口文件和执行文件挂载到jenkins的容器中,这样我们就可以直接在jenkins容器内对测试服务器上的docker环境进行操作。
注意
1、确保保证jenkins用户可以使用docker执行文件(粗暴的做法:chmod 777 /var/run/docker.sock)
2、有些环境挂载之后还需要拷贝一些必要的文件到容器中,才能保证docker命令能被识别(
docker cp libltdl.so.7 jenkins:/usr/lib/x86_64-linux-gnu
docker cp libltdl.so.7.3.1 jenkins:/usr/lib/x86_64-linux-gnu)

docker run -d --name jenkins \
-v jenkins_home:/var/jenkins_home \
-e JENKINS_OPTS="--httpPort=8083 --httpsPort=-1" \
-e JAVA_OPTS=-Duser.timezone=Asia/Shanghai \
--restart always \
--network host \
-v /var/run/docker.sock:/var/run/docker.sock  \
-v /usr/bin/docker:/usr/bin/docker  \
jenkins/jenkins:lts

参数说明:
httpPort : 自定义端口,默认的8080端口,大概率会有冲突
httpsPort: 不使用ssl
Duser.timezone: 定义容器中的时区,默认的不是中国时区,这个不改后面job跑起来可能会导致报错

在浏览器输入 ip:8083,访问jenkins 的web ui,第一次进入的时候需要输入password,根据提示,直接到容器中cat出文件的内容,复制转贴过来即可。
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第1张图片
下一步,进入插件安装界面,一般选择安装建议的插件
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第2张图片
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第3张图片
下一步设置第一个用户
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第4张图片
最后点击完成,就可以进入到jenkins的dashboard
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第5张图片

Jenkins配置

  1. 安装配置插件

    Jenkins丰富的功能都是通过插件去实现的,所以,我们接下来要配置jenkins的插件。Jenkins的插件有很多,针对于各种不同的项目与功能。我们是部署gitlab+nodejs的项目,而且是在本机部署就可以了(所以不需要ssh类插件),需要的插件有:gitlab、nodejs,在插件管理中下载插件(系统管理→插件管理),然后下载完之后需要重启生效。手动重启jenkins的方法是:jenkins’url/restart 。

    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第6张图片
    接下来就要配置插件了。
    配置nodejs插件,在系统管理→全局工具配
    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第7张图片
    这边需要注意的是,你这边配置好之后,只是会生成一个配置文件而已,node的环境并还没有安装,只有但有job启动的时候,第一次调用nodejs环境的时候,jenkins会把nodejs的安装包下载到jenkins_home目录下的tools目录下,然后系统会自动给你安装上nodejs环境。

  2. 配置凭据
    我们的代码仓库是gitlab,所以要配置gitlab的凭据,就是访问gitlab的账密(必须有管理员权限的,所以一般可以为gitlab建立一个jenkins的账户,专门用来打包构建),范围一般选择全局
    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第8张图片

  3. 新建job
    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第9张图片
    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第10张图片
    配置gitlab项目地址,选择对于凭据
    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第11张图片
    配置触发器,记住框出来的URL,这个需要填写到gitlab的webhook中(我的需求是只有master变更才触发构建,所以注意填写红框部分)
    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第12张图片
    配置构建环境,我们的当然是NodeJS环境,这边就上面配置全局工具的NodeJS选项
    docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第13张图片
    最后就是在自定义构建了,我是直接执行shell,把我要构建的流程写下来。
    这边特别需要说的是,由于是需要上传到verdaccio,那就一定设置到npm 的登陆,这个时候你就需要安装一个npm-cli-adduser的插件来辅助你了,因为npm login 是需要你手动输入账密的,而npm-cli-adduser可以在你登陆的时候直接把信息传递过去。npm的包下载,直接在jenkins 容器里面install即可,当然你还需要配置好node、npm的PATH

docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第14张图片
这样,我的job就配置好了,下面就是去配置gitlab

gitlab webhook配置

填写之前jenkins中提供的URL,其实这个URL地址就是:$jenkins_url/project/$jobname
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第15张图片

保存后可以测试你的webhook是否可以链接到jenkins对应的项目,触发构建。你可能测试的时候会遇到一些报错,这个直接百度错误代码就能找到解决方案,基本是涉及权限配置的一些问题
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第16张图片

检查Jenkins构建

点击相应job,在Build History可以看到构建记录,点击构建记录,选择“Console Output” 可以查看追踪构建过程
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第17张图片

docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第18张图片
docker部署,基于Nodejs项目的CI/CD(docker+gitlab+verdaccio+jenkins)_第19张图片
这样一个简单的CI/CD就完成了,有什么问题或者补充的欢迎提出,大家一起学习~

你可能感兴趣的:(docker,CI/CD,Jenkins)