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.pswp.cn/news/282425.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/282425.shtml
英文地址,請注明出處:http://en.pswp.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…

MAVEN簡介之——settings.xml

概述 Maven的settings.xml配置了Maven執行的方式,像pom.xml一樣,但是它是一個通用的配置,不能綁定到任何特殊的項目。它通常包括本地倉庫地址,遠程倉庫服務,認證信息等。 settings.xml存在于兩個位置: mave…

裝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 …

【招聘(上海)】 .NET 后端工程師

蟲蟲拜拜&#xff08;https://www.byepest.com/&#xff09;面向城市家庭、連鎖餐飲、醫療機構等提供高品質的蟲害防治業務&#xff0c;已經拓展到了7個城市&#xff0c;2022年前計劃進入22個城市。平臺實現盈利&#xff0c;并且具有獨特的競爭力&#xff0c;已經獲得德國拜耳公…

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都是合法的頁碼。 注意&…

邊寫 Javascript 代碼邊玩游戲 – WarriorJS

在 github 上看到這個有趣的項目 – WarriorJS &#xff0c;項目的內容寫著 – 令人興奮的程序設計和人工智慧游戲&#xff0c;Ok 我坦白我是看到人工智慧被這個專案所吸引&#xff0c;但是玩了兩個關卡&#xff0c;還是不知道這個游戲跟人工智慧有什么關系&#xff0c;不過這個…