博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JenKins+GitLab服务应用
阅读量:3942 次
发布时间:2019-05-24

本文共 9299 字,大约阅读时间需要 30 分钟。

Jenkins简介

Jenkins概述

Jenkins是由java编写的一款开源软件

作为一款非常流行的CI(持续集成)工作,用于构建和测试各种项目
Jenkins 的主要功能是监视重复工作的执行,例如软件工程的构建或在 cron下设置的 jobs

持续集成

持续集成(CI)是当下最为流行的应用程序开发实践方式

程序员在代码仓库中集成了修复bug、新特性开发或是功能革新
CI工具通过自动构建和自动测试来验证结果。这可以检测到当前程序代码的问题,迅速提供反馈

持续集成(续1)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UvabmEUf-1585813430043)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins1.png)]

Jenkins特点

简单、可扩展、用户界面友好

支持各种SCM(软件配置管理)工具,如SVN、GIT、CVS等
能够构建各种风格的项目
可以选择安装多种插件
跨平台,几乎可以支持所有的平台

安装Jenkins

下载Jenkins

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QGSLhtNg-1585813430044)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins2.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NF1gY3EA-1585813430044)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins3.png)]

[root@localhost ~]# wget http://mirrors.jenkins.io/war-stable/2.222.1/jenkins.war[root@localhost ~]# wget https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/jenkins-2.222.1-1.1.noarch.rpm

JenKins安装

安装Jenkins

[root@localhost ~]# yum -y install java-1.8.0-openjdk[root@localhost ~]# java -version[root@localhost ~]# yum -y install jenkins-2.222.1-1.1.noarch.rpm

启动服务

[root@localhost ~]# systemctl enable jenkins[root@localhost ~]# systemctl start jenkins

初始化jenkins

Jenkins默认运行在8080端口

打开浏览器输入: 127.0.0.1:8080

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I6AmI7TQ-1585813430045)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins4.png)]

[root@localhost ~]# cat /var/lib/jenkins/secrets/initialAdminPasswordf019e6b3799f4008b7a56c06f675da37

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-msQ9ufFx-1585813430046)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins5.png)]

安装插件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Wctqwpw3-1585813430046)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins6.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eiPBiLYq-1585813430047)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins7.png)]

管理用户

可以直接使用Admin登陆

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-yesE3cuy-1585813430048)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins8.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FoKgCdHi-1585813430048)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins9.png)]

完成安装

安装成功如下图所示:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HMMjaGEH-1585813430049)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins10.png)]

修改管理员密码

修改管理员密码:admin->设置

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-QwXDcD3o-1585813430049)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins11.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3jbWjTFa-1585813430050)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins12.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gJz8pJws-1585813430050)(C:\Users\Jsck\Desktop\JenKins\图片\Jenkins13.png)]

CI/CD流程

程序开发的生命周期内,需要程序员和运维共同协作

在这里插入图片描述

在Jenkins上安装插件

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
配置方法详见:
https://blog.csdn.net/you227/article/details/81076032

清华大学插件地址: https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/update-center.json

如果是英文界面,可以在插件管理中,安装:Localization: Chinese (Simplified)在这里插入图片描述

在这里插入图片描述

  • 安装:git parameter
    在这里插入图片描述
    在这里插入图片描述

本地仓库

**在jenkins上安装git

初始化git仓库

[root@localhost ~]# yum -y install git[root@localhost ~]# git config --global user.name 'zzg'[root@localhost ~]# git config --global user.email 'zzg@tedu.cn'[root@localhost ~]# git config --global core.editor vim
[root@localhost ~]# mkdir myweb[root@localhost ~]# git init myweb初始化空的 Git 版本库于 /root/myweb/.git/[root@localhost ~]# cd myweb/[root@localhost myweb]# echo '

My Web Site

' > index.html[root@localhost myweb]# git add .[root@localhost myweb]# git commit -m "web v1.0"

tag标签

