Docker Jenkins(改错版本)

Devops:它强调开发(Development)和运维(Operations)团队之间的协作.实现更快,更可靠的软件交付部署.

JenKins是一个开源的自动化服务器,广泛用于构建,测试和部署软件项目.它是持续集成(CI)和持续交付/部署(CD)的工具.JenKins是实现DevOps实践的重要工具.

前端项目部署一般流程:

1.npm install安装依赖

2.npm run build打包

3.上传到服务器比如Nginx的html目录下

后端项目部署一般流程

1.mven下载依赖

2.mvn打成jar

3.上传服务器

4.java -jar命令运行

那么Jenkins干了什么呢?    当我们把项目提交到gitee或者github时候

Jenkins从代码仓库拉取代码之后  就是帮我们做了这些事情,好比你写了一个脚本去完成这些事

也有很多企业,给项目中放一个deploy.sh脚本

另外Jenkins有很多插件,可以邮件通知等等

大致流程:我们将项目推送到gitee或者github,gitee或者github通知JenKins服务,JenKins服务拉取代码,完成打包部署到服务器的方案

因为JenKin需要自己打包,因此前端项目需要Node环境,Java需要JDK环境,PHP需要PHP的环境

试想,你在打包前端项目,打包后端项目时候,自己电脑是不是需要这样环境,一样道理

下面就以这个前端项目为例

VitePress+Docker+jenkins构建个人网站-CSDN博客

Docker Nginx-CSDN博客

将项目上传到gitee之后,让该项目自动部署

在这个例子中我们使用Docker来拉取Node环境,因此JenKins需要内嵌Docker

而本身JenKins是java写的,因此还需要Docker拉取JDK环境

这里由于自己比较菜,Docker不是很了解  因此选择用Docker安装Jenkins选用宿主机上安装JDK和Node环境的方式

JenKins官网JenkinsJenkins – an open source automation server which enables developers around the world to reliably build, test, and deploy their softwareicon-default.png?t=N7T8https://www.jenkins.io/

JenKins中文官网

JenkinsJenkins 是一个开源自动化服务器icon-default.png?t=N7T8https://www.jenkins.io/zh/

安装JDK

mkdir /usr/local/develop

cd /usr/local/develop

把JDK拖进去

解压

tar -zxvf /usr/local/develop/jdk-8u191-linux-x64.tar.gz -C /usr/local/develop/

改名

mv /usr/local/develop/jdk1.8.0_191 /usr/local/develop/jdk8

配置JAVA_HOME

系统环境

vim /etc/profile

到最下面

export JAVA_HOME=/usr/local/develop/jdk8

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib

让环境变量生效

source /etc/profile

java -version 查看jdk版本 至此JDK安装完成

安装Maven

注意Maven和JDK还是有关系的最好安装你自己本地对应JDK版本常用的

Maven – Download Apache Mavenicon-default.png?t=N7T8https://maven.apache.org/download.cgi

解压

tar -zxvf apache-maven-3.9.7-bin.tar.gz 

配置环境变量

vim /etc/profile

在最后面追加

export MAVEN_HOME=/usr/local/develop/apache-maven-3.9.7
export PATH=${PATH}:${MAVEN_HOME}/bin

使环境变量生效

source /etc/profile

mvn -v

 

安装Nodejs环境

Index of /dist/v20.14.0/

解压

tar -zxvf node-v20.14.0-linux-x64.tar.gz 

vim /etc/profile

在最后面追加

export NODE_HOME=/usr/local/develop/node-v20.14.0-linux-x64
export PATH=$PATH:${NODE_HOME}/bin

使环境变量生效

source /etc/profile

node -v                     原因是系统版本太久了  怎么办呢

Node.js — Download Node.js®Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.icon-default.png?t=N7T8https://nodejs.org/en/download/source-code

下载了个16的版本试试

tar -xvf node-v16.20.2-linux-x64.tar.xz
 

yum install xz(如果上面没报错这个不需要  可能是我命令敲错了)

vim /etc/profile

export NODE_HOME=/usr/local/develop/node-v16.20.2-linux-x64
export PATH=${PATH}:${NODE_HOME}/bin


