GitHub+Jenkins持续集成简介

DevOps(英文Development(开发)和Operations(技术运营)的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作

持续集成概念:

  1. 持续集成Continuous Integration
    持续交付Continuous Delivery
    持续部署Continuous Deployment

1.1 什么是持续集成:

持续集成是指开发者在代码的开发过程中,可以频繁的将代码部署集成到主干,并进程自动化测试 

1.3 什么是持续交付:

持续交付指的是在持续集成的环境基础之上,将代码部署到预生产环境 

1.4 持续部署:

在持续交付的基础上,把部署到生产环境的过程自动化,持续部署和持续交付的区别就是最终部署到生产环境是自动化的。 

1.5 部署代码上线流程

  1. 1.代码获取(直接了拉取)
    2.编译      (可选)
    3.配置文件放进去
    4.打包
    5.scp到目标服务器
    6.将目标服务器移除集群
    7.解压并放置到Webroot
    8.Scp 差异文件
    9.重启      (可选)
    10.测试
    11.加入集群

运维必知OWASP

Jenkins上OWASP 插件介绍: 它是开放式Web应用程序安全项目

[OWASP,Open Web Application Secunity Project]

它每年会出一个top10的安全漏洞,我们需要知道当前top10的漏洞有哪些 

https://www.owasp.org/images/5/57/OWASP_Proactive_Controls_2.pdf 
https://www.owasp.org/index.php/Top_10_2013-Top_10

Gitlab介绍

  GitLab是一个利用 Ruby on Rails 开发的开源应用程序,实现一个自托管的Git项目仓库,可通过Web界面进行访问公开的或者私人项目。 
  GitLab拥有与Github类似的功能,能够浏览源代码,管理缺陷和注释。可以管理团队对仓库的访问,它非常易于浏览提交过的版本并提供一个文件历史库。它还提供一个代码片段收集功能可以轻松实现代码复用,便于日后有需要的时候进行查找。

环境准备

[[email protected] ~]# cat /etc/redhat-release 
CentOS Linux release 7.3.1611 (Core) 
[[email protected] ~]# uname -r
3.10.0-514.2.2.el7.x86_64

下载epel源

  1. [[email protected] ~]# wget http://mirrors.aliyun.com/epel/epel-release-latest-7.noarch.rpm 
    [[email protected] ~]# wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  1. 关闭 NetworkManager 和防火墙 
    [[email protected] ~]#systemctl stop firewalld.service
    systemctl disable firewalld 
    systemctl disable NetworkManager
  2. 关闭SELinux并确认处于关闭状态 
    sed -i ‘s/SELINUX=enforcing/SELINUX=disabled/‘ /etc/selinux/config
    grep SELINUX=disabled /etc/selinux/config
    setenforce 0
  1. 更新系统并重启
  2. [[email protected]-node1 ~]# yum update -y && reboot

我们一共有2台:192.168.56.11192.168.56.12我们安装在192.168.56.11上

[[email protected] /]# yum install curl policycoreutils openssh-server openssh-clients postfix -y
[[email protected] /]# systemctl start postfix
[[email protected] /]# curl -sS https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.rpm.sh | sudo bash
[[email protected] /]# yum install -y gitlab-ce

#由于网络问题,国内用户,建议使用清华大学的镜像源进行安装

[[email protected] ~]# cat /etc/yum.repos.d/gitlab-ce.repo
[gitlab-ce]
name=gitlab-ce
baseurl=
repo_gpgcheck=0
gpgcheck=0
enabled=1
gpgkey=
[[email protected] ~]# yum makecache
[[email protected] /]#  yum install -y gitlab-ce

在安装一个git客户端

  1. [[email protected] /]#  yum install -y git

配置并启动gitlab-ce

[[email protected] ~]# gitlab-ctl reconfigure
#时间可能比较长,耐心你等待即可!----
gitlab常用命令:
关闭gitlab:[[email protected] ~]# gitlab-ctl stop
启动gitlab:[[email protected] ~]# gitlab-ctl start
重启gitlab:[[email protected] ~]# gitlab-ctl restart

可以使用gitlab-ctl管理gitlab,例如查看gitlab状态:

  1. [[email protected] /]#  gitlab-ctl status
    run: gitlab-workhorse: (pid 7437) 324s; run: log: (pid 7436) 324s
    run: logrotate: (pid 7452) 316s; run: log: (pid 7451) 316s
    run: nginx: (pid 8168) 2s; run: log: (pid 7442) 318s
    run: postgresql: (pid 7293) 363s; run: log: (pid 7292) 363s
    run: redis: (pid 7210) 369s; run: log: (pid 7209) 369s
    run: sidekiq: (pid 7479) 265s; run: log: (pid 7426) 326s
    run: unicorn: (pid 7396) 327s; run: log: (pid 7395) 327s

提示: 我们要保证80端口不被占用
我们可以查看一下端口

[[email protected] /]# gitlab-ctl restart
ok: run: gitlab-workhorse: (pid 8353) 0s
ok: run: logrotate: (pid 8360) 1s
ok: run: nginx: (pid 8367) 0s
timeout: down: postgresql: 0s, normally up, want up
ok: run: redis: (pid 8437) 0s
ok: run: sidekiq: (pid 8445) 0s
ok: run: unicorn: (pid 8450) 0s

[[email protected] /]# lsof -i:80
COMMAND  PID       USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
nginx   8367       root    7u  IPv4  54972      0t0  TCP *:http (LISTEN)
nginx   8368 gitlab-www    7u  IPv4  54972      0t0  TCP *:http (LISTEN)

Web:访问:192.168.56.11 

提示:启动gitlab需要时间!

Web页面提示我们需要设置一个账号密码(我们要设置最少8位数的一个账号密码)我们设置密码为:12345678

 我们在后面的页面设置用户名 

我们现在是以管理员的身份登陆 
我们点击右上角管理区域

第一步:我们关闭自动注册,因为我们内部使用不需要用户自己注册,由运维分配用户即可 

提示:Save在页面最下放!!!!!! 记得点保存!!!!!!!!!!!!

现在在查看首页就没有注册页面了

第二步:我们创建一个用户,在创建一个项目

先创建一个组 

**提示:**gitlab上面有一个项目跟组的概念,我们要创建一个组,才可以在创建一个项目。因为gitlab的路径上首先是ip地址,其次是组 

点击下方Create group

然后我们在组里面创建项目

下一步: 

创建完成之后它提示我们可以创建一个key对它进行管理

我们点击上面的README然后我们随便在里面写点东西

填写完成我们点击前面进行查看

我们要做免密验证,现在去192.168.56.11复制下面的.ssh/id_rsa.pub

[[email protected] ~]$ cat .ssh/id_rsa.pub
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC8wfTSQcSyhlsGYDSUtuxZNb1Gl3VU56nAPuxAEF2wP2ZW
Z2yva354ZdKOOb6rZx2yZxqy5XIj7opBJPbhraXap+NtCH5qWyktR7dH19RBmCS7vUGgvk/5RQC0mVFrC8cz
tBp0M/5HxMuhVir6mD1rhbDvvaLL6S5y4gljzC1Gr2VRHIb4Et9go/38c2tqMjYCike7WWbFRyL9wTal6/14
6+9uREZ/r69TBTKrGuRqF44fROQP8/ly02XFjlXyl6J5NnGTk6AU855pwasX0W9aNPce3Ynrpe1TBTubmfQh
rH1BwteEmg+ZXNRupxjumA+tPWfBUX+u51r/w7W/d4PD [email protected]#提示:需要提前做秘钥认证

设置Keys 

添加完之后我们就可以使用www用户,就可以拉了

点击Projects 选择SSH,我们要将代码拉去下来

[[email protected] ~]$ cd /deploy/code/
[[email protected] code]$ ls
web-demo
[[email protected] code]$ rm -rf web-demo/
[[email protected] ~]$ git clone  [email protected]:web/web-demo.git
Cloning into ‘web-demo‘...
The authenticity of host ‘linux-node1 (192.168.56.11)‘ 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)? yes
Warning: Permanently added ‘linux-node1‘ (ECDSA) to the list of known hosts.
remote: Counting objects: 3, done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (3/3), done.
[[email protected] ~]$ ls web-demo/
README.md
#git clone是克隆的意思