如果达到一个重要的阶段,并希望永远记住那个特别的提交快照,可以使用 git tag 给它打上标签

将初始化打标签v1.0

[root@localhost myweb]# git tag v1.0	# 将当前状态标记为v1.0版本

添加标签

[root@localhost myweb]# echo '

My Web 2 version

' >> index.html[root@localhost myweb]# git add .[root@localhost myweb]# git commit -m "web v2.0"[master 4518874] web v2.0 1 file changed, 1 insertion(+)[root@localhost myweb]# git tag v2.0
[root@localhost myweb]# git tag v1.0v2.0

远程仓库

创建群组

密码: 72y1

Linux上部署GitLab

[root@localhost ~]# unzip docker.zip[root@localhost ~]# cd /root/docker/docker_pkgs/[root@localhost docker_pkgs]# yum -y install *.rpm[root@localhost docker_pkgs]# systemctl enable docker[root@localhost docker_pkgs]# systemctl restart docker[root@localhost docker_pkgs]# cd ../images/[root@localhost images]# docker load < gitlab_zh.tar[root@localhost images]# docker images

将物理主机ssh端口改为2222后,起动容器

[root@localhost ~]# vim /etc/ssh/sshd_configPort 2022			# 17行[root@localhost ~]# firewall-cmd --zone=public --add-port=2022/tcp --permanent success[root@localhost ~]# firewall-cmd --reloadsuccess[root@localhost ~]# firewall-cmd --zone=public --query-port=2022/tcpyes[root@localhost ~]# setenforce 0[root@localhost ~]# systemctl restart sshd
[root@localhost ~]# docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart always -v /srv/gitlab/config:/etc/gitlab -v /srv/gitlab/logs:/var/log/gitlab -v /srv/gitlab/data:/var/opt/gitlab gitlab_zh:latest[root@localhost ~]# docker ps	# 直到显示(health)才能正常访问[root@localhost ~]# docker logs gitlab	# 日志文件

在gitlab上,在devops组中创建名为myweb的公开项目,新建的用户是该项目的主程序员

访问http://127.0.0.1,第一次需要设置root密码

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

[root@localhost ~]# ssh-keygen -t rsa -C "zzg@tedu.cn" -b 4096[root@localhost ~]# cat /root/.ssh/id_rsa.pub

在这里插入图片描述

在这里插入图片描述
程序员上传代码到gitlab

[root@localhost myweb]# git remote rename origin old-originerror: 不能重命名配置小节 'remote.origin' 到 'remote.old-origin'# 此处错误可以忽略
[root@localhost myweb]# git remote add origin git@192.168.138.160:/devops/myweb.git[root@localhost myweb]# git push -u origin --all[root@localhost myweb]# git push -u origin --tags

在这里插入图片描述

创建自由风格项目

新建任务

在这里插入图片描述
选择自由风格
在这里插入图片描述

设置参数

添加Git Parameter参数

在这里插入图片描述
在这里插入图片描述
源码采用git
在这里插入图片描述
在jenkins上创建工程,自动下载代码。创建一个自由风格的项目=>勾选This project is parameterized =>添加参数 git parameter=> name: webver, Default Value: origin/master =>源码管理:git =>Repository URL: http://IP:/devops/myweb.git => Branch Specifier (blank for ‘any’): $webver => 保存

构建工程

构建工程

在这里插入图片描述
选择指定的标签
在这里插入图片描述
在这里插入图片描述
选择指定的标签
在这里插入图片描述
查看日志输出
在这里插入图片描述
在这里插入图片描述
查看日志输出
执行任务,jenkins将会下载myweb项目到/var/lib/jenkins/workspace目录

[root@localhost ~]# ll /var/lib/jenkins/workspace/myweb/总用量 4-rw-r--r--. 1 jenkins jenkins 47 4月   3 22:42 index.html[root@localhost ~]# cat  /var/lib/jenkins/workspace/myweb/index.html 

My Web Site

My Web 2 version

优化构建工程

