gitlab与jenkins的自动化部署(通过webhook与ansilble)


1、部署介绍

gitlab服务器:192.168.1.49:80
jenkins服务器:192.168.1.49:8180
ps:由于两个服务运行在同一台服务器上面,因此,为了保证jenkins服务器能拉取到 gitlab的代码,把root的用户的公钥分别上传到gitlab admin用户跟jenkins admin用户当中去。jenkins我没有使用默认的端口8080,主要是我公司的gerrit架构会用到这个8080端口,所以为了防止冲突,改为8180端口


2、gitlab安装

a) 第一步:安装相应的在依赖包(postfix或者sendmail),其中选择internet site这种网络smtp邮件服务器这种方式来发送邮件,其他一些依赖包:curl \openssh-server\ ca-certificates\ postfix

If you install Postfix to send email please select 'Internet Site' during setup. Instead of using Postfix you can also use Sendmail or configure a custom SMTP server . If you wish to use Exim, please configure it as an SMTP server.
On Centos 6 and 7, the commands below will also open HTTP and SSH access in the system firewall.

操作命令:
sudo apt-get install curl openssh-server ca-certificates postfix

b) 第二步:Add the GitLab package server and install the package. 下载gitlab安装包,并且安装
方法1、增加yum源链接,使用sduo apt-get install gitlab-ee
Apt-get安装Curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh|sudo bash
操作命令:
sudo apt-get install gitlab-ce

If you are not comfortable installing the repository through a piped script, you can find the entire script here .
Alternatively you can select and download the package manually and install using
方法2、deb包安装下载deb包,然后安装

下载: sudo wget https://packages.gitlab.com/gitlab/gitlab-ee
安装: sudo dpkg -i gitlab-ce_8.1.2-ee.0_amd64.deb

建议一般下载后再装

c)第三步,启用配置,并且启动 GitLab
操作命令:
sudo gitlab-ctl reconfigure

d) 第四步:打开网页,进行注册,使用默认密码
http://192.168.0.177:80
Username: rootPassword: 5iveL!fe

e) 第五步:2.1.6. Upload your license(EE版本需要认证,CE) 这步我操作的时候是没有的
Go toAdmin > Licenseand upload your.gitlab-licensefile.
Don't have a license yet? Get a subscription.

其实只要下载到gitlab ce包(ce是社区版,不用验证的),直接安装就行了,启动命令为gitlab-ctl reconfigure


3、jenkins安装

a) Install Jenkins
wget -q -O - https://jenkins-ci.org/debian/jenkins-ci.org.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins-ci.org/debian binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt-get update
sudo apt-get install jenkins

b) Starting Jenkins

nohup java -Dorg.jenkinsci.plugins.gitclient.Git.timeOut=60 -Dfile.encoding=UTF-8 -Dhudson.DNSMultiCast.disabled=true -jar /usr/share/jenkins/jenkins.war --httpPort=8180 > /var/log/jenkins_log 2>&1 &

(注意--httpPort=8180放在后面)

c) 开启 jenkins页面为:192.168.0.179:8180
http://xxxxx:8180/

d) 插件安装
Git Plugin
SSH Plugin
URL Trigger Plugin
Gerrit Trigger Plugin
Gitlab Hook
Gitlab Merge Request Builder
GitLab Plugin

e) 注册用户
先开启用户注册按钮,用户注册完毕以后,关闭用户注册


4、配置jenkins拉取gitlab项目的账号的sshkey

由于两个服务运行在同一台服务器上面,因此,为了保证jenkins服务器能拉取到 gitlab的代码,把root的用户的公钥分别上传到gitlab admin用户跟jenkins admin用户当中去。步骤我就不写了!


5、配置jenkins项目

1、登录192.168.1.49:8180
点击新建:

依次填写相关信息:(注意,项目安全这块是在日常管理中才会用到,如果简单测试可以忽略)

源码管理:

触发器:

我这里选择得比较多,有push触发,也有merge触发

构建:(通过shell来构建)

