menu Chancel's blog
rss_feed
Chancel's blog
我就是这样的人

CI工具的选择 - Jenkins的搭建与使用

作者:Chancel, 更新:2019 Dec 05, 字数:3675, 已阅:619

这篇文章更新于 1278 天前,文中部分信息可能失效,请自行甄别无效内容。

CI工具有不少选择,像Jenkins、Codeship、Travis CI、Circle CI、TeamCity都是比较有名的CI工具,无论是个人还是团队使用CI工具都能有效提高代码迭代速度,更快的发布周期

搭建

参考官网文档

访问Jenkins - Build great things at any scale 官网,我们可以快速找到下列安装教程

硬件配置

  • 最低256MB内存,推荐512M内存以上
  • 10GB的硬盘驱动

软件依赖

  • Java 8 (either a JRE or Java Development Kit (JDK) is fine)
  • 可选:Docker (navigate to Get Docker at the top of the website to access the Docker download that’s suitable for your platform)

环境准备

首先安装依赖 java与jdk

yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel

创建存放Jenkins文件夹

mkdir /store/devlop/jenkins

下载Jenkins

cd /store/devlop/jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war

可选:配置Jenkins_home路径,此步骤如跳过,则运行Jenkins时会在用户目录下生成.jenkins目录作为默认目录(随着时间使用逐渐变大)

vim /etc/profile
# 添加JENKINS_HOME路径
JENKINS_HOME=/store/devlop/jenkins/jenkins_home/
# 在最后导入JENKINS_HOME
export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL JENKINS_HOME
# 保存并退出文件后刷新环境设置
source /etc/profile

运行Jenkins

可以通过 java -jar jenkins.war --help 获取运行参数帮助,此处考虑如下几个参数

  • httpPort:对外端口
  • webroot:额外的扩展war包存储位置
  • pluginroot:额外的插件扩展存储位置

运行Jenkins

java -jar jenkins.war --httpPort=8082 --webroot=webroot/ --pluginroot=pluginroot/

查看默认密码

cat /user/.jenkins/secrets/initialAdminPassword

后台运行

如何使用supervisor,请参考以往的博客

supervisord脚本

[program:jenkins]
command=java -jar /store/devlop/jenkins/jenkins.war --httpPort=8082 --webroot=/store/devlop/jenkins/webroot/ --pluginroot=/store/devlop/jenkinspluginroot/
environment=JENKINS_HOME=/store/devlop/jenkins/jenkins_home/
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=3
stderr_logfile=/var/log/supervisor/jenkins.error.log
stdout_logfile=/var/log/supervisor/jenkins.output.log

使用

我主要是用来持续集成前端博客vue单页应用,此处举例VUE的集成,Jenkins支持很多持续集成方案,大同小异,如有需要可查阅官网文档

插件安装

登录Jenkins管理系统首页,依次打开“系统管理” -- “管理插件” 并搜索安装如下插件

  • Publish Over SSH - 用于推送生成包到远程服务器上的插件
  • nodejs - 用于使用npm安装生成vue项目

回到管理系统首页,依次打开“系统管理” -- “全局工具管理”,拉到底部

  • 点击新增NodeJS,并根据需要选择版本号

配置远程服务器连接

在管理系统首页,一次打开“系统管理” -- “系统设置”,找到“Publish Over SSH”,点击新增,然后点击SSH Server

  • Passphrase:密码
  • Path to key:如果你的服务器需要密钥输入,则在此输入你的密钥位置,当然前提是你要先在Jenkins服务器上指定的路径准备好密钥
  • Key:可以将Key粘贴到这,不过我没有试过
  • Name:服务器名称
  • Hostname:服务器IP
  • Username:服务器用户名
  • Remote Diretory:默认远程服务器路径
  • 配置结束后可点击 Test Configuration测试是否连接成功

创建Jenkins任务

  1. 点击Jenkins(回到首页点击创建),并选择 自由风格项目,进入项目详细配置页面,选择General(默认已选中)
  2. 源码管理方式选择 GIT
    1. 输入仓库的 URL
    2. 验证方式根据需要自行选择(如Git仓库是证书验证才能拉取则需要在Jenkins的系统设置中添加凭据再返回这里选择证书验证)
    3. 选择仓库的分支 Branches
  3. 触发器选择 Poll SCM
    • 注:2分钟查询一次仓库写法 - */2 * * * *
  4. 构建环境选择 Provide Node & npm bin/ folder to PATH
  5. 构建步骤增加1个
    • 此处根据需要选择你的构建步骤,我的构建机器由于是在本地运行,为了避免网络问题引起构建失败,我这里特意使用cnpm进行构建
      # 安装cnpm
      npm install -g cnpm --registry=https://registry.npm.taobao.org
      # 使用cnpm
      cnpm install
      # 打包vue
      npm run build
      # 以下三步用于创建上传到服务器的压缩包
      cd dist
      rm -rf test.tar.gz 
      tar -zcvf test.tar.gz *
      cd ../
      
  6. 构建后操作选择 Send build artifacts over SSH
    • 选择在配置远程服务器连接里面配置好的服务器,之后填写Transfers信息
      Transfer Set
      Source files : dist/test.tar.gz
      Remove prefix : dist
      Remote Directory : (不填)
      Exec command :
                      cd /home/chancel/
                      rm -rf one_view/
                      mkdir one_view/
                      mv /tmp/test.tar.gz one_view/
                      cd one_view/
                      tar -zxvf test.tar.gz
                      rm -f test.tar.gz
      

这6步做完之后VUE的持续集成就完成了,享受每次Push之后自动更新的首页吧!


[[replyMessage== null?"发表评论":"发表评论 @ " + replyMessage.m_author]]

account_circle
email
web_asset
textsms

评论列表([[messageResponse.total]])

还没有可以显示的留言...
[[messageItem.m_author]] [[messageItem.m_author]]
[[messageItem.create_time]]
[[getEnviron(messageItem.m_environ)]]
[[subMessage.m_author]] [[subMessage.m_author]] @ [[subMessage.parent_message.m_author]] [[subMessage.parent_message.m_author]]
[[subMessage.create_time]]
[[getEnviron(messageItem.m_environ)]]
目录