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-ltsUSER 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.gzENV 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.gzENV 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.xzENV NODE_HOME /usr/local/node
ENV PATH $PATH:$NODE_HOME/binUSER 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 connectionsserver 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 agentsproxy_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.mzph.cn/pingmian/28191.shtml

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

相关文章

Matlab|基于V图的配电网电动汽车充电站选址定容-可视化

1主要内容 基于粒子群算法的电动汽车充电站和光伏最优选址和定容 关键词:选址定容 电动汽车 充电站位置 仿真平台:MATLAB 主要内容:代码主要做的是一个电动汽车充电站和分布式光伏的选址定容问题,提出了能够计及地理因素和服…

蓝队-溯源技巧

溯源技巧 大致思想 通常情况下,接到溯源任务时,获得的信息如下 攻击时间 攻击 IP 预警平台 攻击类型 恶意文件 受攻击域名/IP其中攻击 IP、攻击类型、恶意文件、攻击详情是溯源入手的点。 通过攻击类型分析攻击详情的请求包,看有没有攻击者…

实在智能应邀出席中国移动科技工作者论坛,分享基于大模型+Agent智能体的“企业大脑”

为大力弘扬科学家精神,激励广大科技工作者践行科技报国、创新为民,争做高水平科技自立自强排头兵,6月6日,中国移动在线营销服务中心(以下简称“在线中心”)“2024年科技工作者大讲堂暨青年创新创效论坛”于…

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

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

C/C++:指针用法详解

C/C:指针 指针概念 指针变量也是一个变量 指针存放的内容是一个地址,该地址指向一块内存空间 指针是一种数据类型 指针变量定义 内存最小单位:BYTE字节(比特) 对于内存,每个BYTE都有一个唯一不同的编号…

赶紧转行大模型,预计风口就今年一年,明年市场就饱和了!不是开玩笑

恕我直言,就这几天,各大厂都在裁员,什么开发测试运维都裁,只有大模型是急招人。 你说你不知道大模型是什么?那可太对了,你不知道说明别人也不知道,就是要趁只有业内部分人知道的时候入局&#…

String常用方法详解

auth:别晃我的可乐 date:2024年06月16日 比较大小 equals(Object obj): 用于比较字符串内容是否相等。compareTo(String anotherString): 按字典顺序比较两个字符串。 String str1 "hello"; String str2 "world";boolean isEqual …

配置Linux DNS服务器作为自己的windows 的 DNS服务器和 配置遇到的问题

安装DNS 库 和 DNS工具: # bind 是用于创建 dns服务的, bind-utils是用于测试DNS服务的工具 yum -y install bind bind-utils配置主配置文件: # 下载好后就已经有DNS服务,但是需要你自己去配置DNS服务信息# 配置主配置文件 [rootl…

SylixOS下UDP组播测试程序

SylixOS下UDP组播测试 测试效果截图如下: udp组播发送测试程序。 /********************************************************************************************************* ** ** 中国软件开源组织 ** ** …

vue的安装配置并创建项目

npm 工具的安装 安装node.js之后,npm工具会自动安装到系统环境中 网址:https://nodejs.org/en vue的安装 安装vue并创建项目 npm create vuelatest 进入项目之后,然后启动npm run dev 解决方法: npm install -g create-vite 再次启动 通…

13.泛型、trait和生命周期(下)

目录 6. 生命周期与引用有效性6.1 生命周期引入6.2 得到长度最大的String值6.3 生命周期标注语法1)说明2)普通标注示例3)函数参数中的生命周期标注 6.4 深入理解生命周期6.5 结构体定义中的生命周期标注6.6 生命周期省略 6.7 方法定义中的生命…

应急响应 | 基本技能 | 01-系统排查

系统排查 目录 系统基本信息 Windows系统Linux系统 用户信息 Windows系统 1、命令行方式2、图形界面方法3、注册表方法4、wmic方法 Linux系统 查看所有用户信息分析超级权限账户查看可登录的用户查看用户错误的登录信息查看所有用户最后的登录信息查看用户最近登录信息查看当…

机器学习周报第46周

目录 摘要Abstract一、文献阅读1.1 摘要1.2 研究背景1.3 论文方法1.4 模块分析1.5 网络规格1.6 高效的端到端对象检测1.7 mobile former模块代码 目录 摘要Abstract一、文献阅读1.1 摘要1.2 研究背景1.3 论文方法1.4 模块分析1.5 网络规格1.6 高效的端到端对象检测1.7 mobile f…

C++ 58 之 计算器案例

虚函数,vitual function C动态多态性是通过虚函数来实现的,虚函数允许子类(派生类)重新定义父类(基类)成员函数,而子类(派生类)重新定义父类(基类)虚函数的做…

day38-39| 509. 斐波那契数 70. 爬楼梯 746. 使用最小花费爬楼梯 62.不同路径 343. 整数拆分 96.不同的二叉搜索树

文章目录 前言动态规划理论基础509. 斐波那契数思路方法一 完整动态规划方法二 dp简化版方法三 使用递归 70. 爬楼梯思路方法一 动态规划方法一2 教程里面的简化方法方法二 拓展 746. 使用最小花费爬楼梯思路方法一方法二 拓展 62.不同路径思路 动态规划方法一方法二 递归 63. …

设计模式学习(二)工厂模式——工厂方法模式

设计模式学习(二)工厂模式——工厂方法模式 前言工厂方法模式简介示例优点缺点使用场景 前言 前一篇文章介绍了简单工厂模式,提到了简单工厂模式的缺点(违反开闭原则,扩展困难),本文要介绍的工…

Hadoop 2.0:主流开源云架构(四)

目录 五、Hadoop 2.0访问接口(一)访问接口综述(二)浏览器接口(三)命令行接口 六、Hadoop 2.0编程接口(一)HDFS编程(二)Yarn编程 五、Hadoop 2.0访问接口 &am…

java打印helloworld

源代码 public class Function1 {public static void main(String[] args) {System.out.println("hello world");}} 打印结果

为什么说Python 是胶水语言?

​ "Python 是胶水语言"这一说法是指它很擅长将不同的程序或代码库连接在一起,能够让来自不同编程语言或框架的组件无缝协作。Python 具有丰富的库和简单的语法,使得它可以轻松调用其他语言编写的程序或使用不同技术栈的模块。 ​ 以下是几个…

C学习自学笔记-会陆续完善对应章节编程经典例子

C学习笔记 0>C语言概述 为什么学习C语言 1)C的起源和发展------了解即可 B语言、C语言、C语言的产生地:都出自 美国贝尔实验室 2)C的特点 优点:代码量小、速度快、功能强大 缺点:危险性高、开发周期长、可移植性…