目录

一.DevOps简介

1.什么是持续集成(CI-Continuous integration)

2.什么是持续部署(CD-continuous deployment)

3.什么是持续交付(Continuous Delivery)

二.GitLLab安装与应用【yum安装】

1.安装前准备

2.先安装依赖包

3.装包(注意版本自定义)

4.gitlab相关的目录

5.修改配置并初始化及验证

6.常用命令及例子

三.GitLab容器安装

1.防火墙、SELinux

2.修改sshd默认端口

3.准备容器环境

4.创建数据目录

5.启动容器

四.GitLab网页操作

1.用浏览器访问GitLab页面,

2.配置GitLab

五.客户端测试

1.查看仓库地址

2.客户端使用密码管理GitLab项目

3.SSH免密上传

1)客户端生成SSH密钥

2)使用用户登录GitLab

3)上传密钥

4)使用密钥管理GitLab项目

5)上传静态页面代码测试

六.yum部署Jenkins

1.设置防火墙和SELinux

2.安装依赖软件

3.部署、初始化Jenkins

4.管理Jenkins插件、系统配置

七docker安装jenkins

1.安装Jenkins

2.起容器准备

3.安装

4.配置Jenkins

5.安装插件

八.Jenkins项目管理

1.浏览器访问

2.构建(build)Jenkins项目

3.查看Jenkins拉取的代码数据

4.修改项目配置

九.构建分发服务器

1.安装、配置FTP共享服务器

2.修改GitLab项目配置

十.自动化上线

1.安装配置httpd;编写上线脚本;完成整个工作流程

2.编写自动化上线脚本


完成整理工作流程:

开发人员编写代码,将代码上传到GitLab服务器,Jenkins从GitLab服务器上面拉取最新代码数据到本地,根据Jenkins项目配置,将代码拉取到本地后,可以进行编译、测试、打包等工作,最后将数据包写入到共享服务器,应用服务器最后从共享服务器拉取数据实现上线功能。

一.DevOps简介

1.什么是持续集成(CI-Continuous integration)

持续集成是指多名开发者在开发不同功能代码的过程当中,可以频繁的将代码行合并到一起并切相互不影响工作

2.什么是持续部署(CD-continuous deployment)

是基于某种工具或平台实现代码自动化的构建、测试和部署到线上环境以实现交付高质量的产品,持续部署在某种程度上代表了一个开发团队的更新迭代速率

3.什么是持续交付(Continuous Delivery)

持续交付是在持续部署的基础之上,将产品交付到线上环境,因此持续交付是产品价值的一种交付,是产品价值的一种盈利的实现。

jenkins内网搭建外网可以提交代码吗_Jenkins

开发自己上传–最原始的方案 开发给运维手动上传–运维自己手动部署 运维使用脚本复制–半自动化 结合web界面一键部署–自动化

二.GitLLab安装与应用【yum安装】

1.安装前准备

# 防火墙与selinux设置 ~]# firewall-cmd --set-default-zone=trusted ~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive' /etc/selinux/config ## 修改sshd端口 # 因为git是通过SSH协议的形式访问的,需要占22端口,而sshd服务也需要占22端口,所以需修改sshd服务端口 ~]# vim /etc/ssh/sshd_config Port 36000 ~]# service sshd restart # 注还需要准备443,80端口

2.先安装依赖包

~]# yum install -y vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix

3.装包(注意版本自定义)

~]# wget https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/gitlab-ce-10.0.0-ce.0.el7.x86_64.rpm ~]# yum -y install gitlab-ce* 安装包官方下载地址: https://packages.gitlab.com/gitlab/gitlab-ce yum源清华大学下载地址: https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el7/ https://mirrors.tuna.tsinghua.edu.cn/gitlab-ce/yum/el6/

4.gitlab相关的目录

/etc/gitlab #配置文件目录 /run/gitlab #运行pid目录 /opt/gitlab #安装目录 /var/opt/gitlab #数据目录 /var/log/gitlab #日志目录

5.修改配置并初始化及验证

