当前位置: 首页 > news >正文

Docker+Jenkins+git实现Golang项目自动部署

1. 安装Docker

2. 拉取Jenkins镜像

使用以下命令从Docker Hub拉取Jenkins的官方镜像:

# 拉取Jenkins的官方镜像
docker pull jenkins/jenkins:lts

3. 创建并运行Jenkins容器(使用root权限)

重点!重点!重点!为了让Jenkins容器以root权限运行,并且jenkins容器可以使用宿主机上的docker命令,你可以使用以下命令:

# 创建并运行Jenkins容器,使用root权限
docker run -d -u root \ -p 8080:8080 \ -p 50000:50000 \ --name jenkins \ -v /var/run/docker.sock:/var/run/docker.sock \ -v /usr/bin/docker:/usr/bin/docker \ -v jenkins_home:/var/jenkins_home \ jenkins/jenkins:lts
  • - -d :让容器在后台运行。
  • - -u root :指定容器以root用户身份运行。
  • - -p 8080:8080 :将容器内的8080端口映射到主机的8080端口,用于访问Jenkins的Web界面。
  • - -p 50000:50000 :将容器内的50000端口映射到主机的50000端口,用于Jenkins的代理通信。
  • - -v jenkins_home:/var/jenkins_home :将主机的卷 jenkins_home 挂载到容器内的 /var/jenkins_home 目录,用于持久化存储Jenkins的数据。
  • - -v /var/run/docker.sock:/var/run/docker.sock :将主机的Docker套接字文件挂载到容器内,允许容器内的Jenkins使用主机的Docker服务
  • -v /usr/bin/docker:/usr/bin/docker :将宿主机的 Docker 命令行工具挂载到容器中,使得 Jenkins 容器可以使用 docker 命令

4.Go项目

项目地址:gupengfei770/jenkins-go

Dockerfile,参考文档:docker部署第一个Go项目_docker部署go项目-CSDN博客

#这里使用Go 1.23.0版本的Alpine Linux镜像  AS  bulider 指定镜像的阶段名称
FROM golang:1.23.0-alpine AS bulider
WORKDIR /webapp
COPY . .
RUN go env -w GOPROXY=https://goproxy.cn,direct && go mod tidy
RUN go build -o web-app#使用一个更小基础镜像Alpine来运行程序
#Alpine是一个极简的Linux发行版,适合部署阶段
FROM alpine:latest#设置工作目录/build
WORKDIR /build#从编译阶段的镜像中拷贝编译后的二进制文件到运行镜像中
#--from=bulider 是第一阶段编译的镜像
COPY --from=bulider /webapp/web-app /build/web-appCMD ["/build/web-app"]

Jenkinsfile文件

pipeline {agent anystages {stage('初始化 Go 模块') {steps {sh 'echo $PATH'sh 'pwd'}}stage('构建 Docker 镜像') {steps {sh 'pwd'sh 'docker build -t jenkins-go:v1.0 .'}}stage('部署 Docker 镜像') {steps {sh 'pwd'sh 'docker rm -f myJenkinsGo'  sh 'docker run -d -p 8282:8080 --name myJenkinsGo jenkins-go:v1.0'}}}
}

 5.jenkins配置

访问:http://<你的ip地址>:8080

获取密码:

通过提示输入密码,选择推荐安装插件,插件安装时间一般较长,安装失败可以点击重试,一般都会下载下来,也可以更换下载源。

6.创建流水线项目

 

 

 

7.创建自由风格项目

 

 

 8.总结

无论是流水线还是自由风格部署。都是利用docker操作了。

http://www.lryc.cn/news/572419.html

相关文章:

  • springboot 打的可执行jar包单独更新某个jar包
  • JMeter 高阶玩法:分布式压测的技术核心技术要点
  • 【K8S】详解NodePort 和 ClusterIP
  • 大数据复习HDFS
  • 11.0592MHz晶振:电脑主板的“心脏”
  • 通过Docker挂载nginx并修改页面
  • ros中相机话题在web页面上的显示,尝试js解析sensor_msgs/Image数据
  • 嵌入式开发之freeRTOS移植
  • Kafka性能调优全攻略:从JVM参数到系统优化
  • Java的SpringAI+Deepseek大模型实战
  • 基于keepalived、vip实现高可用nginx (centos)
  • mongodb单节点改副本集模式
  • Python 开发环境全栈隔离架构:从 Anaconda 到 PyCharm 的四级防护体系
  • NetworkManager介绍与用法
  • 【单片机】51单片机练习代码
  • GRBL_UNO R3编译下载
  • Spring Boot 虚拟线程 vs WebFlux:谁更胜一筹?
  • Spring-创建第一个SpringBoot项目
  • apisix-使用hmac-auth插件进行接口签名身份验证\apisix consumer
  • SpringBoot项目启动时自动加载数据到Redis的完整实现方案,用于存储字典,定时任务,登录用户等
  • Spring @Autowired 依赖注入全解析
  • 语音情感识别:CNN-LSTM 和注意力增强 CNN-LSTM 模型的比较分析
  • Hive优化详细讲解
  • Redis 的优势有哪些,它是CP 还是 AP?CAP 理论又是什么?
  • C#的泛型和匿名类型
  • Ubuntu最新版本(Ubuntu22.04LTS)安装nfs服务器
  • Java八股文——计算机网络「传输层篇」
  • CppCon 2017 学习:Everything You Ever Wanted to Know about DLLs
  • CppCon 2017 学习:dynamic_cast from scratch
  • 【AJAX 实战】图书管理系统上 渲染图书列表+新增图书+删除图书