临时CI/CD

一、概述

CI :持续集成 Continuous Integration

CD :持续交付Continuous Delivery

CD :持续部署Continuous Deployment

Git:版本控制工具

GitLib: 用于仓库管理系统的开源项目

Github:全球最大代码托管平台

Jenkins:代码自动发布平台

DevOps

DevOps是一种实现Dev(开发)与Ops(运维)工作流有效联合的思想

它是一种重视DevOps之间沟通合作的文化

Devops就是为了让开发运维QA可以高效协作的流程

发展:原始开发、瀑布开发、敏捷开发、精益开发、DevOps

CI

Continuous integration CI,持续集成

是一种软件开发实践,即团队开发成员经常集成他们的工作 ,从而尽快地发现集成错误

目的:让产品开发流程更加敏捷,缩短开发周期

CD

Continuous Delivery CD,持续交付

持续交付是指软件开发过程,从原始需求到最终产品开发过程中,较短周期内以需求的小颗粒度频繁提交的过程

Continuous Deployment ,持续部署

基于持续交付的基础上,把功能稳定,符合产品需求的版本有方法地部署至生产环境中

二、Git

Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理 。 GitLinus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。

1.基本使用

更多可参考: https://www.zybuluo.com/coder-pig/note/581320

2.SVNGit

svn是集中化的版本控制系统, 只有一个单一的集中管理的服务器,保存所有文件的修订版本,而协同工作的人们都通过客户端连到这台服务器,取出最新的文件或者提交更新。

git是分布式的版本控制系统, 每一个终端都是一个仓库,客户端并不只提取最新版本的文件快照,而是把原始的代码仓库完整地镜像下来。每一次的提取操作,实际上都是一次对代码仓库的完整备份。

3.Github

全球最大代码托管平台, 它是基于web的Git仓库,提供公有仓库和私有仓库

2018年6月4日,微软宣布,通过75亿美元的股票交易收购代码托管平台 Github

免密配置过程:

①机器生成公钥

②拷贝公钥至Github https://github.com/settings/keys

三、Gitlab

GitLab是利用 Ruby开发的一个开源的版本管理系统,实现一个自托管的Git项目仓库,可通过Web界面
进行访问公开的或者私人项目。它拥有与Github类似的功能

机器要求:4核 8G 内存

1.安装

下载RPMhttps://mirror.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/

下载YUMhttps://mirror.tuna.tsinghua.edu.cn/help/gitlab-ce/

2.配置

#1.修改配置文件
vim /etc/gitlab/gitlab.rb
# 13行(修改对外服务地址)
external_url 'http://10.1.1.71'

#2.初始化
gitlab-ctl reconfigure
#3.查看状态
gitlab-ctl status

3.使用

第一使用需要设置root密码

Password: tiger123

官方文档: https://docs.gitlab.com/ee/gitlab-basics/

四、Jenkins

Jenkins是一款开源 CI&CD 软件,用于自动化各种任务,包括构建、测试和部署软件。

Jenkins 支持各种运行方式,可通过系统包、Docker 或者通过一个独立的 Java 程序。

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

1.安装

安装Java

yum install java-1.8.0-openjdk

下载Jenkins

https://pkg.jenkins.io/redhat-stable/

下载rpm包上传至服务器,或者直接配置yum源进行下载安装

rpm -ivh jenkins-2.150.3-1.1.noarch.rpm

查看密码:

cat /var/lib/jenkins/secrets/initialAdminPassword

修改插件安装源:

vim /var/lib/jenkins/hudson.model.UpdateCenter.xml

#清华源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json
#插件目录
ls /var/lib/jenkins/plugins/

访问

http://IP:8080/

配置文件 /var/lib/jenkins/config.xml

扩展:

插件安装可以采用离线安装的方式

下载插件: http://updates.jenkins-ci.org/download/plugins

安装:

2.Github+Jenkins

半自动发布

开发人员将代码发布到GithubJenkins拉取代码并发布到Nginx服务器

添加Jenkins私钥到Jenkins系统设置:用于从Github拉取代码及向Nginx推送代码

Jenkins服务器需要免密登录到GithubNginx服务器

(1) 插件安装

安装插件: Publish Over SSH

安装插件:Git plugin

(2)Jenkins 私钥配置

配置Jenkins私钥

#生成秘钥对
ssh-keygen -P "" -f ~/.ssh/id_rsa 
#查看私钥
cat ~/.ssh/id_rsa

(3)免密配置

Jenkins服务器配置免密登录到Github服务器

Jenkins服务器配置免密登录到Web服务器

ssh-copy-id root@10.1.1.61
ssh-copy-id root@10.1.1.62

(4)添加Nginx服务器

(5)添加凭据

用来给一些插件进行授权

(6)创建任务

(7)手动构建

3.Gitlab + Jenkins

自动部署,当Giblab有新的push时候发布项目

(1)插件安装

(2)Jenkins私钥配置

(3)免密配置

Jenkins服务器配置免密登录到Gitlab服务器

Jenkins服务器Jenkins用户配置免密登录到Web服务器

因为执行脚本是使用Jenkins用户

usermod -s /bin/bash jenkins
su - jenkins
ssh-keygen -P "" -f ~/.ssh/id_rsa
ssh-copy-id root@10.1.1.61
ssh-copy-id root@10.1.1.62

(4)添加凭证

(5)创建任务

仅显示与五、2不同的地方

添加如下Shell脚本

#!/bin/bash
#jenkins存放任务文件的目录
SOURCE_DIR=/var/lib/jenkins/workspace/$JOB_NAME/
#nginx服务器的项目目录
DEST_DIR=/www2
#使用rsync同步到nginx服务器(需要免密登录)
/usr/bin/rsync -av --delete $SOURCE_DIR root@10.1.1.62:$DEST_DIR
/usr/bin/rsync -av --delete $SOURCE_DIR root@10.1.1.61:$DEST_DIR

保存

(6) 全局安全配置

(7)gitlab配置

gitlab允许本地网络使用webhook

(8) 项目添加webhook

gitlab打开所需要自动部署的项目

(9)测试

修改代码,访问web查看是否修改成功

五、问题解决

1. Jenkins-插件下载提速

参考自:https://www.cnblogs.com/hellxz/p/jenkins_install_plugins_faster.html

vim /var/lib/jenkins/hudson.model.UpdateCenter.xml

#清华源
https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

修改下载地址

cd /var/lib/jenkins/updates/
sed -i 's/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g' default.json && sed -i 's/http:\/\/www.google.com/https:\/\/www.baidu.com/g' default.json

注意:该文件在进入Jenkins web界面后才会出现

注意:设置完后需要重启jenkins

2. Jenkins 登录密码忘记

vim users/admin_8324667790957484585/config.xml

#修改 <passwordHash>#.........</passwordHash> 中的内容为:
#jbcrypt:$2a$10$MiIVR0rr/UhQBqT.bBq0QehTiQVqgNpUGyWW2nJObaVAM/2xSQdSq
#这时密码就会变为123456
#重启Jenkins
Last modification:January 24th, 2020 at 03:52 pm