~]# vim /etc/gitlab/gitlab.rb external_url 'http://10.0.0.100'  #修 改此行 # 增加下面行,可选邮件通知设置 gitlab_rails['smtp_enable'] = true gitlab_rails['smtp_address'] = "smtp.qq.com" gitlab_rails['smtp_port'] = 465 gitlab_rails['smtp_user_name'] = "29308620@qq.com" gitlab_rails['smtp_password'] = "授权码" gitlab_rails['smtp_domain'] = "qq.com" gitlab_rails['smtp_authentication'] = "login" gitlab_rails['smtp_enable_starttls_auto'] = true gitlab_rails['smtp_tls'] = true gitlab_rails['gitlab_email_from'] = "29308620@qq.com"

初始化服务 执行配置并启动服务:

#修改完配置文件要执行此操作 gitlab-ctl reconfigure

jenkins内网搭建外网可以提交代码吗_gitlab_02

验证gitlab启动完成

gitlab-ctl status run: gitaly: (pid 24753) 245s; run: log: (pid 24378) 310s run: gitlab-monitor: (pid 24824) 244s; run: log: (pid 24595) 283s run: gitlab-workhorse: (pid 24776) 245s; run: log: (pid 24448) 304s run: logrotate: (pid 24531) 296s; run: log: (pid 24530) 296s run: nginx: (pid 24472) 302s; run: log: (pid 24471) 302s run: node-exporter: (pid 24574) 290s; run: log: (pid 24573) 290s run: postgres-exporter: (pid 24847) 243s; run: log: (pid 24662) 275s run: postgresql: (pid 24204) 365s; run: log: (pid 24203) 365s run: prometheus: (pid 24832) 244s; run: log: (pid 24625) 281s run: redis: (pid 24144) 371s; run: log: (pid 24143) 371s run: redis-exporter: (pid 24610) 282s; run: log: (pid 24609) 282s run: sidekiq: (pid 24362) 312s; run: log: (pid 24361) 312s run: unicorn: (pid 24722) 250s; run: log: (pid 24322) 314s

6.常用命令及例子

gitlab-rails #用于启动控制台进行特殊操作,如修改管理员密码、打开数据库控制台( gitlab-rails dbconsole)等 gitlab-psql #数据库命令行 gitlab-rake #数据备份恢复等数据操作 gitlab-ctl #客户端命令行操作行 gitlab-ctl stop #停止gitlab gitlab-ctl start #启动gitlab gitlab-ctl restar #重启gitlab gitlab-ctl status #查看组件运行状态 gitlab-ctl tail nginx #查看某个组件的日志

jenkins内网搭建外网可以提交代码吗_Jenkins_03

jenkins内网搭建外网可以提交代码吗_gitlab_04

首次登录web页面,必须先设置密码,密码要求最少8位

三.GitLab容器安装

1.防火墙、SELinux

~]# firewall-cmd --set-default-zone=trusted ~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/ssh/sshd_config

2.修改sshd默认端口

因为Git是通过SSH协议形式访问,后面需要启动GitLab容器,该容器需要占用22端口,而电脑的sshd服务也需要占用22端口(端口冲突),所以需要提前修改sshd默认端口,将端口修改为2022

~]# vim /etc/ssh/sshd_config Port 2022 ~]# systemctl restart sshd ~]# ssh -p 2022 192.168.4.20 (-p 可以放后面) #远程测试

注意:修改后需要重新登录一次虚拟机(重新登录需要指定端口)。

3.准备容器环境

# 准备yum源安装docker ~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo ~]# yum clean all && yum repolist && yum makecache ## 安装依赖 ~]# yum install -y vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion ~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix # 安装docker ~]# yum install -y docker-ce ~]# systemctl enable docker.service --now 此操作联网: ~]# docker search gitlab-ce #查找 ~]# docker pull gitlab/gitlab-ce # 下载镜像

4.创建数据目录

容器无法持久保存数据,需要将真机目录和容器目录绑定,实现数据永久保存

~]# mkdir -p /srv/gitlab/{config,logs,data} ~]# ls /etc/resolv.conf # 必须要有该文件,默认linux有

5.启动容器

~]# docker run -d -h gitlab --name gitlab -p 443:443 -p 80:80 -p 22:22 --restart=always -v /data/gitlab/config:/etc/gitlab -v /data/gitlab/logs:/var/log/gitlab -v /data/gitlab/data:/var/opt/gitlab twang2218/gitlab-ce-zh # run 起容器 # -d 放入后台 # -h是在容器内的主机名 # --name 起一个容器名 # -p 映射端口 # --restart=always #(表示此容器自动开启【关不了gitlab】) # -v 映射文件 # 密码查看(可忽略) ~]# docker exec -it gitlab grep 'Password:' /etc/gitlab/initial_root_password

