惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Vercel News
Vercel News
Recorded Future
Recorded Future
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
The GitHub Blog
The GitHub Blog
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Google DeepMind News
Google DeepMind News
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Microsoft Azure Blog
Microsoft Azure Blog
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
M
MIT News - Artificial intelligence
云风的 BLOG
云风的 BLOG
Y
Y Combinator Blog
N
News | PayPal Newsroom
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
Help Net Security
Help Net Security
博客园 - Franky
SecWiki News
SecWiki News
Recent Announcements
Recent Announcements
T
Troy Hunt's Blog
The Register - Security
The Register - Security
The Last Watchdog
The Last Watchdog
Webroot Blog
Webroot Blog
S
Security Affairs
博客园 - 司徒正美
S
Schneier on Security
I
InfoQ
博客园_首页
www.infosecurity-magazine.com
www.infosecurity-magazine.com
T
Threat Research - Cisco Blogs
Forbes - Security
Forbes - Security
腾讯CDC
N
Netflix TechBlog - Medium
N
News and Events Feed by Topic
Cloudbric
Cloudbric
T
The Exploit Database - CXSecurity.com
P
Proofpoint News Feed
A
About on SuperTechFans
Engineering at Meta
Engineering at Meta
Recent Commits to openclaw:main
Recent Commits to openclaw:main
B
Blog
V
Vulnerabilities – Threatpost
C
Check Point Blog
Google DeepMind News
Google DeepMind News
Google Online Security Blog
Google Online Security Blog
C
Cyber Attacks, Cyber Crime and Cyber Security
Hacker News - Newest:
Hacker News - Newest: "LLM"
C
Cisco Blogs
Schneier on Security
Schneier on Security
O
OpenAI News
K
Kaspersky official blog

小松鼠的博客