source /etc/profile

其实不需要这样  

将三个包拖进去之后  可以用dockerfile构建

FROM jenkins/jenkins:2.346.1-lts

USER root

# 安装JDK
COPY jdk-8u191-linux-x64.tar.gz /tmp/
RUN mkdir -p /usr/local/jdk8 && \
    tar -xzf /tmp/jdk-8u191-linux-x64.tar.gz -C /usr/local/jdk8 --strip-components=1 && \
    rm /tmp/jdk-8u191-linux-x64.tar.gz

ENV JAVA_HOME /usr/local/jdk8
ENV PATH $PATH:$JAVA_HOME/bin

# 安装Maven
COPY apache-maven-3.9.7-bin.tar.gz /tmp/
RUN mkdir -p /usr/local/apache-maven && \
    tar -xzf /tmp/apache-maven-3.9.7-bin.tar.gz -C /usr/local/apache-maven --strip-components=1 && \
    rm /tmp/apache-maven-3.9.7-bin.tar.gz

ENV MAVEN_HOME /usr/local/apache-maven
ENV PATH $PATH:$MAVEN_HOME/bin

# 安装xz工具
RUN apt-get update && apt-get install -y xz-utils

# 安装Node.js
COPY node-v16.20.2-linux-x64.tar.xz /tmp/
RUN mkdir -p /usr/local/node && \
    tar -xJf /tmp/node-v16.20.2-linux-x64.tar.xz -C /usr/local/node --strip-components=1 && \
    rm /tmp/node-v16.20.2-linux-x64.tar.xz

ENV NODE_HOME /usr/local/node
ENV PATH $PATH:$NODE_HOME/bin

USER jenkins

# 暴露Jenkins端口
EXPOSE 8080
EXPOSE 50000

在dockerfile所在目录执行

docker build -t hrui-jenkins:2.346.1-lts .

docker run -d \
  -u root \
  --privileged \
  --name jenkins \
  --restart=always \
  -v /usr/local/develop/docker/jenkins/home:/var/jenkins_home \
  -v /usr/local/develop/docker/jenkins/logs:/var/jenkins_home/logs \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /etc/localtime:/etc/localtime:ro \
  -p 8080:8080 \
  -p 50000:50000 \
  hrui-jenkins:2.346.1-lts
 

docker exec -it jenkins /bin/bash

# 检查 JDK
java -version

# 检查 Maven
mvn -version

# 检查 Node.js
node -v
npm -v

exit

可以通过docker logs 容器名   查看日志

是否需要开放端口50000

如果你计划在Jenkins中使用分布式构建,并且需要添加多个代理节点,那么你需要开放端口50000,以便这些代理节点能够连接到Jenkins主服务器。如果你只打算在单个节点上运行Jenkins(不使用代理节点),那么可以选择不开放这个端口。

8080端口:用于访问Jenkins Web界面。

我的nginx也是通过docker安装的

Docker Nginx-CSDN博客

    #server {
    #    listen       80;
    #    server_name  xxx.xxx.xxx;

        #charset koi8-r;

        #access_log  logs/host.access.log  main;

    #    location / {
    #        root   /etc/nginx/ssl;
    #        index  index.html index.htm;
    #    }
	#}

docker restart nginx

certbot certonly --webroot -w /usr/local/develop/docker/nginx/ssl -d 你的域名

注释掉  添加https

/sbin/ip route|awk '/default/ { print $3 }'    查看宿主机ip  docker没学好  可以用网络连通

server {
		listen 443 ssl;
		server_name xxx.xxx.xxx;

		ssl_certificate /etc/letsencrypt/live/xxx.xxx.xxx/fullchain.pem;
		ssl_certificate_key /etc/letsencrypt/live/xxx.xxx.xxx/privkey.pem;

		ssl_session_cache shared:SSL:1m;
		ssl_session_timeout 5m;

		ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!aNULL:!eNULL:!MD5:!ADH:!RC4';
		ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
		ssl_prefer_server_ciphers on;

		location / {
			# 代理到宿主机8080端口
			proxy_pass http://xxx.xxx.xxx:8080;
			proxy_set_header Host $host;
			proxy_set_header X-Real-IP $remote_addr;
			proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
			proxy_set_header X-Forwarded-Proto $scheme;

			# 处理长时间运行的请求
			proxy_connect_timeout 3600;
			proxy_send_timeout 3600;
			proxy_read_timeout 3600;
			send_timeout 3600;
		}

		error_page 500 502 503 504 /50x.html;
		location = /50x.html {
			root html;
		}
	}