四.GitLab网页操作

1.用浏览器访问GitLab页面,

http://172.17.64.9

初始化登录密码(用户root/密码如上,或自己修改)

jenkins内网搭建外网可以提交代码吗_git_05

首次登录web页面,必须先设置密码,密码要求最少8位

jenkins内网搭建外网可以提交代码吗_jenkins_06

jenkins内网搭建外网可以提交代码吗_linux_07

2.配置GitLab

1)创建用户

jenkins内网搭建外网可以提交代码吗_jenkins_08

 

jenkins内网搭建外网可以提交代码吗_gitlab_09

 

jenkins内网搭建外网可以提交代码吗_git_10

 

jenkins内网搭建外网可以提交代码吗_Jenkins_11

添加密码





jenkins内网搭建外网可以提交代码吗_linux_12

 

jenkins内网搭建外网可以提交代码吗_git_13

测试登录



jenkins内网搭建外网可以提交代码吗_Jenkins_14

2)创建组


jenkins内网搭建外网可以提交代码吗_jenkins_15

jenkins内网搭建外网可以提交代码吗_linux_16

jenkins内网搭建外网可以提交代码吗_Jenkins_17

将用户加入到组

jenkins内网搭建外网可以提交代码吗_git_18

3)创建项目(类似于创建一个仓库)


jenkins内网搭建外网可以提交代码吗_linux_19

jenkins内网搭建外网可以提交代码吗_Jenkins_20


jenkins内网搭建外网可以提交代码吗_gitlab_21

五.客户端测试

1.查看仓库地址

jenkins内网搭建外网可以提交代码吗_linux_22

 

jenkins内网搭建外网可以提交代码吗_Jenkins_23

 

jenkins内网搭建外网可以提交代码吗_Jenkins_24

2.客户端使用密码管理GitLab项目

~]# yum -y install git
# 配置hosts
~]# vim /etc/hosts
172.17.0.51 gitlab

## 使用刚刚创建的用户
~]# git config --global user.name "kali" 
~]# git config --global user.email "20236305@qq.com"
# 或者使用管理员
~]# git config --global user.name "Administrator"
~]# git config --global user.email "admin@example.com"
~]# git clone http://gitlab/devops/myproject.git

# 示例
~]# cd myproject
~]# touch README.md
~]# git add README.md
~]# git commit -m "add README"
~]# git push -u origin master
Username for 'http://192.168.4.20': keke    #这里输入用户名  
Password for 'http://jerry@192.168.4.20':  123456789  #这里输入密码

jenkins内网搭建外网可以提交代码吗_jenkins_25

 


3.SSH免密上传

1)客户端生成SSH密钥

在客户端操作

~]# rm -rf /root/.ssh/known_hosts  #删除之前的ssh远程记录
~]# ssh-keygen                   #生成ssh密钥文件
~]# cat ~/.ssh/id_rsa.pub       # 查看密钥文件
ssh-rsa 
AAAAB3NzaC1yc2EAAAADAQABAAABAQDPVwP8E7TtKha9H8Ec+CU2n19aIPo9sUa/pdM7gRaf0yG+BcdyQ7Hgi6pI51IhX6tat46L5tLkAY7urVeEmnPtUk/TVIUc0smJPXYKIggOCr2dDd9s1S0

2)使用用户登录GitLab

页面用户第一次登录页面需要重置一次密码,密码可以与旧密码相同


3)上传密钥



4)使用密钥管理GitLab项目

前面已经用http的方式访问过服务器的代码仓库了,这里把之前的http服务器信息删除,使用ssh协议访问(在客户端操作)

 

jenkins内网搭建外网可以提交代码吗_linux_26

~]# cd /root/myproject
~]# git remote -v
origin	http://gitlab/devops/myproject.git (fetch)
origin	http://gitlab/devops/myproject.git (push)

# 删除
~]# git remote remove origin

# 添加
~]# git remote add  origin git@gitlab:devops/myproject.git

# 查看测试
~]# git remote -v
origin	git@gitlab:devops/myproject.git (fetch)
origin	git@gitlab:devops/myproject.git (push)

5)上传静态页面代码测试

~]# echo "hello world" >  README.md 
~]# git add .
~]# git commit -m "update"
~]# git push -u origin master

