自动化部署之Gitlab+Jenkins+Docker
总结自动发布流程: 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的更多相关文章
- GitLab + Jenkins + Docker + Kubernetes。
目前方案是GitLab + Jenkins + Docker + Kubernetes. 方案的工作流程如下:首先,开发人员提交代码代码提交:随后,GitLab 会自动触发Jenkins job,Je ...
- 第四十四章 微服务CICD(6)- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
- gitlab + jenkins + docker + k8s
总体流程: 在开发机开发代码后提交到gitlab 之后通过webhook插件触发jenkins进行构建,jenkins将代码打成docker镜像,push到docker-registry 之后将在k8 ...
- .Net Core 自动化部署:使用jenkins部署到linux docker容器运行
上次我们说到.Net Core 自动化部署:使用docker版jenkins部署dotnetcore应用,这次我们使用jenkins发布我们的.NET Core站点到docker容器中运行,为后面的的 ...
- 前端自动化部署linux centOs + Jenkins + nignx + 单页面应用
Jenkins是什么? Jenkins 是一款业界流行的开源持续集成工具,广泛用于项目开发,具有自动化构建.测试和部署等功能. 准备工作 Linux centOS系统阿里云服务器一个 码云一个存放vu ...
- Gitlab+Jenkins+Docker实现net core持续集成
前言 在项目中使用这一套自动集成的体系之后,一直想找个时间总结出来,用于自己记录也打算将自己的所得分享给园友们,不经常写文章,可能会有错误的地方,希望各位不吝指正,我会及时的改正并表示感谢,希望大家能 ...
- Jenkins+maven+gitlab自动化部署之gitLab搭建(二)
Gitlab我们这里采用docker方式部署,详细请参考:Docker部署Gitlab11.10.4
- Jenkins+Ansible+Gitlab自动化部署三剑客-gitlab本地搭建
实际操作 准备linux初始环境 关闭防火墙 systemctl stop firewalld 开机自己关闭 systemctl disable firewalld 设置安全配置 为关闭 vim /e ...
- 自动化部署三剑客 gitlab + ansible + jenkins
http://www.showerlee.com/archives/1880 https://edu.51cto.com/center/course/lesson/index?id=280700 Gi ...
- 第四十三章 微服务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 ...
随机推荐
- 【YashanDB数据库】YAS-02024 lock wait timeout, wait time 0 milliseconds
[标题]错误码处理 [问题分类]锁等待超时 [关键字]YAS-02024 [问题描述]执行语句时候,因锁等待超时执行语句失败 [问题原因分析]数据库默认锁等待时间为0秒,如果执行语句存在锁等待过长会执 ...
- C# SAPX调用用户控件方法
//获得用户控件 Type pageType = ucMoneyList1.GetType(); //用户控件方法名 MethodI ...
- SSD-KD:天翼云&清华出品,最新无原始数据的蒸馏研究 | CVPR'24
无数据知识蒸馏能够利用大型教师网络所学到的知识,来增强较小型学生网络的训练,而无需访问原始训练数据,从而避免在实际应用中的隐私.安全和专有风险.在这方面的研究中,现有的方法通常遵循一种反演蒸馏的范式, ...
- C++ STL map/multimap容器
map/multimap容器 Map的特性是,所有元素都会根据元素的键值自动排序.Map所有的元素都是pair,同时拥有实值和键值,pair的第一个元素被视为键值,第二个元素被视为实值,map不允许两 ...
- Flutter将视频或图文分享到抖音
如何在 Flutter 中分享视频到抖音 话不多说,先上效果: 原理 发布内容至抖音 H5 场景_移动/网站应用_抖音开放平台 (open-douyin.com) 本教程没有接入抖音原生 SDK 以及 ...
- 【官宣】2024 DTC数据技术嘉年华全议程发布:汇聚行业精英,共襄年度盛宴
龙腾四海内,风云际会时.由墨天轮数据社区和中国数据库联盟(ACDU)主办的第十三届数据技术嘉年华 将于2024年4月12日至13日在北京新云南皇冠假日酒店盛大召开.本次大会的主题是"智能·云 ...
- 某物联网数智化园区行业基于 KubeSphere 的云原生实践
公司简介 作为物联网 + 数智化园区一体化解决方案提供商,我们致力于为大中型园区.停车场提供软硬件平台,帮助园区运营者实现数字化.智能化运营. 在使用 K8s 之前我们使用传统的方式部署上线,使用 s ...
- P3571 [POI2014] SUP-Supercomputer 题解
P3571「POI2014」SUP-Supercomputer 题解 一道 "较" 水的黑题 (可一开始苦思冥想还是不会). 本蒟蒻的第一篇黑题题解,求赞. 题意简化 给定一棵 \ ...
- nvm安装使用教程
一.简介 既然你来了,那就不用解释太多,只需要知道 nvm是一款nodejs版本管理工具,通过它可以让我们切换不同版本的 nodejs. 二.下载nvm 1.在安装nvm之前,你要先确定是否安装了no ...
- RocketMQ 5.0 如何配置TLS加密传输?
本文作者:李伟,社区里大家叫小伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云Ro ...