单纯地记录一下,后面会持续补充和总结
基本环境
阿里云
CentOS版本: CentOS Linux release 7.2.1511 (Core)
cat /etc/centos-release
linux安装git
yum -y install git
linux安装node
- 远程安装 node-v10.13.0
wget -c https://npm.taobao.org/mirrors/node/v10.13.0/node-v10.13.0-linux-x64.tar.xz
- 解压node安装包
tar -xvf node-v10.13.0-linux-x64.tar.xz
- 将解压后的文件重命名为
nodejs
, 然后放到/usr/sbin文件夹下
/usr/bin 系统预设的可执行文件,如开关机在这里,优先级最高
/usr/local/bin 用户本身相关的可执行文件,如自己安装的软件推荐放在这里,会提升到全局
/usr/sbin 基本同上
①重命名为 nodejs
cd ~
mv node-v10.13.0-linux-x64 nodejs
②移动到/usr/sbin文件夹下
mv nodejs/ /usr/sbin/
- 配置软件链
为了使nodejs能够全局使用,我们需要配置一下软链接。全局任何地方都可以直接调用node
和npm
指令了
ln -s /usr/sbin/nodejs/bin/node /usr/local/bin/
ln -s /usr/sbin/nodejs/bin/npm /usr/local/bin/
- 检查安装结果
执行完以上两步,可以测试一下,如果都能输出对应的版本号。说明配置成功。
node -v
npm -v
linux下安装nginx
使用的方式是通过yum来安装nginx,当然还有其他的方式。比如下载好安装包,然后再解压等等。
- 配置yum仓库
① 创建一个名为/etc/yum.repos.d/nginx.repo
vi /etc/yum.repos.d/nginx.repo
② /etc/yum.repos.d/nginx.repo
添加以下内容
以下是一个模板:OS 和 OSRELEASE 需要看当前系统具体情况而替换
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/OS/OSRELEASE/$basearch/
gpgcheck=0
enabled=1
注意:“OS”处用你的系统名字代替,例如:centos或rhel;OSRELEASE用“5”或“6”或“7”代替,取决于你的系统版本号.
我的版本是centos7,所以我的配置如下
[nginx]
name=nginx repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
gpgcheck=0
enabled=1
③ yum 进行安装
yum -y install nginx
- nginx常用指令
I want it | I get it |
---|---|
关闭nginx | nginx -s stop |
重启nginx | nginx -s reload |
检查nginx | nginx -t |
开启nginx | nginx |
- nginx 相关文件一般的位置
Where | Here |
---|---|
项目文件 | /usr/share/nginx/html |
nginx配置文件 | /etc/nginx/nginx.conf |
自定义配置文件 | /etc/nginx/conf.d |
日志文件 | /var/log/nginx |
linux 安装 JDK
- 卸载系统自带的jdk
//查找系统jdk
[root@luban_test ~]# rpm -qa|grep java
java-1.6.0-openjdk-1.6.0.37-1.13.9.4.el5_11
tzdata-java-2015g-1.el5
//如果查找到了 先全部卸载了在重新安装
//卸载
[root@luban_test ~]# rpm -e --allmatches --nodeps python-javapackages-3.4.1-11.el7.noarch
[root@luban_test ~]# rpm -e --allmatches --nodeps tzdata-java-2019a-1.el7.noarch
[root@luban_test ~]# rpm -e --allmatches --nodeps java-1.8.0-openjdk-1.8.0.212.b04-0.el7_6.x86_64
[root@luban_test ~]# rpm -e --allmatches --nodeps java-1.8.0-openjdk-headless-1.8.0.212.b04-0.el7_6.x86_64
//检查是否卸载干净
[root@luban_test ~]# rpm -qa|grep java
- 查找yum下可更新的Java列表
yum -y list java*
//或者
yum search jdk
- 安装java
yum install -y java-1.8.0-openjdk.x86_64
//验证完成安装
java -version
- 配置环境变量
[root@luban_test ~]# vi /etc/profile
在profile文件末尾加入:
export JAVA_HOME=/usr/lib/jvm/jre-1.8.0-openjdk
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
使配置文件生效
source /etc/profile
source ~/.bash_profile
//或重启机器配置生效
reboot
linux 安装 jenkins
- 官网下载地址
sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat/jenkins.repo
sudo rpm --import https://pkg.jenkins.io/redhat/jenkins.io.key
yum install -y jenkins
- 安装完成在浏览器输入 ip + 8080
ip 为服务器公网ip,我在这边遇到了一个坑。排查了挺久。因为用公司的阿里云账号开了一个测试服务器。然后这台服务器被加入到了自定义的安全组里。然后除了配置的白名单外,其他ip都无法ping到测试服务器的ip。很显然我用家里的网络打开ip:8080 ,是打不开的。
排查是否启动了jenkins服务
systemctl status jenkins
排查了java的安装情况
排查了端口是否被占用
-
排查了防火墙
systemctl status firewalld
- 当然防火墙还是要关闭一下,不然访问不了服务。
systemctl stop firewalld
systemctl disable firewalld
- 当然防火墙还是要关闭一下,不然访问不了服务。
甚至重新安装jenkins,我的天
后来无奈上了阿里云控制台看了一下其他服务器的ip 。我一顿ping才发现,都ping不通。但是服务都还在线上运行着。 再后来找到网络和安全组
然后把自己家的ip加入到名单中。于是就可以愉快继续玩耍了。。。小插曲,问题不大。。。
-
第一次打开http://168.56.3.*:8080 会要求你解锁jenkins
有一个初始密码在服务器
/var/lib/jenkins/secrets/initialAdminPassword
页面也会提示你cat /var/lib/jenkins/secrets/initialAdminPassword
填入后 -> 继续
-
自定义 jenkins
- 选择
安装推荐的插件
- 一顿咔咔下载,等着吧。需要很长的时间。。。
- 选择
-
安装完成可以创建一个用户
admin -> 123456
安装jenkins插件
-
修改插件的镜像,类似于npm的淘宝镜像。
- 进入jenkins系统管理
- 进入插件管理
- 点击高级tab -> 修改升级站点的地址为清华大学镜像地址
- https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
-
Generic Webhook Trigger
web触发器(这个还是有蛮多配置的,后面好好玩一下)- http://admin:[email protected]:8080/generic-webhook-trigger/invoke?token=token
-
Publish Over SSH
通过SSH部署服务器- 一般jenkins有一个工作区,我们这个区构建项目,需要把这个构建包部署到另外一台服务器上。这是时候就需要用到这个插件。
- 当然,你也可以把jenkins 和 项目部署放在同一台服务器上
-
Nodejs
提供node环境- 前端项目的构建需要npm这些指令,这个插件能为我们提供node执行环境
-
Git Parameter
这是一个git多分支选择。我也是后面在下载安装的。- Git Parameter 的基本用法
- 创建一个任务
左侧导航
新建任务
输入一个任务名称 -> 与项目同名即可,不是必须的
构建一个自由风格的软件项目
-
配合相关 (我写一下我最基本的一些配置)
-
General
- 参数化构建过程,主要是配合着插件
Git Parameter
来使用 - Git 参数:BRANCH
- 参数类型: 分支
- 默认值:origin/dev (主要是因为我要自动构建的是dev分支的代码,所以这边先配置为dev)
- 参数化构建过程,主要是配合着插件
-
源码管理
- 选择git
- Repository URL,填写你项目的URL地址。 git@...
- Credentials:主要有两种方式 jenkins 上配置Credentials 2种方式
- Username + password方式
- SSH认证方式 (我选择了这种)
- 指定分支(为空时代表any): $BRANCH
-
构建触发器
- Generic Webhook Trigger 勾选上,表示git仓库可以调用这个触发器啦
- 当然要触发需要做一些配置,我这边用的是gitlab。
- jenkins 用户头像 --> 设置 --> API Token --> 生成一个api token并且复制下来
- 登录gitliba账号 --> 找到对应项目 ---> Settings --> Integrations
- URL: http://admin:[email protected]:8080/generic-webhook-trigger/invoke?token=token token 就是jenkins生成的api token
- 配置好后,下面有一个Test按钮可以测试一下配置是否成功。成功即可继续
- 到这里,理论上我们修改代码并push到git上就会触发jenkins 。但是问题来了,我发现我在任何分支上做push动作都会触发jenkins
- 我的需求是当dev上有push动作时,才执行这个任务。jenkins指定具体项目具体分支进行构建部署
- Generic Webhook Trigger -> Post content parameters
- Variable: ref
- Expression: $.ref
- JSONPath
- 配合 Optional filter
-
Optional filter
- Expression: ^(refs/heads/dev)$
- Text: $ref
-
构建环境
- Provide Node & npm bin/ folder to PATH: 需要下载
Nodejs
插件- NodeJS Installation:node
- Provide Node & npm bin/ folder to PATH: 需要下载
-
构建
执行shell
shell 命令(写一些基本的构建命令)
rm -rf dist rm -rf dist.tar.gz npm run build tar -zcvf dist.tar.gz dist
-
构建后操作
Send build artifacts over SSH
-
这一部主要是
Publish Over SSH
这个插件- 系统管理 -> 系统配置 -> 找到
Publish over SSH
- jenkins配置publish over ssh
- jenkins使用publishover ssh插件连接应用机器时,报Message [Auth fail]的问题
- 系统管理 -> 系统配置 -> 找到
Name: 上一步配合的服务器名字
Source files: dist.tar.gz
Exec command:
cd /usr/share/nginx/html/caribbean_dev rm -rf dist tar -xzvf dist.tar.gz rm -rf dist.tar.gz
-
使用jenkins自动化打包部署Vue项目
Jenkins学习文档