• 背景
  • 整体思路
  • 实现方式
    • 1 自动化部署脚本
    • 2 远程执行
    • 3 配置jenkins任务

背景

之前给公司搭建过一套gitlab+gerrit+jenkins的持续集成环境,由于操作起来有点繁琐,自己也没太搞清楚该怎么用,所以一直就只用了gitlab来做代码管理。最近要做一个项目自动部署的功能,使用过jenkins一定知道他的自动化功能。所以就从jenkins创建自动部署任务的方式来入手。

整体思路

jenkins可以配置触发器,当有新的提交时,触发执行相应的任务。由于jenkins和项目部署不在同一服务器上,所以我想用ssh到远程服务器后执行对应的部署脚本来做自动部署。

实现方式

我是按照倒推的思路来完成整个流程的。

1、 自动化部署脚本

项目是用git管理的,首先脚本要能够实现切换到指定目录下后pull对应的分支。

#! /bin/bash
#切换到项目路径下
cd ~/coffee/myproject
git checkout -f
git clean -fd
git pull

可以通过接收的参数,来决定切换的项目路径

#! /bin/bash
#切换到指定目录
if [ "$1"x = "project1"x ];
thencd ~/coffee/myproject1
elif [ "$1"x = "project2"x ];
thencd ~/coffee/myproject2
elif [ "$1"x = "project3"x ];
thencd ~/coffee/myproject3
elseecho "failed"exit
fi
git checkout -f
git clean -fd
git pull

2、 远程执行

首先在本地配置好在jenkins所在的服务器上可以免登录ssh到要部署的服务器上:利用ssh-keygen生成公钥后,粘贴到目标服务器上~/.ssh/authorized_keys文件中。此时在jenkins服务器上即可远程执行更新脚本/

ssh root@192.168.1.100 "/root/myscript/pull.sh project1"

3、 配置jenkins任务

(1)填写项目名称
(2)在源码管理的位置,选择git,在Repository URL里填写项目的URL,结果遇到报错

stdout:
stderr: Permission denied (publickey,keyboard-interactive).
fatal: Could not read from remote repository.Please make sure you have the correct access rights
and the repository exists.

这种权限错误,一般是因为ssh公钥没有添加到git服务器上。但是这里需要注意的一点是,需要填写jenkins用户下的公钥。
执行su - jenkins后,发现没有任何反应。原因是/etc/passwd中的/bin/bash变成了/bin/false。

sudo vim /etc/passwd

jenkins:x:103:160:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/false

改为

jenkins:x:103:160:Jenkins Continuous Integration Server:/var/lib/jenkins:/bin/bash

这时执行su - jenkins 后可以切换用户,但是命令提示符的用户名显示的是

-bash-4.1$

解决方法是在jenkins用户下的bash_profile添加命令行提示符环境变量

vim ~/.bash_profile 

添加

export PS1='[\u@\h \W]\$'

加载修改完的bash_profile:

source ~/.bash_profile

此时前面的用户名提示恢复正常:

[jenkins@localhost ~]$

我在开始安装jenkins时,使用以下命令生成过公钥jenkins.pub:

ssh-keygen -C jenkins@163.com

将公钥添加到gitlab后,仍然报权限错误。此时看到gitlab上添加ssh公钥说明,生成公钥需要选择-t rsa,而ssh-keygen默认使用的加密是dsa。
使用命令

ssh-keygen -t rsa

将新生成的公钥添加到gitlab服务器上,

此时可能需要在jenkins服务器上,切换到jenkins用户后执行一下:
git ls-remote -h [项目的git地址] HEAD
参考jenkins host key verification failed

之后就不再报权限错误了。
Branch Specifier (blank for ‘any’)填写自己要响应的分支变化。
(3)构建触发器选择
首先需要在jenkins安装插件Gitlab Hook Plugin,安装完之后在构建触发器就能看到:

Build when a change is pushed to GitLab. GitLab CI Service URL: http://xxx.com/project/myproject1

选中该选项。因为要在有push事件发生时,进行自动部署,因此勾选Build on Push Events。
(4)构建里选择增加构建步骤->Execute shell
Command 里写远程执行更新脚本的命令

ssh root@192.168.1.100 "/root/myscript/pull.sh project1"

(5)可选:如果想要一个失败的消息通知,可以在构建后操作里,增加构建后操作步骤->Email Notification,填写自己的邮箱即可
点击保存。
但是此时还没有配置完,我们需要通过gitlab的web hooks的功能,来让jenkins接收到push的消息。
4、 配置web hooks
刚才在构建触发器里有一项,里面提供的地址就是我们要在gitlab的web hooks里填写的地址(下面只是我的一个示例地址)

Build when a change is pushed to GitLab. GitLab CI Service URL: http://xxx.com/project/myproject1

填写完之后,我们的整个自动部署流程就已经可以运行了。自己push一下试试吧。