我们来模拟开发继续写代码提交

[[email protected] ~]$ mkdir -p /web-demo
[[email protected] ~]$ vim web-demo/index.html
[[email protected] ~]$ cd web-demo/
[[email protected] web-demo]$
[[email protected] web-demo]$ ls
index.html  README.md
[[email protected] web-demo]$ git add *
[[email protected] web-demo]$ git commit -m "add index.html"
*** Please tell me who you are.
Run
  git config --global user.email "[email protected]"
  git config --global user.name "Your Name"
to set your account‘s default identity.
Omit --global to set the identity only in this repository.
fatal: empty ident name (for <[email protected](none)>) not allowed

需要身份验证:

  1. [[email protected] web-demo]$ git config --global user.email "[email protected]"
    [[email protected] web-demo]$   git config --global user.name "Your Name"
    [[email protected] web-demo]$ git commit -m "add index.html"
    [master be8a547] add index.html
     1 file changed, 169 insertions(+)
     create mode 100644 index.html

git push命令用于将本地分支的更新,推送到远程主机。它的格式与git pull命令相仿。

[[email protected] web-demo]$ git push
warning: push.default is unset; its implicit value is changing in
Git 2.0 from ‘matching‘ to ‘simple‘. To squelch this message
and maintain the current behavior after the default changes, use:
  git config --global push.default matching