docker restart nginx

尝试https访问

失败

直接删除镜像

怀疑是宿主机和内部网络没有连通

创建网桥的方式

docker network create jenkins-network

让两个容器实例在同一个网桥内

docker run -d \
  -u root \
  --privileged \
  --name jenkins \
  --restart=always \
  --network jenkins-network \
  -v /usr/local/develop/docker/jenkins/home:/var/jenkins_home \
  -v /usr/local/develop/docker/jenkins/logs:/var/jenkins_home/logs \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /etc/localtime:/etc/localtime:ro \
  -p 8080:8080 \
  -p 50000:50000 \
  hrui-jenkins:2.346.1-lts
 

docker run -d -p 80:80 -p 443:443 --name nginx \
  --network jenkins-network \
  -v /usr/local/develop/docker/nginx/nginx.conf:/etc/nginx/nginx.conf \
  -v /usr/local/develop/docker/nginx/conf.d:/etc/nginx/conf.d \
  -v /usr/local/develop/docker/nginx/html:/usr/share/nginx/html \
  -v /usr/local/develop/docker/nginx/logs:/var/log/nginx \
  -v /usr/local/develop/docker/nginx/ssl:/etc/nginx/ssl \
  -v /etc/letsencrypt:/etc/letsencrypt \
  --restart always \
  nginx
 

重新配置https

upstream jenkins {
  keepalive 32; # keepalive connections
  server jenkins:8080; # 使用Jenkins容器名称和端口
}

# Required for Jenkins websocket agents
map $http_upgrade $connection_upgrade {
  default upgrade;
  '' close;
}

server {
  listen 443 ssl;
  server_name xxx.xxx.xxx;

  ssl_certificate /etc/letsencrypt/live/xxx.xxx.xxx/fullchain.pem;
  ssl_certificate_key /etc/letsencrypt/live/xxx.xxx.xxx/privkey.pem;

  ssl_session_cache shared:SSL:1m;
  ssl_session_timeout 5m;

  ssl_ciphers 'ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!aNULL:!eNULL:!MD5:!ADH:!RC4';
  ssl_protocols TLSv1.1 TLSv1.2 TLSv1.3;
  ssl_prefer_server_ciphers on;

  access_log /var/log/nginx/jenkins.access.log;
  error_log /var/log/nginx/jenkins.error.log;

  ignore_invalid_headers off;

  location ~ "^/static/[0-9a-fA-F]{8}\/(.*)$" {
    rewrite "^/static/[0-9a-fA-F]{8}\/(.*)" /$1 last;
  }

  location /userContent {
    root /var/lib/jenkins/;
    if (!-f $request_filename){
      rewrite (.*) /$1 last;
      break;
    }
    sendfile on;
  }

  location / {
    sendfile off;
    proxy_pass http://jenkins; # 使用上游块
    proxy_redirect default;
    proxy_http_version 1.1;

    # Required for Jenkins websocket agents
    proxy_set_header Connection $connection_upgrade;
    proxy_set_header Upgrade $http_upgrade;

    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_max_temp_file_size 0;

    client_max_body_size 10m;
    client_body_buffer_size 128k;

    proxy_connect_timeout 3600;
    proxy_send_timeout 3600;
    proxy_read_timeout 3600;
    send_timeout 3600;
    proxy_request_buffering off; # Required for HTTP CLI commands
  }

  error_page 500 502 503 504 /50x.html;
  location = /50x.html {
    root html;
  }
}

server {
  listen 80;
  server_name devops.opensdk.xyz;

  location / {
    return 301 https://$host$request_uri;
  }
}

查看里面密码