参考:
shell执行git命令
shell 脚本执行后 ssh 连入远程服务器
ssh远程执行命令并自动退出
Jenkins+git+webhook自动触发部署和测试任务
在Centos系统中无法切换jenkins用户
ssh-keygen 的 详解
jenkins host key verification failed

jenkins实现项目自动部署相关推荐

  1. 搭建Jenkins+springcloud一键自动部署

    用jenkins 实现项目自动部署笔记 1.目的 1.一键实现项目自动构建打包发布(用于生产环境) 2.实现代码提交到代码仓库立刻自动打包部署(用于测试环境) 3.本测试脚本代码在最后 2.操作环境 ...

  2. Jenkins+Github+Nginx实现前端项目自动部署

    Jenkins+Github+Nginx实现前端项目自动部署 前言 最近在搭建一个自己的网站,网站框架搭好了要把项目放到服务器运行,但是每次更新网站内容就要手动部署一次,实在很麻烦,于是就想搭建一套自 ...

  3. 搭建Jenkins+Github的自动部署环境并使用守护进程(Supervisor)部署Golang(gin)项目

    零.前言 Jenkins是一个自动部署的平台,可以极大的帮助我们自动部署项目,把注意力放在书写代码上. 教程环境说明: 系统:ubuntu20 配置:2核4G 软件:JAVA11 安装方式:APT(不 ...

  4. jenkins整合gitee自动部署SpringBoot项目

    文章目录 前提条件 一.服务器安装jenkins 方法一:简单快捷 第一步:将jenkens.war导入到系统 第二步:放在tomcat的webapp下面 第三步:访问http://ip:8080/j ...

  5. Window环境下的Git+GitHub+jenkins+Tomcat实现自动部署项目并发送构建邮件

    Git+GitHub+jenkins+Tomcat实现自动部署项目 我们这里要实现的效果是:团队通过Git把项目push到GitHub上去,然后Jenkins通过GitHub的webhook(钩子)来 ...

  6. [转]Eclipse中的Web项目自动部署到Tomcat

    原文地址:http://www.cnblogs.com/ywl925/p/3815173.html 原因 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的 ...

  7. ant+svn+tomcat实现项目自动部署

    因工作需要,研究并实现了 ant+svn+tomcat实现项目自动部署,其中参考了下面文章:http://www.cnblogs.com/taoweiji/p/3700915.html jar包需要e ...

  8. myeclipse + tomcat 项目自动部署

    在MyEclipse中设置项目的自动部署需要综合考虑两个方面: 1是MyEclipse本身,通过主菜单中project->auto ,另一个就是tomcat配置文件.配置文件包括 conf 下的 ...

  9. Eclipse中的Web项目自动部署到Tomcat

    2019独角兽企业重金招聘Python工程师标准>>> 很长时间没用Eclipse了,近期由于又要用它做个简单的JSP项目,又要重新学习了,虽然熟悉的很快,但记忆总是很模糊,偶尔犯错 ...

最新文章

  1. LeetCode简单题之数组中两元素的最大乘积
  2. python调用dll时路径问题_IDEA 使用 JNA 时,DLL 文件路径问题
  3. poj2420 A Star not a Tree? 【模拟退火】
  4. 基于java的WebGIS服务器的设计
  5. android四个组件的跨进程通信
  6. [CQOI2012] 局部极小值(状压DP + 容斥 + 搜索)
  7. c语言程序设计课件数组,数组(C语言程序设计)课件
  8. hibernate缓存详解
  9. 实现拍照_实现“拍照自由”!vivo IFEA分离式镜头打破思维定势
  10. JavaScript学习(五十)—hasOwnProperty属性和in关键字
  11. linux下 添加一个新账户tom,linux 账户管理命令 useradd、groupadd使用方法
  12. 使用web进行数据库管理
  13. mysql常用数据操作之增、删、改
  14. 最长递增子序列(LIS longest-increment-subsequence)最长连续递增子序列 最大连续子序列和
  15. 计算机一级要下什么软件练习,国家计算机一级MS OFFICE练习软件
  16. 迅雷精简版 for Mac!附精简教程!
  17. ROS Dst-Nat 后内网不能通过公网IP访问内网服务器解决方法
  18. 4星|《经济学人》熊彼特系列2017合集:美国人逐渐按自己的职业及社会价值而聚居至不同区域...
  19. 如何把pdf转成图片jpg格式?俩个方法,1分钟搞定
  20. CSS z-index与JQ fadeOut()缓动效果无效问题

热门文章

  1. 任务栏程序图标与托盘图标的移动
  2. win7系统中微软拼音
  3. 索尼、联想新款笔记本物有所值
  4. 数据结构 C 代码:表达式求值
  5. 拟态防御_拟态从未消失。 这就是为什么。
  6. 网站刷关键词_如何让关键词SEO排名,长期稳定?
  7. 局域网内PC,打开WEB网页慢或者超时
  8. 关于双向多对一的@JsonIgnore注解使用方法
  9. java mysql dbhelper_DbHelper通用数据库类及增删改 使用示例
  10. Spark序列化简介