To squelch this message and adopt the new behavior now, use:
  git config --global push.default simple
See ‘git help config‘ and search for ‘push.default‘ for further information.
(the ‘simple‘ mode was introduced in Git 1.7.11. Use the similar mode
‘current‘ instead of ‘simple‘ if you sometimes use older versions of Git)
Counting objects: 4, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (3/3), done.
Writing objects: 100% (3/3), 7.66 KiB | 0 bytes/s, done.
Total 3 (delta 0), reused 0 (delta 0)
To [email protected]:web/web-demo.git
   0c1d357..be8a547  master -> master

我们的gitlab安装在opt/gitlab 
gitlab配置文件存放在etc/gitlab/gitlab.rb 
#现在git 需要加上主机名,我们可以修改配置文件,让它使用IP进行访问

编辑配置文件

[[email protected] ~]# vim /etc/gitlab/gitlab.rb
external_url ‘
 
[[email protected] ~]# gitlab-ctl reconfigure
#提示:修改完需要从新配置才会生效

我们从新登陆进行查看 
咦! 为啥还没改呢! 我们从新创建一个项目在试一下

友情提示: 
 关于Git可以查看徐布斯博客 or 廖雪峰Git

自动化运维之DevOps

  DevOps(英文Development(开发)和Operations(技术运营)的组合)是一组过程、方法与系统的统称,用于促进开发(应用程序/软件工程)、技术运营和质量保障(QA)部门之间的沟通、协作与整合。 
  它的出现是由于软件行业日益清晰地认识到:为了按时交付软件产品和服务,开发和运营工作必须紧密合作

简单的来说DevOps是一种文化,是让开发开发、运维、测试能够之间沟通和交流

  自动化运维工具:saltstack、jenkins、等。因为他们的目标一样,为了我们的软件、构建、测试、发布更加的敏捷、频繁、可靠 
  如果运维对git不熟,是无法做自动化部署。因为所有的项目都受制于开发

Jenkins 介绍

Jenkins只是一个平台,真正运作的都是插件。这就是jenkins流行的原因,因为jenkins什么插件都有 
Hudson是Jenkins的前身,是基于Java开发的一种持续集成工具,用于监控程序重复的工作,Hudson后来被收购,成为商业版。后来创始人又写了一个jenkins,jenkins在功能上远远超过hudson

Jenkins官网:https://jenkins.io/

