总结自动发布流程:  Gitlab+Jenkins+Docker

一般部署方式:

1.外挂方式: 就是将实际的代码挂载到宿主机上,docker中提供程序运行的环境, 这样的话只需要更新对应的代码就够了,不用频繁的构建镜像

2.宿主机或者gitlab服务器上编译打包: 一般会在目标机器上进行镜像的打包与服务器的启动

3.私服: 使用中心服务,例如使用harbor搭建私服提供镜像仓库, 这样只需要在一台服务器上打包镜像并push到仓库中,在目标机器上就可以远程拉取镜像并重启服务了

一般情况下: 对于小型项目一般使用1,2  对于较多服务的情况下 一般都会使用私服的方式进行服务部署

这里就是使用私服的方式

前端项目:

# 初始化vue项目
vue init webpack # 启动本地服务
npm run dev # 访问localhost:8080验证

Dockerfile文件:

FROM nginx

MAINTAINER LX

COPY default.conf /etc/nginx/conf.d/
COPY dist/ /usr/share/nginx/html/

nginx配置文件:

server {
listen 80;
listen [::]:80;
server_name localhost; location / {
root /usr/share/nginx/html;
index index.html index.htm;
try_files $uri $uri/ /index.html =404;
} error_page 500 502 503 504 /50x.html;
location = /50x.html {
root html;
}
}

打包镜像并上传:

# 登录私服
docker login harbor.com -u lanlang # 打包镜像
docker build -t harbor.com/web/demo:latest . # 镜像推送
docker push harbor.com/web/demo:latest

目标机器执行拉取并服务重启:

# 登录私服
docker login harbor.com -u lanlang # 拉取镜像
docker pull harbor.com/web/demo.latest # 重启服务
docker-compose -f /opt/demo/docker-compose.yml up -d web

docker-compose.yml文件:

version: '3'
services:
web:
image: harbor.com/web/demo:latest
container_name: demo
ports:
- 8080:80

Gitlab:

触发器webhooks:

设置好之后, 可以进行测试,具体可以查看webhook日志

Jenkins:

发布流程:

1)代码提交到代码仓库,

2)仓库触发构建hook,即Jenkins的发布任务,

3)jenkins会进行打包编译,镜像上传

4)远程服务器执行服务更新操作(拉取镜像, 重启服务)

Nodejs编译前端代码:

1)安装nodejs插件

2. 添加插件build name 并重启,用于Build Name and Description Setter(构建名称和描述设置器)

3)全局变量中配置Nodejs环境变量

来到主页,以自定义的方式创建新任务

自定义git分支的变量名

自定义所发布环境的变量名

构建环境

选择执行ssh执行远程命令:

npm cache clean --force

rm -rf node_modules 

rm -rf package-lock.json

npm install  --force --registry=https://registry.npm.taobao.org  --unsafe-perm

npm run build

# 删除历史镜像

 cur_img=$(docker images | grep harbor.com/web/demo:latest | awk '{print $3}')

if [ -z "$cur_img" ]
then
echo "\$cur_img is empty"
else
echo "\$cur_img is NOT empty"
docker rmi --force $cur_img
fi # 构建镜像
docker build . -t harbor.com/web/demo:latest # 登录镜像仓库
echo "密码" | docker login harbor.com -u "xxx" --password-stdin # 推送镜像
docker push harbor.com/web/demo:latest

执行远程脚本:

需要安装Publish over SSH插件

1)安装该插件

2)系统配置 > SSH Servers中配置

3)任务中添加构建步骤:

jenkins远程执行脚本时,所有的路径必须是绝对路径,相对路径是不行的,且需要同步远程服务器的环境变量。所以,将启动命令改成如下即可:

source /etc/profile
bash -xe /data/sh/auction.sh

[基于gitlab触发实现自动发布]

1.安装gitlab插件

2.项目中配置触发器

Allowed branches :
Allow all branches to trigger this job #允许所有分支触发此作业
Filter branches by name #按名称过滤分支
Include :dev #允许触发构建的分支,dev 分支提交会自动构建
Exclude:master #排除触发构建的分支,此时 master 分支提交不会自动构建
Filter branches by regex #通过正则表达式过滤分支
Source Branch Regex: #源分支正则表达式
Target Branch Regex:.*dev #目标分支正则表达式,允许触发构建的 dev 分支
Filter merge request by label #按标签过滤合并请求
Include: #允许触发构建的标签
Exclude: #排除触发自动构建的标签

可以根据需要设置触发的分支

常见问题:

1.

docker启动jenkins 报错Got permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock

这是由于权限不足导致, 本身是jenkins用户, 操作docker一般是root有权限, 我们可以将他加入docker用户组中即可

# 查看原有docker的用足和所属组
ll /var/run/docker.sock 记录组ID # 追加组
gpasswd -a jenkins docker # 重启jenkins
systemctl restart jenkins

注意点: 修改完成之后, 一定要重新启动服务, 否则错误还在!!!  

