持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]
转载:https://www.abcdocker.com/abcdocker/2065
一、代码流水线管理
Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目。如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦。所以出现pipeline名词。
代码质量检查完毕之后,我们需要将代码部署到测试环境上去,进行自动化测试
新建部署代码项目
点击新建 

这里只需要写一下描述 
执行Shell脚本 
温馨提示:执行命令主要涉及的是权限问题,我们要搞明白,jenkins是以什么权限来执行命令的。那么问题来了,我们现在192.168.56.11上,如果在想192.168.56.12上执行命令。需要怎么做呢?
我们做无秘钥有2种分案:
1、使用jenkins用户将秘钥分发给192.168.56.12上
2、使用root用户将秘钥分发给192.168.56.12上,如果使用root用户还要进行visudo授权。因为Web上默认执行命令的用户是jenkins
1.我们使用root做密码验证
#这里我们的key已经做好,如果没做可以直接 ssh-keygen -t ras 来生成秘钥
我们将192.168.56.11上的公钥复制到192.168.56.12上
[root@linux-node1 ~]# cat .ssh/id_rsa.pubssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1[root@linux-node2 ~]# vim .ssh/authorized_keysssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQChVQufrGwqP5dkzIU4ZwXCjRuSvMVGN5lJdvL/QFckmlVphWMsQw06VsPhgcI1NDjGbKOh5pbjrylyJUCig5YIJ1xuMOZ2YAK32SceMxnVhEb/G4wNb9VMsGQ/Vs4CxrU1HdATktH9zDAV4Qz81x2POYJW5B5LAvwZ4owqnIpZ7o3ya6xBxEvCIMSVtD17oKrNqAphsg+e68KvRexiNCEbCbRGGq3bKevgiDsWpSGnCYsJC0+cSrUxuzEO3G6AqGI/qR3nOeg91rOsoAP3FpFjBKgb/sXggkwwjmGIqFXJrUG+XmczeF4kG/rUrNbdy84e5RyHoIS3XKnJuRjTxHyD root@linux-node1[root@linux-node1 ~]# ssh 192.168.56.12The authenticity of host '192.168.56.12 (192.168.56.12)' can't be established.ECDSA key fingerprint is b5:74:8f:f1:03:2d:cb:7d:01:28:30:12:34:9c:35:8c.Are you sure you want to continue connecting (yes/no)? yesWarning: Permanently added '192.168.56.12' (ECDSA) to the list of known hosts.Last login: Sat Dec 17 02:14:31 2016 from 192.168.56.1[root@linux-node2 ~]# lltotal 4-rw-------. 1 root root 1021 Dec 13 05:56 anaconda-ks.cfg#现在SSH连接就不需要密码了授权jenkins用户,使用visudo或者编辑配置文件/etc/sudoers[root@linux-node1 ~]# vim /etc/sudoers92 jenkins ALL=(ALL) NOPASSWD:/usr/bin/ssh#jenkins授权所有主机,不需要密码执行ssh。切记不要授权ALL
我们在192.168.56.12上写一个简单shell脚本,检测是否可以执行成功。正式环境可以写一个自动化部署的脚本
[root@linux-node2 ~]# echo "echo "hello word"" >demo.sh[root@linux-node2 ~]# chmod +x demo.sh[root@linux-node2 ~]# ll demo.sh-rwxr-xr-x 1 root root 16 Dec 17 02:24 demo.sh
jenkins编写执行脚本 
然后我们点击立即构建 
成功! 
现在我们要将代码质量管理和测试部署连接起来。
这时候就用到了git钩子
我们需要安装jenkins插件parameterized 
我们选择demo-deploy 
再次点击项目设置的时候就会出现Trigger parameterized build on other projects 
提示:Projects to build是为构建设置一个项目。例如我们想构建完代码项目后执行测试的,这里就填写测试的就可以。

最后点击保存,点击构建。我们查看效果 

#这样我们每次点击demo-deploy 它就会在构建完成之后在对auto-deploy进行构建
下载pipeline。这样只需要构建一个项目,就会帮我们完成所有相关项目
搜索插件pipeline 
等待安装完成 
我们点击首页+号,新建一个试图 
点击OK 
pipeline 配置 

然后我们点击保存
pipeline视图如下: 
点击Run 
这样就先代码质量进行管理,然后就开始部署了
构建成功后: 
这样我们下次想看pipeline视图的时候,点击上面的demo-pipeline即可 
二、Jenkins + gitlab集成
Jenkins + gitlab集成后,实现的功能是 开发写好代码提交至gitlab上,当时开始push到gitlab上之后,jenkins自动帮我们立即构建
这个项目我们需要安装一个gitlab钩子的脚本
提示: jenkins不论想实现什么功能,都需要安装插件!!

安装完插件之后我们就开始配置钩子脚本 
这里需要我们在服务器里面写一个令牌,在jenkins上也写一个令牌。这两个可以连接到一起就可以。
#因为用到了令牌我们还需要在安装一个插件,否则将无法使用。因为令牌是需要登录之后才会有,所以需要有一个管理的插件
插件搜索:Build Aut 
为了令牌的安全性,我们使用openssl生成一个
[root@linux-node1 ~]# openssl rand -hex 100a37c6d7ba1fe3472e26

然后我们点击保存即可
因为jenkins上也提示我们需要在gitlab上添加钩子脚本
点击我们创建的项目 
选中Webhooks 
Build Authorization Token Root Plugin 插件使用说明
https://wiki.jenkins-ci.org/display/JENKINS/Build+Token+Root+Plugin
使用Build插件后,url如下:
http://192.168.56.11:8080/buildByToken/build?job=auto-deploy&token=0a37c6d7ba1fe3472e26auto-deploy=项目名称(构建时的项目名称)0a37c6d7ba1fe3472e26=jenkins填写的令牌