## 导入一个项目测试(可以到github)
~]# dnf  -y  install   unzip tar
~]# unzip  www_template.zip
~]# cp -r www_template/*   myproject/
~]# cd  myproject/
~]# git add .
~]# git commit -m  "web site"
~]# git push -u origin master
~]# git tag  v1   # 打个标签
~]# git push -u origin v1

jenkins内网搭建外网可以提交代码吗_linux_27

查看定义的标签

jenkins内网搭建外网可以提交代码吗_jenkins_28

 


六.yum部署Jenkins

1.设置防火墙和SELinux

~]# firewall-cmd --set-default-zone=trusted
~]# setenforce 0
~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2.安装依赖软件

网页下载Index of /jenkins/redhat-stable/ | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror

~]# rz -be [包] ~]# dnf -y install git postfix mailx java-11-openjdk ~]# systemctl enable postfix --now

备注:Git(版本控制软件)、postfix(邮件服务器软件(发))、mailx(邮件客户端软件(收))、openjdk(Java JDK工具)

3.部署、初始化Jenkins

http://172.17.64.16:8080/login?

~]# dnf -y install ./jenkins-2.164.3-1.1.noarch.rpm
~]# systemctl enable jenkins
~]# systemctl start jenkins
第一次访问会提示初始密码的位置(密码在/var/lib/Jenkins/secrets/initialAdminPassword文件中)
~]# cat /var/lib/jenkins/secrets/initialAdminPassword
9424973edc06471aa268bb35c68f95cd


jenkins内网搭建外网可以提交代码吗_Jenkins_29


jenkins内网搭建外网可以提交代码吗_gitlab_30

这里选择跳过不安装插件

jenkins内网搭建外网可以提交代码吗_jenkins_31

可以选择不创建用户

jenkins内网搭建外网可以提交代码吗_git_32

jenkins内网搭建外网可以提交代码吗_git_33

jenkins内网搭建外网可以提交代码吗_gitlab_34

jenkins内网搭建外网可以提交代码吗_gitlab_35

jenkins内网搭建外网可以提交代码吗_gitlab_36

jenkins内网搭建外网可以提交代码吗_gitlab_37

4.管理Jenkins插件、系统配置

1)重置管理员密码。

jenkins内网搭建外网可以提交代码吗_jenkins_38

jenkins内网搭建外网可以提交代码吗_Jenkins_39

使用新密码重新登录

jenkins内网搭建外网可以提交代码吗_linux_40

jenkins内网搭建外网可以提交代码吗_Jenkins_41

2)插件管理。 查看插件列表

jenkins内网搭建外网可以提交代码吗_linux_42

jenkins内网搭建外网可以提交代码吗_gitlab_43

jenkins内网搭建外网可以提交代码吗_Jenkins_44

jenkins内网搭建外网可以提交代码吗_gitlab_45

3)拷贝插件文件到Jenkins目录,Jenkins插件目录为插件目录:/var/lib/jenkins/plugins/。

Jenkins插件文件在目录:jenkins_plugins.tar.gz。

插件包含:中文插件、Git插件等。

官网Jenkins Plugins

可以到官网上下载插件包在拷贝到/var/lib/jenkins/plugins/

Apache HttpComponents Client 4.x API PluginCommand Agent Launcher PluginCredentials PluginDisplay URL API
Git client plugin
Git Parameter (Plug-In)
Git plugin
Trilead API Plugin
Structs Plugin
SSH Credentials Plugin
Script Security Plugin
SCM API Plugin
Mailer Plugin
Localization: Chinese (Simplified)
Localization Support Plugin
JSch dependency plugin
JUnit Plugin(Junit SQL Storage Plugin)
jQuery plugin
JAXB plugin
Oracle Java SE Development Kit Installer Plugin
Pipeline: Step API
Pipeline: SCM Step
Pipeline: API
# 注意下载插件得时候要注意是否有依赖得插件一起安装了(害得我还一直找包)
~]# cp -rp jenkins_plugins/*   /var/lib/jenkins/plugins/
~]# chown jenkins.jenkins /var/lib/jenkins/plugins/
~]# systemctl restart jenkins
# 注意文件权限

有网的情况下也可以直接安装

jenkins内网搭建外网可以提交代码吗_jenkins_46

 

jenkins内网搭建外网可以提交代码吗_Jenkins_47

如果在搜索区找不到时,记得查看安装了的,有个时候会当依赖安装掉