我这里是通过简单的ansible来控制web服务器的压缩包scp,tar解压,还有指定软联接
#变量WORKSPACE、GIT_URL是jenkins默认内置的变量

  1. #!/bin/bash
  2.  
  3. #变量WORKSPACE,GIT_URL是jenkins默认提供的变量
  4. cd $WORKSPACE
  5.  
  6. #截取giturl中的产品
  7. product=`echo $GIT_URL| awk -F"/" '{print $NF}'|sed 's/\.git//g'`
  8.  
  9. #截取代码当前的前七位sha值
  10. sha=`cat .git/HEAD|cut -b -`
  11.  
  12. #指定日期
  13. d=`date +"%Y%m%d"`
  14.  
  15. #指定压缩包的路径与包全称,包名(不带后缀)
  16. p_pathname=/tmp/"$product"_"$d"_"$sha".tar.gz
  17. p_name="$product"_"$d"_"$sha".tar.gz
  18. p_productname="$product"_"$d"_"$sha"
  19.  
  20. #本地压缩
  21. tar -cf $p_pathname $WORKSPACE/*
  22.  
  23. #指定web服务器的包的存放位置
  24. p_store=/var/prod/"$product"/"$d"
  25.  
  26. #指定web服务器的包解压位置
  27. p_target=$p_store/$p_productname
  28.  
  29. #指定nginx网页代码位置
  30. www=/mnt/www/launcher.szprize.cn
  31.  
  32. #dev代表web服务器,确保包解压路径存在
  33. ansible dev -m shell -a "mkdir -p $p_target "
  34. #dev代表web服务器,ansible copy模块远程复制
  35. ansible dev -m copy -a "src=$p_pathname dest=$p_store/"
  36. #ansible 远程解压
  37. ansible dev -m shell -a "tar -xf $p_store/$p_name -C $p_target"
  38. #ansible 软联接
  39. ansible dev -m file -a "src=$p_target dest=$www state=link"#!/bin/bash

jenkins这边就配置完了

但是注意:jenkins跟gitlab怎么通信触发呢?

大家请留意触发器那块有一句话:
Build when a change is pushed to GitLab. GitLab CI Service URL: http://192.168.1.49:8180/project/launcher
它的意思的,gitlab ci接口可以通过http://192.168.1.49:8180/project/launcher来连接两者的有关系。



6、gitlab设置webhook

在对应的gitlab项目设置当中,设置webhooks

当然,这里也可以设置triger事件:

保存后会在底部,生成webhook,点击test,看jenkins界面是否触发了!

登录jenkins界面:192.168.1.49:8180

然后大功告成!


gitlab与jenkins的自动化部署(通过webhook与ansilble)的更多相关文章

  1. 【Devops】【docker】【CI/CD】3.Jenkins+GitLab+docker+springboot 实现自动化部署

    ==================================================================================================== ...

  2. 搭建jenkins实现自动化部署

    搭建jenkins实现自动化部署 一.安装jenkins 1.添加yum repos,然后安装 sudo wget -O /etc/yum.repos.d/jenkins.repo https://p ...

  3. 基于 Jenkins Pipeline 自动化部署

    最近在公司推行Docker Swarm集群的过程中,需要用到Jenkins来做自动化部署,Jenkins实现自动化部署有很多种方案,可以直接在jenkins页面写Job,把一些操作和脚本都通过页面设置 ...

  4. CentOS下Docker与.netcore(四)之 三剑客之一Docker-machine+jenkins简单自动化部署

    CentOS下Docker与.netcore(一) 之 安装 CentOS下Docker与.netcore(二) 之 Dockerfile CentOS下Docker与.netcore(三)之 三剑客 ...

  5. SpringBoot项目 使用Jenkins进行自动化部署 (gitLab管理项目)_

    1.部署服务器创建好对应文件夹和启动脚本 创建文件夹 mkdir /wdcloud/app/rps/rps-module-category 创建启动脚本 cd /wdcloud/app/rps/rps ...

  6. Gitlab配置webhooks实现自动化部署

    Gitlab 自动化部署 原理介绍 配置gitlab当push动作的时候,访问服务器上的一个链接比如www.shenke.group/hook.php hook.php里面写着一行代码,会让服务器gi ...

  7. linux运维、架构之路-Git+Jenkins实现自动化部署

    一.Jenkins介绍          jenkins是一个用JAVA编写的开源的持续集成工具,运行在servlet容器中,支持软件配置管理(SCM)工具,可以执行基于APACHE ANT和APAC ...

  8. jenkins+tomcat自动化部署

    一.配置tomcat tomcat版本:tomcat-9.0.39 vim /usr/local/tomcat-9.0.39/conf/tomcat-users.xml <tomcat-user ...

  9. jenkins搭建自动化部署平台(svn+tomcat重启)

    原文链接:http://blog.csdn.net/zjs40/article/details/51818322 jenkins 自动化部署和集成代码的平台 可以将Git svn 上的代码 check ...

随机推荐

  1. 低版本浏览器支持HTML5标签的方法

    最近刷了一道面试题,是关于低版本浏览器支持HTM5标签的写法,在网上找了一些,都行之有效,但是缺少整体总结,所以在这里总结一下,方便其他人过来阅读. IE低版本需要支持HTML5标签: 方法1.传统引 ...

  2. 用CAS方案解决高并发一致性问题

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt395 缘起:在高并发的分布式环境下,对于数据的查询与修改容易引发一致性问题, ...

  3. Swift4.0 Array详解

    数组的介绍 数组(Array)是一串有序的由相同类型元素构成的集合,数组中的集合元素是有序的,可以重复出现.在Swift中数组类型是Array,是一个泛型集合.数组分成:可变数组和不可变数组,分别使用 ...

  4. python爬虫scrapy框架——人工识别登录知乎倒立文字验证码和数字英文验证码(2)

    操作环境:python3 在上一文中python爬虫scrapy框架--人工识别知乎登录知乎倒立文字验证码和数字英文验证码(1)我们已经介绍了用Requests库来登录知乎,本文如果看不懂可以先看之前 ...

  5. linux每日一练:Enable multithreading to use std::thread: Operation not permitted问题解决

    linux每日一练:Enable multithreading to use std::thread: Operation not permitted问题解决 在linux在需要使用c++11时会遇到 ...

  6. 201521123002 《Java程序设计》第3周学习总结

    1. 本周学习总结 初学面向对象,会学习到很多碎片化的概念与知识.尝试学会使用思维导图将这些碎片化的概念.知识组织起来.请使用纸笔或者下面的工具画出本周学习到的知识点.截图或者拍照上传. 2. 书面作 ...

  7. 201521123104 《JAVA程序设计》第二周学习总结

    1. 本周学习总结 认识了JAVA编程中一些类型与变量,了解了一些基本运算符的使用 变量在命名时,不可以使用数字或一些特殊字符作为开头 不可以声明局部变量后未指定任何值给它之前就使用变量 在程序中写下 ...

  8. 《JAVA程序设计》第14周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自 ...

  9. 201521123101 《Java程序设计》第14周学习总结

    1. 本周学习总结 2. 书面作业 1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现自己的学号.姓名) 在自己建立的数据库上执行常见SQL语句(截图) 2 ...

  10. 在linux下通过hexdump生成一个十六进制的文本保存文件,解析此文件转变成正常源代码文件。

    举例说明: 此十六进制保存的文件为此源代码hexdump生成的: #include<stdio.h> #include<string.h> #include<stdlib ...