安装 
安装JDK 
  Jenkins是Java编写的,所以需要先安装JDK,这里采用yum安装,如果对版本有需求,可以直接在Oracle官网下载JDK。

[[email protected] ~]# yum install -y java-1.8.0

安装jenkins

[[email protected] ~]# cd /etc/yum.repos.d/
[[email protected] yum.repos.d]# wget http://pkg.jenkins.io/redhat/jenkins.repo
[[email protected] ~]# rpm --import http://pkg.jenkins.io/redhat/jenkins.io.key
[[email protected] ~]# yum install -y jenkins
[[email protected] ~]# systemctl start jenkins
#本文使用yum进行安装,大家也可以使用编译安装。

新版本的jenkins为了保证安全,在安装之后有一个锁,需要设置密码之后才可以解锁

Jenkins Web访问地址:192.168.56.11:8080 
友情提示:jenkins如果跟gitlab在一台服务器需要将jenkins的端口进行修改,需要将jenkins的8080修改为8081 

[[email protected] ~]# cat /var/lib/jenkins/secrets/initialAdminPassword
490a2f35a2df49b6b8787ecb27122a3a

复制这个文件下面的ID,否则不可以进行安装。

我们选择推荐安装即可

它会给我们安装一些基础的插件 

设置用户名密码: 

点击保存并退出 

早期jenkins默认是不需要登陆的 

我们先来介绍一下jenkins基础功能

我们点击新建 

这里就是构建一个项目

用户界面:主要是一些用户的管理 

可以看到当前登陆用户及用户权限等

任务历史:可以查看到所有构建过的项目的历史 
#之所以叫构建,是因为都是java,因为如果不是java程序就没有构建这个词。但是我们也可以把一些工作称之为构建

系统管理:存放jenkins所有的配置 

My Views:视图功能,我们可以自己创建一个自己的视图 

构建队列:如果当前有视图任务都会显示在这里 

构建执行状态:显示在正构建的任务 

系统管理:-系统设置

设置Jenkins全局设置&路径


Jenkins系统管理比较重要的就是插件管理了 
#因为jenkins所有的东西都需要靠插件来完成,

点击已安装可以查看我们的安装 

我们想安装什么插件,我们可以选择可选插件

我们为了和gitlab和在一起,我们需要安装一个插件


查看还可以去jenkins官网下载,然后上传插件 
因为很多插件需要翻墙才可以继续下载,jenkins还提供了代理的设置

  1. 还是在服务器目录下进行上传插件
    目录路径= /var/lib/jenkins/plugins/
    这个目录下是我们安装所有的插件
时间: 2024-10-22 17:25:51

GitHub+Jenkins持续集成简介的相关文章

jenkins持续集成简介

什么是持续集成 随着软件开发复杂度的不断提高,团队开发成员间如何更好地协同工作以确保软件开发的质量已经慢慢成为开发过程中不可回避的问题.尤其是近些年来,敏捷(Agile) 在软件工程领域越来越红火,如何能再不断变化的需求中快速适应和保证软件的质量也显得尤其的重要. 持续集成正是针对这一类问题的一种软件开发实践.它倡导团队开发成员必须经常集成他们的工作,甚至每天都可能发生多次集成.而每次的集成都是通过自动化的构建来验证,包括自动编译.发布和测试,从而尽快地发现集成错误,让团队能够更快的开发内聚的软

12.Jenkins持续集成企业实战

阅读目录: Jenkins持续集成企业实战1.1 目前主流网站部署的流程1.2 Jenkins持续集成简介1.3 Jenkins持续集成组件1.4 Jenkins平台安装部署1.5 Jenkins相关概念1.6 Jenkins平台设置1.7 Jenkins构建JOB工程1.8 Jenkins自动化部署1.9 Jenkins插件安装1.10 Jenkins邮件配置1.11 Jenkins多实例配置1.12 Jenkins+Ansible高并发构建 Jenkins持续集成企业实战 构建企业自动化部署

构建基于Jenkins + Github的持续集成环境