重新登录Jenkins网页控制台

jenkins内网搭建外网可以提交代码吗_linux_48

jenkins内网搭建外网可以提交代码吗_gitlab_49

4)再次查看插件列表

jenkins内网搭建外网可以提交代码吗_gitlab_50

jenkins内网搭建外网可以提交代码吗_gitlab_51

jenkins内网搭建外网可以提交代码吗_linux_52

5)调整系统设置,配置邮箱(测试的话可以不配置)

jenkins内网搭建外网可以提交代码吗_Jenkins_53

jenkins内网搭建外网可以提交代码吗_Jenkins_54

jenkins内网搭建外网可以提交代码吗_Jenkins_55

jenkins内网搭建外网可以提交代码吗_linux_56

七docker安装jenkins

1.安装Jenkins

下载Jenkins,lts代表最新版

# 准备yum源安装docker
~]# wget -O /etc/yum.repos.d/docker-ce.repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
~]# yum clean all && yum repolist && yum makecache
## 安装依赖
~]# yum install -y  vim gcc gcc-c++ wget net-tools lrzsz iotop lsof iotop bash-completion 
~]# yum install -y curl policycoreutils openssh-server openssh-clients postfix
# 安装docker
~]# yum install -y docker-ce
~]# systemctl enable docker.service --now
# 下载镜像
~]# docker pull jenkins/jenkins:lts
# 查看Jenkins镜像
~]# docker images
~]# docker inspect jenkins镜像ID

2.起容器准备

# 创建一个Jenkins目录,用于容器内目录挂载宿主机
~]# mkdir /data/jenkins_home
~]# chown -R 1000:1000 /data/jenkins_home

3.安装

# 安装启动Jenkins容器
~]# docker run -d --name jenkins -p 8080:8080 -v /data/jenkins_home:/var/jenkins_home jenkins/jenkins:lts;
备注:
-d # 启动在后台
--name # 容器名字
-p # 端口映射(8081:宿主机端口,8080:容器内部端口)
-v # 数据卷挂载映射(/data/jenkins_home:宿主机目录,/var/jenkins_home:容器目录)
jenkins/jenkins:lts # 镜像
# 查看Jenkins启动情况
~]# docker ps | grep jenkins

云服务器8080端口要开启 因为本操作是在腾讯云ELB上进行安装的,需要在安全组里开放8080此端口,咱自己用,最好还是指定下IP访问Jenkins http://腾讯IP:8081

4.配置Jenkins

解锁

jenkins内网搭建外网可以提交代码吗_linux_57

在安装完成后,默认生成了一个登录密码,首次登录需要这个密码。 密码容器内路径:var/jenkins_home/secrets/initialAdminPassword 但是我们不是之前在宿主机挂载过目录吗,直接在宿主机就可以查看密码了 查看密码:然后复制粘贴即可

~]# cat /data/jenkins_home/secrets/initialAdminPassword

5.安装插件

jenkins内网搭建外网可以提交代码吗_jenkins_58

推荐直接点左边的推荐插件,看网速吧,慢的话半小时,但是至少是全的,省事

管理用户创建 创建一个管理员账户,相当于admin

配置完成

jenkins内网搭建外网可以提交代码吗_jenkins_59

八.Jenkins项目管理

1.浏览器访问

Jenkins服务器8080端口。

jenkins内网搭建外网可以提交代码吗_git_60

jenkins内网搭建外网可以提交代码吗_git_61

jenkins内网搭建外网可以提交代码吗_gitlab_62

jenkins内网搭建外网可以提交代码吗_git_63

默认Jenkins会拉取最新版本的代码,这里的设置可以让Jenkins拉取特定的分支或标签(tag)的代码

jenkins内网搭建外网可以提交代码吗_Jenkins_64

jenkins内网搭建外网可以提交代码吗_Jenkins_65

继续设置Git参数,定义Git仓库的URL路径,以及需要下载克隆的版本或分支

注:指定分支必须与上图git参数一样

jenkins内网搭建外网可以提交代码吗_gitlab_66

如果是git init创建的git则需要在添加那输入用户与密钥

jenkins内网搭建外网可以提交代码吗_jenkins_67

 

jenkins内网搭建外网可以提交代码吗_linux_68

 

jenkins内网搭建外网可以提交代码吗_jenkins_69




2.构建(build)Jenkins项目

首先需要找到刚刚常见的项目