然后点击Add Webhook 
下方就会出现我们这个选项,我们点击Test进行测试 
测试结果 
向git服务器提交代码,验证是否可以自动部署:
[root@linux-node1 ~]# echo "Build Token Root Plugin" > index.html[root@linux-node1 ~]# git add index.html [root@saltmaster ~/weather]# git commit -m "text"[root@linux-node1 ~]# git push origin master
jenkins服务器的日志记录:
[root@linux-node1 ~]# tail -f /var/log/jenkins/jenkins.log

jenkins项目构建: 
访问web界面验证代码是否最新的:
jenkins控制台输出信息: 
持续集成+自动化部署[代码流水线管理及Jenkins和gitlab集成]的更多相关文章
- 持续集成与自动化部署---代码流水线管理及Jenkins和gitlab集成
1.代码流水线管理 Pipeline名词顾名思义就是流水线的意思,因为公司可能会有很多项目.如果使用jenkins构建完成后,开发构建项目需要一项一项点击,比较麻烦.所以出现pipeline名词. 代 ...
- Linux-GitLab+Jenkins持续集成+自动化部署
GitLab+Jenkins持续集成+自动化部署 什么是持续集成? (1)Continuous integration (CI) 持续集成是一种软件开发实践,即团队开发成员经常集成他们的工作,通常每个 ...
- CentOS 7 Gitlab+Jenkins持续集成+自动化部署
基于上次的环境<部署Gitlab+Jenkins持续集成环境> 来实现自动化部署 系统管理–>插件管理–>安装以下插件: Credentials Plugin(默认已经安装) ...
- .Net Core自动化部署系列(三):使用GitLab CI/CD 自动部署Api到Docker
之前写过使用Jenkins实现自动化部署,最近正好没事研究了下GitLab的自动化部署,顺便记录一下. 使用GitLab部署我们需要准备两件事,第一个起码你得有个GitLab,自己搭建或者使用官方的都 ...
- 自动化部署教程(一) redhat安装jenkins
自动化部署教程(一) redhat安装jenkins 源配置: sudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.or ...
- Jenkins与Gitlab集成
一.安装jenkinshttps://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat/ #清华yum源 yum -y install java-1.8. ...
- Asp.net Core 使用Jenkins + Dockor 实现持续集成、自动化部署(一):Jenkins安装
2019/1/31更新,经过我一段时间的使用 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用docker方式安装 建议大家的jenkins还是不要使用d ...
- Jenkins自动化部署代码
通过jenkins自动化部署项目代码可以大幅度节省打包上传部署的时间,提高开发测试的工作效率 ========== 完美的分割线 =========== 1.Jenkins是什么 1)Jenkins是 ...
- jenkins与gitlab集成,分支提交代码后自动构建任务(六)
一.在gitlab中创建token 复制token,此token只显示一次:6SB8y4jt31NnYG5-nWoi 二.在gitlab上为项目创建trunk分支 三.在jenkins中配置gitla ...
随机推荐
- Access restriction: The method XXX from the type XXX is not accessible due to restriction XXX
插件重构的时候 遇到这个问题 Access restriction: The method setDefaultAutoCommit(boolean) from the type BasicDataS ...
- perl数组高级
1 去除一个数组中的重复元素: 使用grep函数代码片段: 代码: my @array = ( 'a', 'b', 'c', 'a', 'd', 1, 2, 5, 1, 5 ); my %count; ...
- JAVA card 应用开发(二) 在项目添加APPLET
在上篇博文中.<JAVA card 应用开发创建第一个APPLET>.介绍了一个项目从无到有. 那么.我们建立了这个项目后,仅仅有一个应用(一个可选AID),假设我希望这个项目能够有多个应 ...
- 常见排序的JAVA实现和性能测试
五种常见的排序算法实现 算法描述 1.插入排序 从第一个元素开始,该元素可以认为已经被排序 取出下一个元素,在已经排序的元素序列中从后向前扫描 如果该元素(已排序)大于新元素,将该元素移到下一位置 重 ...
- 哥谭第一季/全集Gotham迅雷下载
哥谭市 第一季 Gotham (2014)本季看点:<哥谭镇>将由丹尼·加农掌镜,布鲁诺·海勒执笔剧本.电视剧集<哥谭>可以说<蝙蝠侠>的前传,剧集描述的是DC漫画 ...
- ios之快速领会VFL的demo
在网上看到一篇blog,超正!快速领会ios的vfl. 这里贴上blog的地址. http://www.thinkandbuild.it/learn-to-love-auto-layout-prog ...
- activity启动流程速记笔记
Activity.startActivity(Intent intent)----Activity.startActivityForResult(Intent intent)----Instrumen ...
- 删除list中的特定元素
对于动态删除list中的特定元素,一般用linkedList,删除时有以下两种方法. 1. 循环遍历,找到要删除的元素后删除并且减少list长度.如果不减少list长度,那么就仅仅删除了元素,但没改变 ...
- 使用Logstash创建ES映射模版并进行数据默认的动态映射规则
本文配置为 ELK 即(Elasticsearch.Logstash.Kibana)5.5.1. Elasticsearch 能够自动检测字段的类型并进行映射,例如引号内的字段映射为 String,不 ...
- C# 异步编程Task整理(一)
一.简介 .Net Framework 4.0新增了一个System.Threading.Tasks命名空间,它包含的类提供了任务的相关操作.使用任务不仅可以获得一个抽象层,还能对底层线程进行很多统一 ...