Ubuntu20.04+docker+jenkins+飞书实现自动化发布

一、从0-1一点一滴实现如何本地提交代码到gitlab然后实现前后端自动发布


1.更新apt包索引

sudo apt-get update


2.安装必备的软件包以允许apt通过https使用存储库

sudo apt-get install ca-certificates curl gnupg lsb-release

3.添加Docker官方版本的GPG密钥

sudo mkdir -p /etc/apt/keyrings
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg

4.添加阿里云的GPG密钥

curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -

5.设置存储库

sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"

6.安装最新版本的docker

sudo apt-get update
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-compose-plugin

7.验证docker是否安装成功

docker version

8.验证docker服务是否在运行

systemctl status docker

9.设置docker服务每次开机自启

sudo systemctl enable docker

二、安装完docker之后我们按照jenkins,其中要注意的是我们需要构建出Jenkins的镜像要包含.net core/.net6 和node.js的环境。

docker中安装jenkins

  1. 编写带上述环境的dockerfile

FROM jenkins/jenkinsUSER rootRUN uname -a && cat /etc/*releaseRUN apt-get update
RUN apt-get install -y curl libunwind8 gettext apt-transport-httpsRUN curl https://packages.microsoft.com/keys/microsoft.asc | gpg --dearmor > microsoft.gpg
RUN mv microsoft.gpg /etc/apt/trusted.gpg.d/microsoft.gpg
RUN sh -c 'echo "deb [arch=amd64] https://packages.microsoft.com/repos/microsoft-debian-stretch-prod stretch main" > /etc/apt/sources.list.d/dotnetdev.list'# Install the .NET Core framework
RUN apt-get update
RUN apt-get install -y dotnet-sdk-3.1 \&& apt-get install -y dotnet-sdk-5.0 \ && apt-get install -y dotnet-sdk-6.0# Install the npm 
RUN apt-get install -y curl \&& curl -sL https://deb.nodesource.com/setup_16.x | bash - \&& apt-get install -y nodejs \&& curl -L https://www.npmjs.com/install.sh | sh# Install cnpm
RUN npm install cnpm -gRUN npm -v
RUN cnpm -vUSER jenkins

2.根据dockerfile构建镜像

# 进入dockerfile所在目录
docker build -t complex_jenkins .

3.根据镜像生成容器

# docker run  -d -p 8081:8080 --name complex_jenkins -v /etc/localtime:/etc/localtime -v /home/projects/jenkins_home:/var/jenkins_home complex_jenkins

三、.net core项目编写dockerfile

后端自动生成.net core dockerfile

打开VS2022,在启动项目上添加docker支持,这样VS2022就会帮我们生成dockerfile

这里有个坑,我们需要将生成的dockerfile移动到项目根目录。

将生成好的dockerfile提交到gitlab仓库中。

前端生成dockerfile

# 安装nginx
docker pull nginx
docker run --name=nginx -d -p 4030:80 nginx

生成dockerfile,并将dockerfile放置在与dist文件夹同级目录下

FROM nginx #指定基础镜像MAINTAINER ps #说明信息RUN rm /etc/nginx/conf.d/default.conf  ADD default.conf /etc/nginx/conf.d/  #删除基础镜像中的Nginx配置文件替换成自己写的COPY dist/ /usr/share/nginx/html/ #将打包好的vue项目复制到基础镜像中Nginx配置文件的指定路径下

编写Nginx配置文件

生成一个nginx默认配置文件:default.conf 并将配置文件放置在与dockerfile同级目录下

server {listen       8081;# 配置端口server_name  宿主机IP; # 修改为docker服务宿主机的iplocation / {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;}
}

配置Jenkins

  1. 登录

    b11f4583b0faf9d710ce231d79dbf046.png

2.构建项目

ab35e57cc4139cf94ed8d0a10fa80c1f.png

ce75334d6dd5cfcc6f9d2beeb3756684.png

构建执行脚本

f009ffdc4a03ad2b6cda1e00c26fbbfa.png

shell脚本编写

#!/bin/bash
pwd
cd /var/jenkins_home/workspace/mes_bac_dev/
set -eux
if [[ "$(docker inspect bac_dev 2> /dev/null | grep '"Name": "/bac_dev"')" != "" ]];thenecho 'exists container'docker stop bac_devdocker rm bac_dev
fi
if [[ "$(docker images -q bac_dev 2> /dev/null)" != "" ]];thenecho 'exists images'docker rmi bac_dev
elseecho 'not exists'
fi
docker build -t bac_dev .
docker run --name=bac_dev  -v /etc/localtime:/etc/localtime   -it -p 9995:80 -d bac_dev

前端脚本配置也如上:


构建成功后飞书消息通知

  1. 首先在飞书群配置一个机器人

    2c9aa87922733a666297e5765a58cddd.png

3fb1ac2dab300943bcf25ba96b7e904c.png

保存好webhook,以供下文python脚本使用

2.Jenkins里面配置pyhon3环境

# 进入docker jenkins 容器
docker exec -it  容器id /bin/bash
# 使用apt-get 代替yum 安装
apt-get
apt-get update
apt-get install wget# 设置个文件夹 解压缩python包
cd /var/jenkins_home/
mkdir python3
cd python3/
wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz
tar -xvf Python-3.6.8.tgz# 安装gcc 依赖包
apt-get -y install gcc automake autoconf libtool make
apt-get -y install make*
apt-get -y install zlib*
apt-get -y install openssl libssl-dev
apt-get install sudo# 指定安装目录
./configure --prefix=/var/jenkins_home/python3
make
make install

3.编写python飞书脚本并放置项目上传到gitlab上

import sys
import requests
import time#定义python系统变量
JOB_URL = sys.argv[1]
JOB_NAME = sys.argv[2]
BUILD_NUMBER = sys.argv[3]
GIT_BRANCH= sys.argv[4]currenttime = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())# 飞书机器人的webhook地址
url = '此处为上文创建飞书机器人的webhook地址'
method = 'post'
headers = {'Content-Type':'application/json'}data = {"msg_type": "interactive","card": {"config": {"wide_screen_mode": True,"enable_forward": True},"elements": [{"tag": "div","text": {"content": "项目名称:" + JOB_NAME + "\n构建编号:第" + BUILD_NUMBER + "次构建\n运行时间:" + currenttime + "\n分支:" + GIT_BRANCH,"tag": "lark_md"}}],"header": {"title": {"content": JOB_NAME + "构建报告", # JOB_NAME 调用python定义的变量,这是卡片的标题"tag": "plain_text"}}}
}
res= requests.request(method=method,url=url,headers=headers,json=data)
print(res)
print(res.json())

4.jenkins配置飞书

增加shell脚本构建

# 进入python脚本所在的目录 安装脚本的需要的requests包 并指定镜像源
pip3 install requests -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
# 执行脚本 其中 $... 为Jenkins传递给脚本的变量 
python3 autoResult.py $JOB_URL $JOB_NAME $BUILD_NUMBER $GIT_BRANCH

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一个Demo让你掌握Android所有控件

一个Demo让你掌握Android所有控件 原文:一个Demo让你掌握Android所有控件本文是转载收藏,侵删,出处:"安卓巴士" 下面给出实现各个组件的源代码: 1.下拉框实现--Spinner [java] view plaincopyprint?package com.cellcom; import java.util.ArrayList;…

九妹带你走向 架构师

迈向系统架构师编者按:系统架构师是许多程序员的梦想职业。今天的你也许已经掌握了各种开发工具,并且能够使用各种平台进行开发,但作为一个架构师的要求,也许还有很长的道路。邢波涛先生在LAMP架构上的造诣,让我邀请他…

WPF 使用 DrawingContext 绘制温度计

WPF 使用 DrawingContext 绘制温度计控件名:Thermometer作者: WPFDevelopersOrg原文链接: https://github.com/WPFDevelopersOrg/WPFDevelopers框架使用大于等于.NET40;Visual Studio 2022;项目使用 MIT 开源许可协议&#xff…

装win10系统

一、使用U盘介质安装win10系统(官方方式) 官方安装工具下载地址:https://www.microsoft.com/zh-cn/software-download/windows10 1、进入官方安装工具下载页面,点击立即下载工具,下载安装工具。2、下载完成后&#xff…

C#构造函数、操作符重载以及自定义类型转换

构造器 构造器(构造函数)是将类型的实例初始化的特殊方法。构造器可分为实例构造器和类型构造器,本节将详细介绍有关内容。 实例构造器 顾名思义,实例构造器的作用就是对类型的实例进行初始化。如果类没有显示定义任何构造器&…

「Dotnet 工具箱」 自动生成并绑定 Https 证书

这里是 Dotnet 工具箱,定期分享 Dotnet 有趣,有用的工具,不要忘记关注。介绍LettuceEncrypt 是一个使用 C# 开发的免费的工具,它和证书颁发机构 (CA)集成,比如 Lets Encrypt,它使用了…

1115: 零起点学算法22——华氏摄氏温度转换

1115: 零起点学算法22——华氏摄氏温度转换 Time Limit: 1 Sec Memory Limit: 64 MB 64bit IO Format: %lldSubmitted: 3522 Accepted: 1456[Submit][Status][Web Board]Description 输入一个华氏温度,根据公式C(5/9)(F-32)计算对应的摄氏温度。 Input 输入一个…

Navicat Premium 12 的安装破解

Navicat 这款软件可以说 是数据库可视化操作的神器, 有绿色的 (最原始版本, 好像现在已经不维护了) , 有金色的 (改良收费版 ) , 还有彩色的 (最新版) , 这里 , 推荐使用彩色版 (也就是截止目前最新的版本 12.0.27). 操作的话, 感觉相比于小绿和小金有很大改进 , 很棒 , 在此给…

Vuejs——组件——slot内容分发

2019独角兽企业重金招聘Python工程师标准>>> ①概述: 简单来说,假如父组件需要在子组件内放一些DOM,那么这些DOM是显示、不显示、在哪个地方显示、如何显示,就是slot分发负责的活。 ②默认情况下 父组件在子组件内套的…

turtle库基础练习

画一组同切圆 import turtleturtle.shape(turtle)turtle.circle(10) turtle.circle(20) turtle.circle(30) turtle.circle(40) turtle.circle(50) turtle.circle(60) turtle.circle(70) turtle.circle(80)turtle.hideturtle() turtle.done() 画一组同心圆 import turtleturtle.…

检查你的项目的引用包依赖关系

2019独角兽企业重金招聘Python工程师标准>>> 随着着开发的进展,你的项目越来越大,引用的第三方包越来越多,但如何查看都依赖了哪些包,甚至传递依赖又是怎样? 首先解决这个问题的前提,你的项目需要是maven项目,然后可以做如下设置: 选中项目,右键->ru…

git 项目操作

1 创建本地仓库,克隆远程项目代码到本地仓库2. 当我们在本地写了一些代码之后 , 查看本地仓库状态3. 提交改变到待提交区 git add .4. 提交代码到待推送区 git commit -m "新建项目kuman"5. 将本地代码推送到远程代码仓库 git push origin master:nanle 注: 将本地m…

(二)SpringBoot功能

web开发 spring boot web开发非常的简单,其中包括常用的json输出、filters、property、log等 json 接口开发 在以前的spring 开发的时候需要我们提供json接口的时候需要做那些配置呢 就这样我们会经常由于配置错误,导致406错误等等,spring bo…

----斐波那契数列---eval函数----类递归思想 栈 进出 思想

------------ 斐波那契 数列 ---------------【1&#xff0c;1,2,3,5,8,13,21,34&#xff0c;...】 1 列表方法实现 # l[1,1] # # # while len(l)<20: # # l.append(l[-1]l[-2]) # # print(l) # # while len(l)!4: # l.append(l[-1]l[-2]) # print(l) # 2 …

HybridTime - Accessible Global Consistency with High Clock Uncertainty

Amazon’s Dynamo [9] and Facebook’s Cassandra [13], relax the consistency model&#xff0c;and offer only eventual consistency. Others such as HBase [1] and BigTable [4] offer strong consistency only for operations touching a single partition, but not acr…

公司目前实行的git团队协作方案

1. git init 新建本地仓库2. git clone 项目地址 获取远程master代码3. 在本地master代码上进行开发, 并将修改提交到待推送区4. 开发完, 在本地master分支基础上创建ready分支5. 在本地ready分支上(本地测试分支), 拉取并合并远程nanle分支最新代码(远程测试分支)6. 将本地re…

bzoj3122 [Sdoi2013]随机数生成器(bsgs+扩欧+数列)

Description Input 输入含有多组数据&#xff0c;第一行一个正整数T&#xff0c;表示这个测试点内的数据组数。 接下来T行&#xff0c;每行有五个整数p&#xff0c;a&#xff0c;b&#xff0c;X1&#xff0c;t&#xff0c;表示一组数据。保证X1和t都是合法的页码。 注意&…

挑选合适自己的一门编程语言

2019独角兽企业重金招聘Python工程师标准>>> 导读想学编程的原因有很多&#xff0c;你也许是想要做一个程序&#xff0c;又或者你只是想投身于这个行业&#xff0c;所以&#xff0c;在选择你的第一门编程语言之前&#xff0c;问问你自己&#xff1a;你想要在哪里运行…

css 实现章节名称不换行,多余部分用 ... 代替

修改之前:修改之后: 代码: <p style "white-space: nowrap;text-overflow: ellipsis;overflow: hidden;"><? $d[name] ?></p> <i><? $d[pen_name] ?></i> <i><?phpforeach ($d[tags] as $t) {echo $t[tag_name];…

.NET 反向代理-YARP 部署Https(SSL)

相关文章&#xff1a;.NET 反向代理-YARP.NET 反向代理-YARP 根据域名转发分享一个基于Abp 和Yarp 开发的API网关项目使用 Yarp 做网关YARP&#xff08;Yet Another Reverse Proxy&#xff09;是使用 .NET 构建的高度可定制的反向代理C# 开源一个基于 yarp 的 API 网关 Demo&am…