漂亮   原因是Jenkins版本太旧  插件已经更新  没办法  继续就好

保存并完成

保存并完成\

反正啥插件也装不了

看着难受

docker rm -f jenkins删了

删了  不然还是会保留配置

docker run -d   -u root   --privileged   --name jenkins   --restart=always   --network jenkins-network   -v /usr/local/develop/docker/jenkins/home:/var/jenkins_home   -v /usr/local/develop/docker/jenkins/logs:/var/jenkins_home/logs   -v /var/run/docker.sock:/var/run/docker.sock   -v /etc/localtime:/etc/localtime:ro   -p 8080:8080   -p 50000:50000   hrui-jenkins:2.346.1-lts

重新开始


看样子也不行   重删  继续重来

dockerfile修改

 docker rm -f jenkins       删除原来的

删除镜像

docker rmi  id

docker build -t hrui-jenkins:2.452.2-lts .

或者 docker build -t hrui-jenkins:2.452.2-lts -f /path/to/your/dockerfile/Dockerfile .

docker run -d \
  -u root \
  --privileged \
  --name jenkins \
  --restart=always \
  --network jenkins-network \
  -v /usr/local/develop/docker/jenkins/home:/var/jenkins_home \
  -v /usr/local/develop/docker/jenkins/logs:/var/jenkins_home/logs \
  -v /var/run/docker.sock:/var/run/docker.sock \
  -v /etc/localtime:/etc/localtime:ro \
  -p 8080:8080 \
  -p 50000:50000 \
  hrui-jenkins:2.452.2-lts
 

安装完成之后再装一个

等待完成

docker restart jenkins

流水线的意思

还可以写sh 脚本   例如  sh "npm -v"

可以安装JDK  Maven

在流水线中也可以配置环境

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【javaEE-有关CPU进程和线程实现的并发编程及二者的区别】

🔥🔥🔥有关进程并发编程开发的成本问题 这次之前其实我们所有的写的程序都是使用单核心来运行的,但是一般我们的计算机都有很多核心,如果我们编程的时候,只使用一个核心的话,其实这是一个非常大…

通俗范畴论2 有向图与准范畴

退一步海阔天空,在正式进入范畴论之前,我们可以重新审视一下我们是如何认识世界的,有了这个对人类认识世界过程的底层理解,可以帮助我们更好地理解范畴论。 对于人类认识世界,最神奇的一点就是这个世界居然是可以认识…

【C语言】解决C语言报错:Race Condition