搭建持续集成首先要了解什么是持续集成,带着明确的目标去搭建持续集成环境才能让我们少走很多弯路.持续集成(Continuous integration)简称CI,是一种软件开发的实践,可以让团队在持续集成的基础上收到反馈并加以改进,不必等到开发的后期才寻找和修复缺陷.当然要明白的是持续集成环境的搭建也不是一劳永逸的,随着软件项目复杂度的增加,持续集成的环境同样要加以维护以确保集成环境的可靠性. 持续集成的重要要素:1.统一的代码库. 2.CI服务器 3.自动化测试和构建的脚本 4.Slaves 持

Python接口测试实战5(上) - Git及Jenkins持续集成

如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战2 - 使用Python发送请求 Python接口测试实战3(上)- Python操作数据库 Python接口测试实战3(下)- unittest测试框架 Python接口测试实战4(上) - 接口测试框架实战 Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例

jenkins持续集成源码管理选项为None,构建失败找不到git.exe解决办法

我的jenkins版本为Jenkins ver. 2.19.1 1.源码管理选项只有None的解决办法: 在插件管理中心,搜索对应的源码管理插件这里以git为例,搜索git plugin点击右下角的安装方式(在线安装需要连接VPN你懂的),如下图 重启后即可看到git按钮: 2.jenkins持续集成时,点击构建失败无法找到git.exe解决办法如下图: 控制台输出提示构建失败git.exe rev-parse --is-inside-work-tree # timeout=10:原因是没有找到

Jenkins持续集成学习及企业级应用

文档声明 该文档主体为去年末自主学习时总结,旨在为我司提供一套企业级持续集成解决方案.这篇文章现在看上去很稚嫩,但是当时花费了许多心血.希望将当时的学习心得拿出来与大家交流.该文档主要说明了jenkins持续集成部署的相关步骤,并着重实现了权限分组,邮件配置,插件配置的jenkins实现过程.对出现的问题进行解决,是一套持续集成的解决方案. 持续集成Continuous integration 提出 针对复杂度高的项目提出“早集成,常集成,频繁集成”来帮助项目在早期发现项目风险和质量问题 作用

4、Jenkins持续集成之maven编译

4.Jenkins持续集成之maven编译.md 简介     Jenkins是一个开源的持续集成工具,应用Jenkins搭建持续集成环境,可以进行自动构建.自动编译和部署,非常方便.在服务器比较少的情况下,Jenkins的优势并不明显,但是随着项目发展,服务器数量的增加,Jenkins的优势就会凸显出来,可以很好的提高效率,减少很多人工操作.现在公司的开发都是使用Git管理代码,Maven管理多模块和项目依赖.Jenkins支持两种工程:FreeStyle工程和Maven工程.如果代码是用Ma

2、Jenkins持续集成之前期准备

2.Jenkins持续集成之前期准备.md 持续集成 互联网软件的开发和发布,已经形成了一套标准流程,最重要的组成部分就是持续集成(Continuous integration,简称CI). 持续集成指的是,频繁地(一天多次)将代码集成到主干,它的好处主要有两个. (1)快速发现错误.每完成一点更新,就集成到主干,可以快速发现错误,定位错误也比较容易.     (2)防止分支大幅偏离主干.如果不是经常集成,主干又在不断更新,会导致以后集成的难度变大,甚至难以集成 持续集成的目的,就是让产品可以快

jenkins持续集成工作原理、功能、部署方式等介绍

超详细的jenkins持续集成工作原理.功能.部署方式等介绍 原创 波波说运维 2019-08-29 00:01:00 概述 今天简单整理了一下jenkins的一些概念性内容,归纳如下: 1.概念 jenkins是一个开源项目,提供了一种易于使用的持续集成系统,使开发者从繁杂的集成中解脱出来,专注于更为重要的业务逻辑实现上.同时 Jenkins 能实时监控集成中存在的错误,提供详细的日志文件和提醒功能,还能用图表的形式形象地展示项目构建的趋势和稳定性. Jenkins可以构建一个自动化的持续集成