记录一次线上k8s工作节点无法创建容器的问题排查思路与解决办法 记一次线上GoLang项目OOM排查过程 从LastPass转向拥抱开源KeePass的心路历程 故障定位与 AI 结合前后端编码实践 FileBeat收集nginx-ingress-controller日志 K8s云原生环境下文件描述符占用过高查询思路 2024年最新关闭火绒安全工具的开机自启方法 Kubernetes任务调度实践-Go语言实现Job和CronJob对比分析 离线更新k8s环境下的trivy漏洞库方法 使用Go语言接入Choerodon实现基于OAuth2的统一身份认证登录 在Vue2中自定义Switch组件并实现父子组件双向数据绑定 关于docker jdk1.8镜像中的GB18030-2022标准支持及验证 Go框架gin中的session存储gin-contrib-sessions和go-session 关于修改node_module中的源码问题记录 docker-compose网络和内网服务IP冲突问题 慎用存储过程:一条语句引发的数据库存储100%占用 Spring Boot中4种文件下载方法的实现 避坑-不能将specific类型的gitlab-runner改变为share类型 Docker compose中的MySQL主从复制模式和percona-toolkit工具使用 在minio中开启https访问以及使用rclone备份minio桶 在多机Docker环境下部署Choerodon的解决方案 Prometheus中Monitor添加对SpringBoot Actuator的Basic认证 在Nginx的容器镜像中隐藏Nginx的Server响应头 K8s中的两种nginx-ingress-controller及其区别 两个docker工具:runlike和whaler Grafana中的邮件报警和截图插件grafana-image-enderer K8s中externalName-service和services-without-selectors maven配置文件settings.xml中的一些概念总结 K8s中flexvolume插件驱动的安装 K8s中的coredns无法解析svc问题排查 K8s中使用Ingress访问请求体过大问题解决 关于k8s中对于SpringBoot应用TCP类型的就绪探针不准确的问题发现 K8s中的环境变量与应用程序的对应关系与操作 SpringMVC4升级为SpringBoot2实战 在Vmware中Ubuntu22.04的vm-tools和网络问题 修改k8s节点主机名并重新加入集群 离线安装Grafana插件 Spring Data Jpa 中使用CriteriaBuilder动态拼接SQL 在SpringBoot项目配置Liquibase数据库版本管理 记录Vue中父子组件传值的实战应用 实现单例模式的8种方法 三种常用的生产者消费者模式实现 使用两个线程交替打印0-100的奇偶数 关于部署于JBoss5中的Spring应用获取项目真实部署路径的问题 获取下一个完全对称日 通过短信验证码验证修改密码的解决方案 在Win10中使用Win+R快速启动软件 使用RSA加解密时注意Cipher.getInstance(String var0,Provider var1)提供的Provider是否正确 在RestEasy2.x中解决接口重复提交问题 几道简单的CTF题目思路 重温Spring---Spring事务控制与基于XML和注解的配置方法 重温Spring---Spring AOP基于XML和注解的配置 重温Spring---AOP动态代理和Spring AOP及其基本原理 重温Spring---Spring IOC基于XML和注解的配置和比较 在Windows10中安装MySQL5.7 Zip版本及常用配置 重温Spring---使用Spring IOC解决程序耦合 策略模式与责任链模式实战应用 Linux上直接打开war包修改文件 在Windows上运行两个微信的简单脚本 ThreadPoolExecutor的使用方法与分页查询数据实例 IDEA中Shelve Changes 和 Git Stash 通过resteasy发布RESTful接口 解决前端请求后台接口,后台报错Can not deserialize instance of java.util.ArrayList out of START_OBJECT token 使用VBA脚本汇总Excel文档 Kubernetes:使用hostPath挂载nginx集群的配置文件和html 彻底搞定VirtualBox虚拟机的网络设定 在Docker中安装MySQL5.7并开启远程访问(附授权和修改密码方式) 利用git命令和java文件流 获取自己改动过的文件 浅谈Spring定时任务的使用(Scheduled注解) 在Spring项目简单配置Flyway(V4.2版本)数据库版本管理 解决Spring单元测试中因外键关联导致的失败integrity constraint violation:foreign key no action Redis安装与哨兵模式配置入门 关于Vue中使用Element-UI样式row-class-name失效的问题 Element-UI中实现可动态增加行列和可编辑单元格的表格 Windows系统查看端口占用、结束进程方法和命令 层次分析法(AHP)分析步骤与计算方法 源码分析之解决layui框架重载表格时额外参数不清空的问题 Spring Data Jpa 返回自定义对象(实体部分属性、多表联查) 如何将一个jar放到本地maven仓库中 关于SSM项目停止Tomcat时Log4j出现java.lang.NoClassDefFoundError: 获取el-table单元格值并根据该值对元素自定义样式渲染 解决Git每次push都要重新输入账号密码和HttpRequestException encountered的问题 解决前后端分离项目中Vue不带cookies的问题 SSM集成Shiro自定义权限过滤器不执行解决方案 SSM集成Shiro不进入自定义Realm的doGetAuthorizationInfo的解决方案 Vue+SSM中使用Token验证登录 Git拉代码推送代码提示密码错误如何修改 Git配置SSH Key(Git配置多个账户) 安装Tomcat服务器以及错误汇总(tomcat8.0、jdk8) 关于我
使用Jenkins+GitLab实现自动部署vue项目
ycyin · 2021-01-12 · via 小松鼠的博客

2021年1月11日大约 6 分钟云原生JenkinsGitLab


在众多持续集成/持续部署(CI/CD)工具中(如GitLab CITravis CITeamCity等),有人说Jenkins已经老了,现在也有很多优秀的Jenkins替代方案。本文选择Jenkins仅仅是因为它安装简单、部署简单的项目上手快(有Web界面)。

使用的Jenkins版本:Jenkins 2.263.1,部署机器:CentOS 7

使用Jenkins+gitlab实现自动部署vue项目基本思路:gitlab每次提交代码使用 GitLab 的 WebHook 来触发 Jenkins 构建,Jenkins执行shell脚本打包Vue项目,然后将打包后的静态文件复制到nginx指定的html目录中。