在Jenkins服务器上安装apache,用于分发应用程序

为了方便应用服务器下载,Jenkins构建的工程应该 打包成为一个文件
为了应用服务器可以获知下载的程序文件是没有损坏 的,应该为其生成md5值

配置分发服务器

通过web服务为应用服务器提供应用程序

下载目录为/var/www/deploy/packages

[root@localhost ~]# yum -y install httpd[root@localhost ~]# vim /etc/httpd/conf/httpd.confListen 88	# 42行[root@localhost ~]# systemctl restart httpd[root@localhost ~]# systemctl enable httpd[root@localhost ~]# netstat -untlp | grep 88tcp6       0      0 :::88                   :::*                    LISTEN      9397/httpd[root@localhost ~]# mkdir -p /var/www/html/deploy/pkgs# /var/www/html/deploy/: 保存livever、lastver,即当前版本和前一个版本的版本号# /var/www/html/deploy/pkgs/: 保存软件压缩包和它的md5值[root@localhost ~]# chown -R jenkins.jenkins /var/www/html/deploy/

修改工程构建工程

为下载的应用打包,以及生成md5可以能过在工程中 增加构建步骤完成

在这里插入图片描述
编辑项目,选择下面的Additional Behavious => 新增 Checkout to a sub-directory: myweb-$webver
在这里插入图片描述
在这里插入图片描述
增加构建步骤=> Excute shell:
在这里插入图片描述

deploy_dir=/var/www/html/deploypkgs_dir=/var/www/html/deploy/pkgscp -r myweb-$webver $pkgs_dir  # 将下载的软件目录拷贝到web服务器目录cd $pkgs_dirrm -rf myweb-$webver/.git   # 删除版本库文件tar czf myweb-$webver.tar.gz myweb-$webver  # 打包压缩md5sum myweb-$webver.tar.gz | awk '{
print $1}' > myweb-$webver.tar.gz.md5 # 计算并保存md5值rm -rf myweb-$webver # 删除程序目录cd $deploy_dir[ -f livever ] && cat livever > lastver # 将当前版本内容写到前一版本文件echo $webver > livever # 更新当前版本
[root@localhost ~]# rm -rf /var/lib/jenkins/workspace/*

构建测试

执行构建工程

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

[root@localhost ~]# ls /var/lib/jenkins/workspace/myweb[root@localhost ~]# ls /var/lib/jenkins/workspace/myweb/myweb-v1.0[root@localhost ~]# ls /var/lib/jenkins/workspace/myweb/myweb-v1.0/index.html[root@localhost ~]# cat /var/lib/jenkins/workspace/myweb/myweb-v1.0/index.html 

My Web Site

[root@localhost ~]# ls /var/www/html/deploy/livever pkgs[root@localhost ~]# cat /var/www/html/deploy/livever v1.0[root@localhost ~]# ls /var/www/html/deploy/pkgs/myweb-v1.0.tar.gz myweb-v1.0.tar.gz.md5

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

[root@localhost ~]# ls /var/www/html/deploy/pkgs/myweb-v1.0.tar.gz  myweb-v1.0.tar.gz.md5  myweb-v2.0.tar.gz  myweb-v2.0.tar.gz.md5[root@localhost ~]# ls /var/lib/jenkins/workspace/myweb/myweb-v1.0  myweb-v2.0[root@localhost ~]# cat /var/www/html/deploy/lastver v1.0[root@localhost ~]# cat /var/www/html/deploy/livever v2.0[root@localhost ~]# ls /var/www/html/deploy/pkgs/myweb-v1.0.tar.gz  myweb-v1.0.tar.gz.md5  myweb-v2.0.tar.gz  myweb-v2.0.tar.gz.md5
  • 编写python工具,实现代码自动上线

1. 检查是否有新版本

2. 如果有新版本,下载
3. 检查下载的压缩包是否损坏
4. 如果没有损坏,部署
将物理主机作为应用服务器,对外提供服务:
/var/www/download/:用于存储下载的软件包
/var/www/deploy/:用于存储当前版本文件和解压后的软件包
/var/www/html/jenkins:指向软件目录的链接