文章目录 简介什么是Race ConditionRace Condition的常见原因如何检测和调试Race Condition解决Race Condition的最佳实践详细实例解析示例1:缺乏适当的同步机制示例2:错误使用条件变量 进一步阅读和参考资料总结 简介 Race Condition(竞争条…

element-ui input输入框和多行文字输入框字体不一样

页面中未作样式修改,但是在项目中使用element-ui input输入框和多行文字输入框字体不一样,如下图所示: 这是因为字体不一致引起的,如果想要为Element UI的输入框设置特定的字体,你可以在你的样式表中添加以下CSS代码…

尚品汇-(二)

本地域名解析器:当我们在浏览器输入域名的时候,它首先找的不是远程的DNS,而是去本地的host中去找这个域名有没有对应的,如果有对应的,那么就根据对应的ip进行访问 一:环境安装 1.安装JAVA 运行环境 第一…

MySQL之优化服务器设置(四)

优化服务器设置 InnoDB的IO配置 双写缓冲(Doublewrite Buffer) InnoDB用双写缓冲来避免页没写完整所导致的数据损坏。当一个磁盘写操作不能完整地完成时,不完整的页写入就可能发生,16KB的页可能只有一部分被写到磁盘上。有多种多样的原因(崩溃、Bug&am…

Obsidian 工作区Workspace:实现切换和管理工作区的多任务处理插件

工作区 工作区是Obsidian 的核心插件之一,旨在帮助用户更好地管理和组织他们的工作环境。 功能简介 工作区保存和切换:Workspace 插件允许用户保存当前的窗口布局和打开的笔记状态,用户可以随时切换到不同的工作区,这样可以根据…

Matlab|基于手肘法的kmeans聚类数的精确识别【K-means聚类】

主要内容 在电力系统调度研究过程中,由于全年涉及的风、光和负荷曲线较多,为了分析出典型场景,很多时候就用到聚类算法,而K-means聚类就是常用到聚类算法,但是对于K-means聚类算法,需要自行指定分类数&…

Google Earth Engine(GEE)——计算闪闪红星的ndvi的值和折线图(时序分析)

函数: ui.Chart.image.doySeries(imageCollection, region, regionReducer, scale, yearReducer, startDay, endDay)

中小学电子教材下载办法(202406最简单的)

官方版本 现在能阅读电子教材的官方网站挺多的,例如 人民教育出版社-电子教材,还有 国家中小学智慧教育平台 ,其他还有很多可在阅读的网站。由于平台的原因不能直接贴链接,大家可以通过搜索关键词找到网站。 如何下载 据我所知…

idea搜索只显示100条、如何修改idea搜索的条数

文章目录 一、老版本的IDEA(2021年之前的版本)二、新版本的IDEA(2021年及之后的版本)2.1、方式一2.2、方式二 如下图:idea搜索的时候默认只显示100条 要解决IDEA搜索只显示100条的问题,可以通过修改搜索结…

【推荐】Perl入门教程特点功能文本处理读取文件替换文本写入文件分割字符数据库处理环境准备安装(包含示咧)

本人详解 作者:王文峰,参加过 CSDN 2020年度博客之星,《Java王大师王天师》 公众号:JAVA开发王大师,专注于天道酬勤的 Java 开发问题中国国学、传统文化和代码爱好者的程序人生,期待你的关注和支持!本人外号:神秘小峯 山峯 转载说明:务必注明来源(注明:作者:王文峰…

HashMap详解(含动画演示)

目录 HashMap1、HashMap的继承体系2、HashMap底层数据结构3、HashMap的构造函数①、无参构造②、有参构造1 和 有参构造2 (可以自定义初始容量和负载因子)③、有参构造3(接受一个Map参数)JDK 8之前版本的哈希方法:JDK 8版本的哈希方法 4、拉链法解决哈希冲突什么是拉…

监控室,屏幕显示不支持码流

1号屏,出现不支持码流 如下原因 老是录像机 无法关闭自动添加摄像头功能, 其他杂牌摄像头 会自动还ip 最终导致 ip冲突 更换ip 可以解决

Arnoldi Iteration 思考

文章目录 1. 投影平面2. Arnoldi Iteration3. python 代码 1. 投影平面 假设我们有一个向量q,我们需要关于向量q,构建一个投影平面P,使得给定任何向量v,可以通过公式 p P v pPv pPv,快速得到向量v在投影平面P上的投影向量p. 计算向量内积,…

部署LVS-DR群集...

目录 最后一台主机(第四台) 本地yum源安装httpd(非必做) 继续开始从最后一台主机开始(第四台) 转第二台主机 转第三台主机 回第二台 上传 转第三台主机 上传 回第二台 转第三台 转第一台主机…

Parallelize your massive SHAP computations with MLlib and PySpark

https://medium.com/towards-data-science/parallelize-your-massive-shap-computations-with-mllib-and-pyspark-b00accc8667c (能翻墙直接看原文) A stepwise guide for efficiently explaining your models using SHAP. Photo by Pietro Jeng on Unsplash Int…

前端:鼠标点击实现高亮特效

一、实现思路 获取鼠标点击位置 通过鼠标点击位置设置高亮裁剪动画 二、效果展示 三、按钮组件代码 <template><buttonclass"blueBut"click"clickHandler":style"{backgroundColor: clickBut ? rgb(31, 67, 117) : rgb(128, 128, 128),…

docker login 报错: http: server gave HTTP response to HTTPS client

环境&#xff1a; 自建 Harbor、Docker 1. 问题分析 # 命令&#xff0c;这里用的是 IP&#xff0c;可以为域名 docker login -u test 172.16.51.182:31120 # 输入密码 Password:# 报错如下&#xff1a; Error response from daemon: Get "https://172.16.51.182:31120/…