jenkins内网搭建外网可以提交代码吗_linux_70

jenkins内网搭建外网可以提交代码吗_gitlab_71

 

jenkins内网搭建外网可以提交代码吗_gitlab_72

jenkins内网搭建外网可以提交代码吗_Jenkins_73

查看是否正确

jenkins内网搭建外网可以提交代码吗_gitlab_74

查看操作


jenkins内网搭建外网可以提交代码吗_Jenkins_75

 

jenkins内网搭建外网可以提交代码吗_linux_76


3.查看Jenkins拉取的代码数据

默认Jenkins会加拉取的代码数据保存到/var/lib/Jenkins/workspace/目录
# 注意需一层一层看~]# ls /var/lib/jenkins/
~]# ls /var/lib/jenkins/workspace/
~]# ls /var/lib/jenkins/workspace/myweb/
# 如果此时拉取代码可以发现位置还是这,并且会覆盖
~]# rm -rf /var/lib/jenkins/workspace/myweb/*

## 容器查看
~]# ls /data/jenkins_home/workspace/myweb

4.修改项目配置

如果代码有多个版本或分支,每次都将代码拉取到相同位置,会产生数据覆盖,我们可以修改项目配置,将不同的版本和分支数据保存到不同子目录下。 点击《配置》,重新修改Jenkins项目配置

jenkins内网搭建外网可以提交代码吗_Jenkins_77

jenkins内网搭建外网可以提交代码吗_Jenkins_78

1)为Jenkins项目添加附加动作行为,将代码拉取输出到子目录(Check out to a sub-directory)

jenkins内网搭建外网可以提交代码吗_gitlab_79

jenkins内网搭建外网可以提交代码吗_gitlab_80

 

2)设置邮件通知,在构建失败时可以给特定人员发送邮件(测试的话可以不配置)

jenkins内网搭建外网可以提交代码吗_git_81

英文配置

jenkins内网搭建外网可以提交代码吗_Jenkins_82

 3)再次构建项目,并查看数据。 重新构建项目


# 这里就以容器为示例# 先删除~]# rm -rf /data/jenkins_home/workspace/myweb/*

然后拉取

jenkins内网搭建外网可以提交代码吗_jenkins_83

# 最后查看~]# ls myweb-v1

九.构建分发服务器

1.安装、配置FTP共享服务器

1)设置防火墙、SELinux
~]# firewall-cmd --set-default-zone=trusted~]# setenforce 0
~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config
1. 安装配置vsftpd、启动服务
~]# dnf  -y   install   vsftpd   #安装软件~]# vim /etc/vsftpd/vsftpd.conf  #修改vsftpd配置文件
anonymous_enable=YES              #允许匿名访问ftp8.2版本激活ftp要到配置文件里面
~]# mkdir -p /var/ftp/deploy/packages
~]# chown -R :jenkins /var/ftp/deploy/
#修改权限将目录所属组修改为jenkins
~]# chmod -R 775 /var/ftp/deploy/
#修改权限让jenkins组对该目录有读写权限
~]# systemctl enable vsftpd --now
#设置服务为开机自启动服务,并立刻启动该服务

2.修改GitLab项目配置

1)修改项目配置,添加构建步骤

jenkins内网搭建外网可以提交代码吗_jenkins_84

jenkins内网搭建外网可以提交代码吗_linux_85

2)编写构建脚本,脚本内容如下