[root@localhost ~]# pip install -i  https://pypi.douban.com/simple/ requests[root@localhost ~]# mkdir /var/www/download
[root@localhost ~]# vim deploy_web.pyimport requestsimport wgetimport osimport hashlibimport tarfiledef has_new_ver(ver_url, ver_fname):    # 如果本地没有版本文件,则有新版本    if not os.path.isfile(ver_fname):        return True    # 取出本地版本    with open(ver_fname) as fobj:        local_ver = fobj.read()    # 如果本地版本和远程版本不一致,则有新版本    r = requests.get(ver_url)    if local_ver != r.text:        return True    return Falsedef check_pkgs(md5_url, pkg_path):    # 取出远程md5值    r = requests.get(md5_url)    remote_md5 = r.text.strip()    m = hashlib.md5()    with open(pkg_path, 'rb') as fobj:        while True:            data = fobj.read(4096)            if not data:                break            m.update(data)    local_md5 = m.hexdigest()    if local_md5 == remote_md5:        return True    return Falsedef deploy(pkg_path, deploy_dir, version):    dest = '/var/www/html/jenkins'    src = '/var/www/deploy/myweb-%s' % version    tar = tarfile.open(pkg_path, 'r')    tar.extractall(path=deploy_dir)    tar.close()    # 如果目标链接已存在,先删除,否则无法创建    if os.path.exists(dest):        os.remove(dest)    # 创建链接    os.symlink(src, dest)if __name__ == '__main__':    # 如果没有新版本则退出    ver_url = 'http://192.168.138.161:88/deploy/livever'    ver_fname = '/var/www/deploy/livever'    download_dir = '/var/www/download/'    deploy_dir = '/var/www/deploy/'    if not has_new_ver(ver_url, ver_fname):        print('没有发现新版本')        exit(1)    # 有新版本,下载软件压缩包    r = requests.get(ver_url)    version = r.text.strip()    pkg_url = 'http://192.168.138.161:88/deploy/pkgs/myweb-%s.tar.gz' % version    wget.download(pkg_url, download_dir)    # 检查软件包是否损坏    pkg_path = pkg_url.split('/')[-1]    pkg_path = os.path.join(download_dir, pkg_path)    md5_url = pkg_url + '.md5'    if not check_pkgs(md5_url, pkg_path):        print('软件包已损坏')        os.remove(pkg_path)        exit(2)    # 如果软件压缩包是完好的,则部署,并更新软件版本文件    deploy(pkg_path, deploy_dir, version)    with open(ver_fname, 'w') as fobj:        fobj.write(r.text)

执行

[root@localhost ~]# python3 deploy_web.py 100% [....................................................................] 205 / 205
[root@localhost ~]# ls /var/www/deploy/livever  myweb-v2.0
你可能感兴趣的文章
Deepin开发环境安装
查看>>
Spring入门
查看>>
网址大全
查看>>
Git的使用
查看>>
Linux域名IP映射
查看>>
Java的反射机制
查看>>
SpringCloud微服务应用入门
查看>>
SpringCloud之session共享
查看>>
Springboot集成Shiro实现认证
查看>>
Spring、Spring MVC和MyBatis编程式集成示例
查看>>
在Springboot应用使用redis缓存
查看>>
Spring入门
查看>>
Idea提示键和热部署配置以及git使用
查看>>
Deepin+Vscode搭建vue.js项目及Git操作
查看>>
基于Spring Security前后端分离式项目解决方案
查看>>
Vue3.0+Vite2.0项目框架搭建(一)
查看>>
Vue3.0+Vite2.0项目框架搭建(二)- 引入axios
查看>>
Vue3.0+Vite2.0项目框架搭建(三)- 引入Element3
查看>>
使用Vue CLI v4.5(+)搭建Vue3.0项目框架搭建
查看>>
Java集合框架
查看>>