总结自动发布流程:  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知识库】EXP导致主机卡死问题

    问题现象 问题单:exp导出全库1主2备主节点执行,DMP文件30G左右系统卡死,发生主备切换 现象: exp sys/Cod-2022 file=bim20240402.dmp full=y 服务器 ...

  2. Chrome 浏览器插件获取网页 window 对象(方案三)

    前言 最近有个需求,是在浏览器插件中获取 window 对象下的某个数据,当时觉得很简单,和 document 一样,直接通过嵌入 content_scripts 直接获取,然后使用 sendMess ...

  3. A股迎来中报季,合合信息文档解析技术辅助大模型深度解读财报

    财务报告是公众和投资者了解企业经营状况的主要信源之一.步入8月中下旬,上市公司进入了中报披露高峰期.据东方财富Choice数据统计,截至8月14日数据,A股有超过1715只个股公布了2024年半年度业 ...

  4. 城市时空预测的统一数据管理和综合性能评估 [实验、分析和基准]《Unified Data Management and Comprehensive Performance Evaluation for Urban Spatial-Temporal Prediction [Experiment, Analysis & Benchmark]》

    2023年11月1日,还有两个月,2023年就要结束了,希望在结束之前我能有所收获和进步,冲呀,老咸鱼. 论文:Unified Data Management and Comprehensive Pe ...

  5. 阿里面试让聊一聊Redis 的内存淘汰(驱逐)策略

    大家好,我是 V 哥,粉丝小A面试阿里,说被问到 Redis 的内存淘汰策略的问题,整理这个笔记给他参考,也分享给大家,如果你遇到这个问题,会怎么回答呢? Redis 的内存淘汰策略是指当Redis的 ...

  6. [OI] 整体二分

    整体二分可以理解成普通二分改版,其实并没有改多少,并且一般对 check() 函数的复杂度要求更宽松 先来看一道经典题目:求区间排名 给一个数列,若干组询问 \((l,r,k)\),求 \([l,r] ...

  7. [Tkey] OSU!

    更新的题解可看 此处 你说得对但是 恐怖日本病毒会自动向你的电脑中下载 OSU! 题意简述 一个 01 串,每个位置有 \(p_{i}\) 的概率为 \(1\),连续的 \(x\) 个 \(1\) 贡 ...

  8. AD域下,普通用户环境下安装软件需要管理员权限的解决办法

    原理:将AD域普通用户添加到管理组中,使其拥有管理员权限 做法: 1.切换到AD域管理员账户: 2.计算机 -> 管理 -> 用户和组 -> 组 -> Administrato ...

  9. 开源的口袋妖怪自走棋「GitHub 热点速览」

    作为一名 90 后,我对口袋妖怪(宝可梦)游戏有着特殊的感情,满满的都是回忆.如果你也喜欢宝可梦主题的游戏,这款开源的宝可梦自走棋游戏 pokemonAutoChess 一定要试试,它采用战棋(自走棋 ...

  10. 云原生爱好者周刊:长得最像苹果的 Linux 桌面

    云原生一周动态要闻 SUSE 发布 Harvester 0.2.0 IBM 收购容器服务提供商 BoxBoat Kubernetes 和云原生运营报告 2021 发布 适用于 Kubernetes 的 ...