安装环境

安装JDK

Jenkins基于Java开发,所以需要Java运行环境。

官网选择对应JDK版本下载链接:

下载:

wget https://download.oracle.com/otn/java/jdk/8u271-b09/61ae65e088624f5aaa0b1d2d801acb16/jdk-8u271-linux-x64.tar.gz?AuthParam=1610086904_2c9dd4492a9232e623d371bcdaaae54f

创建安装目录

解压至安装目录

tar -zxvf jdk-8u271-linux-x64.tar.gz -C /usr/local/java/

设置环境变量:

在末尾添加

export JAVA_HOME=/usr/local/java/jdk1.8.0_271
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH

使环境变量生效

添加软链接

ln -s /usr/local/java/jdk1.8.0_271/bin/java /usr/bin/java

检查

安装Jenkins

通过尝试,使用Jenkins不推荐用Docker方式安装,会因为缺少环境而造成不必要的麻烦。

这里使用下载好的安装包安装,yum方式参见官网,比较慢
下载rpm包并安装

官方镜像:https://pkg.jenkins.io/

推荐 清华镜像站:https://mirrors.tuna.tsinghua.edu.cn/jenkins/(速度快)

中国科学技术大学镜像站:https://mirrors.ustc.edu.cn/jenkins/

#下载
wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.263.1-1.1.noarch.rpm
#安装
rpm -ivh jenkins-2.263.1-1.1.noarch.rpm

网络联通配置

1.如果安装Jenkins的机器启动了安全组策略,需要开放修改后的端口,如下:

firewall-cmd --zone=public --add-port=8080/tcp --permanent #添加TCP端口
firewall-cmd --reload

2.因为后面GitLab需要配合Jenkins以实现提交代码就完成自动部署,所以如果有需要,则要添加GitLab服务器的IP,使得GitLab服务器可以访问Jenkins服务器。

firewall-cmd --permanent --zone=trusted --add-source=172.26.1.15 #添加IP
firewall-cmd --reload
firewall-cmd --zone=trusted --list-all

3.因为后面Jenkins要去拉取gitlab的代码,所以需要生成ssh密钥

将公钥添加到gitlab:来到gitlab个人中心,点设置,左边点SSH密钥,右边填入id_rsa.pub里面的字符,然后点添加密钥即可。

Jenkins配置

  1. Jenkins默认端口为8080, 有冲突的自行修改

    vi  /etc/sysconfig/jenkins
    #例 修改为
    JENKINS_PORT="8080"
    
  2. 配置JDK路径,JDK安装目录是自定义的,需要添加

    vi /etc/init.d/jenkins
    #加上自己的jdk路径
    

    我这里添加过软链接到/usr/bin/java,所以不用再添加了。

  3. 启动

  4. 访问
    通过IP:Port即可访问Jenkin页面,通过提示找到密码登录。

    插件安装选择安装推荐的插件即可。可能安装失败,重试或者继续暂时忽略失败的插件安装。

    等待片刻(其实要很久),就安装完成了。

安装插件

【系统管理-->插件管理】可以在线安装需要的插件,但是安装比较慢,还经常失败,推荐设置升级站点或上传插件离线安装。

本文章需要编译Vue项目,所以需要单独安装一个NodeJS插件。

设置升级站点
【系统管理-->插件管理-->高级-->升级站点】

替换升级站点URL,这里推荐两个地址可用:

http://mirror.esuni.jp/jenkins/updates/update-center.json

https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

其它的Jenkins的镜像地址可以查询:http://mirrors.jenkins-ci.org/status.html

保存后,即可返回到【可选插件】选项卡下,进行搜索重新安装。

离线安装

可以通过上面提供的国内镜像地址下载好插件,如:https://mirrors.tuna.tsinghua.edu.cn/jenkins/plugins/ 然后通过【系统管理-->插件管理-->高级-->上传插件】来离线安装