############ 要求是搭建一个ftp然后把代码拷贝到这个ftp文件中###########
## 如果是服务器的搭建的就可以这么写
pkg_dir=/var/ftp/deploy/packages 
#定义变量pkg_dir,变量值为ftp共享目录。
cp -r myweb-$web $pkg_dir  
#将jenkins拉取到/var/lib/Jenkins/workspace/myweb-$web目录的数据拷贝的ftp共享目录
rm -rf $pkg_dir/myweb-$web/.git  
#上一步拷贝过来的数据目录下包含一个隐藏.git目录,删除该git仓库目录
cd $pkg_dir/  
#cd到ftp共享目录下
tar czf myweb-$web.tar.gz myweb-$web 
#将ftp共享目录下的代码数据打包
rm -rf myweb-$web  
#将ftp共享目录下的代码数据目录删除
md5sum myweb-$web.tar.gz | awk '{print $1}' > myweb-$web.tar.gz.md5  
#校验打包文件的HASH值(哈希值),并将结果写入到一个文件中。
cd .. 
#返回上一级目录
echo -n $web > ver.txt 
#将当前Git版本信息写入ver.txt文件
## 容器的写法
# 1.在本地书写脚本
~]# vim ceshi.sh 
#!/bin/bash
rm -rf myweb-$web/.git
tar czf $web.tar.gz myweb-$web
rm -rf myweb-$web
md5sum $web.tar.gz | awk '{print $1}' > $web.tar.gz.md5
echo -n $web > ver.txt
# 2.上传容器并查看
~]# docker cp ceshi.sh 29:./
~]# docker exec -it 29 cat /ceshi.sh 
# 3.执行如下操作3)
# 4.书写脚本执行项目拉取
~]# vim ceshi2.sh 
#!/bin/bash
pkg_dir=/var/ftp/deploy/packages
web_dir=/data/jenkins_home/workspace/myweb
mv $web_dir/* $pkg_dir/

3)重新构建项目,查看数据

jenkins内网搭建外网可以提交代码吗_linux_86

jenkins内网搭建外网可以提交代码吗_linux_87

使用浏览器访问FTP服务,查看数据

jenkins内网搭建外网可以提交代码吗_gitlab_88

jenkins内网搭建外网可以提交代码吗_git_89

十.自动化上线

1.安装配置httpd;编写上线脚本;完成整个工作流程

1)设置防火墙和SELinux

~]# firewall-cmd --set-default-zone=trusted~]# setenforce 0 ~]# sed -i '/SELINUX/s/enforcing/permissive/' /etc/selinux/config

2)安装、配置httpd。

~]# dnf -y install httpd wget tar #安装httpd、tar和wget~]# systemctl enable httpd --now #设置开启自启,并立刻启动

2.编写自动化上线脚本

~]# vim web.sh#!/bin/bash
#定义变量,指定FTP共享路径
ftp_url=ftp://192.168.4.30/deploy
#定义变量,指定网页根路径
web_dir=/var/www/html
#定义函数,行数名为down_file,该函数的作用是从FTP服务器下载代码数据到网站根目录
down_file(){
#获取FTP服务器上面最新构建的代码版本号
#curl是基于命令行的浏览器,-s选项为静默访问,不显示下载过程(可以自己对比不是用-s的差异)
  version=$(curl -s $ftp_url/ver.txt)   # -s静默模式不显示
#将服务器上面的版本文件下载到web服务器的/var/www/html/目录下
#wget为下载工具(如果没有则需要安装),-q选项为静默模式下载,不显示下载过程
#-O选项可以指定将文件下载到哪里,这里是下载到/var/www/html/ver.txt
  wget -q $ftp_url/ver.txt -O $web_dir/ver.txt
#下载代码数据的打包文件,根据前面获取的版本号,下载对应的版本数据打包文件
  wget -q $ftp_url/packages/myweb-$version.tar.gz -O $web_dir/myweb-$version.tar.gz
#对下载下来的数据打包文件计算HASH值(哈希值),awk过滤仅显示第一列数据结果
  hash=$(md5sum $web_dir/myweb-$version.tar.gz| awk '{print $1}')
#使用curl访问ftp服务器上面的HASH值
  ftp_hash=$(curl -s $ftp_url/packages/myweb-$version.tar.gz.md5)
#对比本地和FTP服务的HASH值是否一致,如果不一致代表数据损坏了
#如果一致就可以解压该数据包,将数据解压到网站根目录下/var/www/html/
  if [ "$hash" == "$ftp_hash" ];then
     tar -xf $web_dir/myweb-$version.tar.gz -C $web_dir
  fi
}

#判断如果本地没有/var/www/html/ver.txt文件,则直接调用前面的函数下载代码数据
if [ ! -f $web_dir/ver.txt ];then
  down_file
fi
#盘如果本地有/var/www/html/ver.txt文件,则判断本地版本文件和FTP版本文件是否一致
#一致就不再下载FTP的数据,如果不一致则调用前面的函数下载新的代码数据包
if [ -f $web_dir/ver.txt ];then
  ftp_ver=$(curl -s $ftp_url/ver.txt)
  local_ver=$(cat $web_dir/ver.txt)
  if [ "$ftp_ver" != "$local_ver" ];then
      down_file
  fi
fi
~]# chmod +x  web.sh                #添加可执行权限
~]# ./web.sh                         #执行脚本