2.jenkins  SSH: Failed to get hostname

需要带上远程服务器的环境变量

source /etc/profile

3.

Jenkins构建ERROR: Exception when publishing, exception message [Exec exit status not zero. Status [1]]

执行发生了错误, 这个时候可以打开终端输出的部分, 这样方便定位问题

更多参考:

  • https://blog.51cto.com/u_12574283/5014776

自动化部署之Gitlab+Jenkins+Docker的更多相关文章

  1. GitLab + Jenkins + Docker + Kubernetes。

    目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...

  2. 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s

    总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...

  3. gitlab + jenkins + docker + k8s

    总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...

  4. .Net Core 自动化部署:使用jenkins部署到linux docker容器运行

    上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...

  5. 前端自动化部署linux centOs + Jenkins + nignx + 单页面应用

    Jenkins是什么? Jenkins 是一款业界流行的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能. 准备工作 Linux centOS系统阿里云服务器一个 码云一个存放vu ...

  6. Gitlab+Jenkins+Docker实现net core持续集成

    前言 在项目中使用这一套自动集成的体系之后,一直想找个时间总结出来,用于自己记录也打算将自己的所得分享给园友们,不经常写文章,可能会有错误的地方,希望各位不吝指正,我会及时的改正并表示感谢,希望大家能 ...

  7. Jenkins+maven+gitlab自动化部署之gitLab搭建(二)

    Gitlab我们这里采用docker方式部署,详细请参考:Docker部署Gitlab11.10.4

  8. Jenkins+Ansible+Gitlab自动化部署三剑客-gitlab本地搭建

    实际操作 准备linux初始环境 关闭防火墙 systemctl stop firewalld 开机自己关闭 systemctl disable firewalld 设置安全配置 为关闭 vim /e ...

  9. 自动化部署三剑客 gitlab + ansible + jenkins

    http://www.showerlee.com/archives/1880 https://edu.51cto.com/center/course/lesson/index?id=280700 Gi ...

  10. 第四十三章 微服务CICD(5)- gitlab + jenkins + docker + dockerregsitry

    一.总体流程 部署: 开发机(mac) ip:11.11.11.11 docker:1.12.1 部署机(centos7) ip:10.211.55.4 docker:1.12.3 生产机(cento ...

随机推荐

  1. 【YashanDB数据库】YAS-02079 archive log mode must be enabled when database is in replication mode

    [标题]错误码处理 [问题分类]调整归档 [关键字]关闭归档.YAS-02079.replication mode [问题描述]执行alter database noarchivelog 关闭归档时, ...

  2. Authentication vs. Authorization

    Authentication vs. Authorization So, what is the difference between authentication and authorization ...

  3. 傅里叶级数 傅里叶变换 FFT 时域 频域 功率谱 能量谱 功率谱密度PSD

    傅立叶级数是基于周期函数的,如果我们把周期推广到

  4. Dell存储备份告警:

    创建时间 修改日期 对象名称 消息 类型 告警状态 已确认 告警定义 类型 23-3-12 11:59:26 23-3-12 11:59:37 copyMirrorswap 2 CMs Operati ...

  5. 使用 Microsoft.Extensions.ServiceDiscovery 进行服务发现并调用

    简介 在现代微服务架构中,服务发现(Service Discovery)是一项关键功能.它允许微服务动态地找到彼此,而无需依赖硬编码的地址.以前如果你搜 .NET Service Discovery, ...

  6. webpack笔记-loader的详细使用介绍(四)

    loader 基本上都是第三方类库,使用时需要安装,有一些 loader 还需要安装额外的类库,例如 less-loader 需要 less,babel-loader 需要 babel 等. load ...

  7. 全网最适合入门的面向对象编程教程:48 Python函数方法与接口-位置参数、默认参数、可变参数和关键字参数

    全网最适合入门的面向对象编程教程:48 Python 函数方法与接口-位置参数.默认参数.可变参数和关键字参数 摘要: 在 Python 中,函数可以接受多种不同类型的参数,包括位置参数.默认参数.可 ...

  8. 使用Minio Clinet将老版本Minio的数据迁移到新版本的Minio

    1. 关于Minio Client: MinIO Client是一个命令行工具,用于与Minio或云存储服务进行交互.它支持文件系统和Amazon S3兼容的云存储服务(AWS Signature v ...

  9. 第5天:基础入门-反弹SHELL&不回显带外&正反向连接&防火墙出入站&文件下载

    文件上传下载-解决无图形化&解决数据传输 命令生成:https://forum.ywhack.com/bountytips.php?download 反弹shell 以参照物为准,以Linux ...

  10. Excel表格重复项特殊标注

    事件起因: 某不知名同事,需要将Excel表格中的重复选项特殊标注出来,故研究了一下   解决办法: 在Excel表格中,如果需要特殊标注重复项时候,可以参考以下办法 选项excel表格行/列 - 开 ...