安装NodeJS

本文章需要编译前端的Vue项目,上面安装好了插件,现在还需要本机安装好NodeJS。

(1)去nodejs官网下载最新包

官网下载地址:https://nodejs.org/dist/latest/

wget https://nodejs.org/dist/latest/node-v12.18.3-linux-x64.tar.gz

(2)解压安装

tar xvzf node-v12.18.3-linux-x64.tar.gz -C /opt

(3)修改环境变量

vim /etc/profile
export PATH=/opt/node-v12.18.3-linux-x64/bin:$PATH

(4)刷新环境变量,使其生效

(5) 安装cnpm与配置淘宝镜像

npm install -g cnpm --registry=[https://registry.npm.taobao.org](https://registry.npm.taobao.org/)

(6) 查看npm,cnpm,node版本号

配置NodeJS

Jenkins中配置node

【系统配置-->全局工具配置-->NodeJS】配置安装好的node路径。

Jenkins任务

构建任务

现在可以新建一个【构建任务】了。点击新建任务,输入任务名称,选择构建一个自由风格的软件项目,点击确定进入下一步。

源码管理

选择【源码管理】,输入仓库地址,会提示连接不上,这时候前面生成的ssh-key就派上用场了。点击添加按钮,

如图所示添加凭据,将之前生成的私钥添加到Key中,点击添加后即可在上一步的Credentials后面的下拉框中选择刚刚添加的凭据。

选择后就不报错了,说明可以访问到gitlab仓库了。

构建触发器

选择【构建触发器】,选中【触发远程构建】,输入一个身份验证令牌,后面要用。

构建环境

选择【构建环境】,选择【Provide Node & npm bin/ folder to PATH】,然后选择我们配置好的Node环境。

构建

选择【构建】,【增加构建步骤】选择【执行Shell】,然后填入构建时对应需要执行的shell脚本。

source /etc/profile #声明环境变量
cnpm cache verify #清除缓存
cnpm install #安装
npm run build #编译
#拷贝dist下所有文件到nginx对应目录下
cp -Rf /var/lib/jenkins/workspace/bde-data/dist/*  /usr/local/nginx/html/bde/ 

如下图:

构建后操作

可以配置邮件通知等操作,这里就不配了。

配置WebHook

获取账户token

登录有效账户,【用户列表-->点击用户ID-->设置-->API Token-->添加新Token】点击生成,即可生成一个Token

获取项目Token

之前构建触发器时输入的身份验证令牌就是项目Token,可以去项目任务配置那获取或重新配置。

生成触发器URL

之前构建触发器时那里有提示URL的格式。

JENKINS_URL/job/bde-data/build?token=TOKEN_NAME 或者 /buildWithParameters?token=TOKEN_NAME
Optionally append &cause=Cause+Text to provide text that will be included in the recorded build cause.

然后在需要gitlab项目的 WebHook【settings-->integrations】中填写该 URL(Trigger选择Push events代表Push代码时触发),在 host 前面加上 [账户名]:[账户Token]@,完整格式为:https://myid:[email protected]/job/myJobName/build?token=my_job_token。比如我这里就是:

http://admin:[email protected]:8080/job/bde-data/build?token=ycyin20210108

部署测试

此时,提交一次代码,gitlab触发Jenkins构建。

gitlab点击编辑对应的Webhook可以看到成功:

Jenkins可以看到构建状态、控制台输出等:

本文参考:

  1. https://www.cnblogs.com/fangts/p/11095316.html
  2. https://blog.csdn.net/codebingo/article/details/112126788
  3. https://blog.51cto.com/13760351/2382464
  4. https://zhuanlan.zhihu.com/p/201307678
  5. https://blog.csdn.net/chengyinwu/article/details/103056605
  6. https://www.cnblogs.com/sxdcgaq8080/p/10489326.html
  7. https://www.colabug.com/2018/0801/3851860/