持续集成:Continuous Integration
简单来说就是指,程序员在开发代码的过程中,可以频繁的将代码部署到主干上,并进行自动化测试。
持续交付:Continuous Delivery
简单来说就是指在持续集成的基础上,将代码部署到预生产环境。
持续部署:Continuous Deoloyment
简单来说就是指在持续交付的基础上,将要部署的代码实现自动部署,包括持续交互,持续部署。
GitLab 是一个用于仓库管理系统的开源项目。使用 Git 作为代码管理工具,可以通过 Web 界面来管理 Git 仓库。
Jenkins 是一个独立的开源软件项目,是基于 Java 开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。
作用:
Jenkins 特点:
build
(构建)相同点:
二者都是基于 Web 的 Git 仓库,在很大程度上 GitLab 是仿照 GitHub 来做的,它们都提供了分享开源项目的平台。
不同点:
push
到 GitLab 远程仓库上;准备工作
主机名 | 操作系统 | 硬件 | IP 地址 |
---|---|---|---|
GitLab | CentOS 7.4 | 4 G(联网状态) | 192.168.1.1 |
Jenkins | CentOS 7.4 | 4 G(联网状态) | 192.168.1.2 |
Apache | CentOS 7.4 | 2 G | 192.168.1.3 |
安装 Gitlab 所需组件
[root@GitLab ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix policycoreutils-python
开启 Postfix 邮件服务
[root@GitLab ~]# systemctl start postfix [root@GitLab ~]# systemctl enable postfix
安装 Gitlab
[root@GitLab ~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@GitLab ~]# ls anaconda-ks.cfg gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm [root@GitLab ~]# yum -y localinstall gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm
配置 Gitlab 访问地址
[root@GitLab ~]# sed -i "/^external_url/cexternal_url 'http://192.168.1.1'" /etc/gitlab/gitlab.rb
注意:你们也可以将 IP 地址替换为域名。
重置 Gitlab(时间较长)
[root@GitLab ~]# gitlab-ctl reconfigure[root@GitLab ~]# netstat -anpt | grep nginx
访问:http://192.168.1.1
注意:在 GitLab 中配置的中文并不是全部都是中文,你们可以安装中文插件,我这边使用的是谷歌浏览器转换。
[root@GitLab ~]# vim /etc/gitlab/gitlab.rb # 在第 57 行后添加以下内容 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = 'smtp.qq.com' # SMTP 服务器 gitlab_rails['smtp_port'] = 465 # SMTP 服务器端口号 gitlab_rails['smtp_user_name'] = '2085077346@qq.com' # 邮件账号 gitlab_rails['smtp_password'] = '' # 邮件授权码 gitlab_rails['smtp_authentication'] = 'login' gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = '2085077346@qq.com'
重置 Gitlab
[root@GitLab ~]# gitlab-ctl reconfigure
登录控制台发送测试邮件
[root@GitLab ~]# gitlab-rails console irb(main):001:0> Notify.test_email('ChenZhuang1217@163.com','Test','Hello ZhangSan').deliver_now
查看
修改 GitLab 中 root 用户的密码
点击创建群组
填写群组信息
创建一个账号
填写用户信息
给河北彭于晏配置密码
把新建用户添加到群组
GitLab 用户在组中有五种权限:
Guest
:可以创建问题、发表评论、不能读写版本库(访客)Reporter
:可以克隆代码,不能提交(测试人员)Deveoper
:可以克隆代码、开发、提交、上传(开发人员)Master
:可以创建项目、添加tag
、保护分支、添加项目成员、编辑项目(运维)Owner
:所有事情都可以做,包括设置项目的访问权限(老板,但老板一般都在办公室)使用河北彭于晏用户登录创建
创建项目
在刚才创建的项目中创建文件
[root@GitLab ~]# ssh-keygen -t rsa # 配置密钥对 (三连回车即可) [root@GitLab ~]# cat .ssh/id_rsa.pub # 查看公钥
将公钥上传到 GitLab 中
验证(克隆过程中不需要输入密码即可)
[root@GitLab ~]# git clone git@192.168.1.1:ZhangSan/test.git [root@GitLab ~]# ls anaconda-ks.cfg gitlab-ce-12.0.2-ce.0.el7.x86_64.rpm test [root@GitLab ~]# cd test/ [root@GitLab test]# ls 1.html
安装 JDK(因为 Jenkins 是使用 Java 编写的,所以需要先安装 JDK)
[root@Jenkins ~]# tar xf jdk-8u181-linux-x64.tar.gz [root@Jenkins ~]# ls anaconda-ks.cfg jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz [root@Jenkins ~]# mv jdk1.8.0_181/ /usr/local/java
[root@Jenkins ~]# cat <<END >> /etc/profile JAVA_HOME=/usr/local/java/ PATH=$JAVA_HOME/bin:$PATH CLASSPATH=$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar export PATH JAVA_HOME CLASSPATH END
[root@Jenkins ~]# source /etc/profile
[root@Jenkins ~]# java -version # 查看 Java 版本 java version "1.8.0_181" Java(TM) SE Runtime Environment (build 1.8.0_181-b13) Java HotSpot(TM) 64-Bit Server VM (build 25.181-b13, mixed mode)
安装 Jenkins
[root@Jenkins ~]# wget http://pkg.jenkins.io/redhat-stable/jenkins-2.222.4-1.1.noarch.rpm [root@Jenkins ~]# ls anaconda-ks.cfg jenkins-2.222.4-1.1.noarch.rpm [root@Jenkins ~]# yum -y localinstall jenkins-2.222.4-1.1.noarch.rpm
修改配置文件
[root@Jenkins ~]# sed -i '/^JENKINS_USER/cJENKINS_USER="root"' /etc/sysconfig/jenkins
创建软连接优化执行路径
[root@Jenkins ~]# ln -s /usr/local/java/bin/java /usr/bin/
启动 Jenkins
[root@Jenkins ~]# systemctl start jenkins [root@Jenkins ~]# netstat -anpt | grep 8080
访问:http://192.168.1.2:8080
点击继续后,会出现推荐安装和自定义安装,我这里选择的是推荐安装
安装 Jenkins 插件
Credentials # 签名证书管理插件 Gitlab # 安装后从 GitLab 获取代码 Git 和 Git Client # 用于 Jenkins 在 GitLab 中拉取源码 GitLab Hook # GitLab 触发 Jenkins 构建项目 Gitlab Authentication # GitLab 和 Jenkins 认证插件 SSH Plugin # 进程执行 Shell 脚本 Publish Over SSH # 用于通过 SSH 部署应用
注意:当安装好 Jenkins 插件后,插件可能会跟 Jenkins 出现版本差异,不用管,后面我会对 Jenkins 进行升级操作。
配置 Jenkins 免密拉取 GitLab 代码
[root@Jenkins ~]# ssh-keygen -t rsa [root@Jenkins ~]# cat .ssh/id_rsa.pub
将公钥上传到 GitLab 上
将私钥上传到 Jenkins 上
Jenkins 的 root
用户公钥在 GitLab 上,私钥在 Jenkins 上,目的就是为了方便 Jenkins 可以直接拉去 GitLab 上的代码。
下载一下代码
这边简单说一下大致的流程:
在 192.168.1.3
服务器上操作
[root@Apache ~]# yum -y install httpd [root@Apache ~]# systemctl start httpd
在 Jenkins 上配置 SSH 免密登录
[root@Jenkins ~]# ssh-copy-id root@192.168.1.3
创建自动上传 Web 代码的脚本
[root@Jenkins ~]# cat <<END > 1.sh #!/bin/bash scp /var/lib/jenkins/workspace/web/* root@192.168.1.3:/var/www/html/ END [root@Jenkins ~]# chmod +x 1.sh
将脚本添加到 Jenkins 中
发布项目
Gitlab Hook Plugin
Build Authorization Token Root
Build Token Trigger
[root@Jenkins ~]# openssl rand -hex 12 038ef13e10ef686193784383
注意:-hex
输出结果为 16 进制数据,数字 12 是指定生成的随机字符为 12 字节,即 24 个 16 进制个数。
这里的网址和密钥令牌都要和 Jenkins 上的匹配。
Urlis blocked: Requests to the local network are not allowed
开启请求
当开启请求后,重新创建 Token 值即可。
下载后之后,我们只需要将 Jenkins 原有的包替换即可
[root@Jenkins ~]# rpm -ql jenkins # 查看 Jenkins 包安装路径 [root@Jenkins ~]# systemctl stop jenkins [root@Jenkins ~]# cd /usr/lib/jenkins/ [root@Jenkins jenkins]# mv jenkins.war jenkins-2.222.4.war.bak [root@Jenkins jenkins]# ls jenkins-2.222.4.war.bak jenkins.war [root@Jenkins jenkins]# systemctl start jenkins
查看
到此这篇关于使用GitLab+Jenkins实现持续集成CI环境的示例代码的文章就介绍到这了,更多相关GitLab Jenkins持续集成CI环境内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!