首页 > 系统相关 >jenkins + gogs + docker + nginx 完成自动化部署

jenkins + gogs + docker + nginx 完成自动化部署

时间:2025-01-19 13:54:54浏览次数:1  
标签:nginx gogs SOURCE jenkins DOCKER Docker docker

jenkins + gogs + docker + nginx 完成自动化部署

app安装部署

1.docker-compose配置文件

version: '3'
services:
  nginx:
    image: nginx:latest
    ports:
      - "80:80"
    volumes:
      - ./nginx.conf:/etc/nginx/nginx.conf
    depends_on:
      - jenkins
      - gogs
    restart: unless-stopped
  dind:
    image: docker:dind
    container_name: dind
    environment:
      - DOCKER_TLS_CERTDIR= # 禁用 TLS,以简化配置
      - DOCKER_OPTS="--insecure-registry registry:5000"
    privileged: true        # 允许 DinD 运行特权容器
    volumes:
      - /etc/docker/daemon.json:/etc/docker/daemon.json
  gogs:
    image: gogs/gogs
    container_name: gogs
    ports:
      - "3000:3000" # HTTP service for Gogs
    environment:    
      - ROOT_URL=http://localhost/gogs/
      - APP_NAME=Gogs
      - TZ=Asia/Shanghai # 设置时区, 根据需要调整
    volumes:
      - gogs_data:/data # 数据卷映射, 请根据实际情况修改路径
    restart: unless-stopped

  jenkins:
    image: 'jenkins/jenkins:lts'
    ports:
      - '8080:8080'
    environment:
      - TZ=Asia/Shanghai # 设置时区, 根据需要调整
      - JENKINS_OPTS=--prefix=/jenkins
      - DOCKER_HOST=tcp://dind:2375 # 指定 Jenkins 使用的 Docker 主机
    volumes:
      - jenkins_home:/var/jenkins_home
      - /usr/bin/docker:/usr/bin/docker  
    restart: unless-stopped  # 容器开机自启动
    depends_on:
      - dind
  registry:
    image: registry:2
    ports:
      - "5000:5000"
    volumes:
      - registry_data:/var/lib/registry

networks:
  deploy_net:
    driver: bridge
volumes: 
  gogs_data:
    driver: local
  jenkins_home:
    driver: local
  registry_data:
    driver: local

2.nginx配置文件

events { }

http {
    upstream gogs {
        server gogs:3000;
    }

    upstream jenkins {
        server jenkins:8080;
    }

    server {
        listen 80;

        location /gogs/ {
            proxy_pass http://gogs/gogs/;
            rewrite ^/gogs(.*)$ $1 break;
            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;
            # 修改HTML响应中的相对路径以适应新的URL路径
            sub_filter 'href="/' 'href="/gogs/';
            sub_filter 'src="/' 'src="/gogs/';
            sub_filter_once off;
        }


        location /jenkins/ {
            proxy_pass http://jenkins/jenkins/; # 添加前缀
            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;
        }
    }
}

自动化流程

1.创建一个git仓库

1.创建一个git仓库,新建一个分支
2.编写Jenkinsfile 在根目录,如修改,怎幺在jenkins中指定路径
pipeline {
    agent any
    environment {
        // 定义源Docker镜像的名称和标签(例如来自Docker Hub)
        SOURCE_DOCKER_REGISTRY = 'docker.1ms.run' // 私有仓库地址
        SOURCE_DOCKER_IMAGE = 'nginx'
        SOURCE_DOCKER_TAG = 'latest'
      
        // 定义目标Docker镜像的名称和标签(在你的私有仓库中)
        TARGET_DOCKER_IMAGE = 'my-nginx'
        TARGET_DOCKER_TAG = 'latest'
      
        // 定义私有Docker仓库的URL
        PRIVATE_DOCKER_REGISTRY = 'registry:5000'
    }
    stages {
        stage('Print Hello World') {
            steps {
                echo 'Hello World 你好世界'
            }
        }
        stage('Initialize') {
            steps {
                script {
                    // 检查 Docker 版本
                    sh 'docker --version'
                }
            }}
        stage('Pull and Tag Docker Image1') {
            steps {
                script {
                    try {
                        // 使用Docker Pipeline插件拉取公共Docker仓库中的镜像
                        docker.image("${env.SOURCE_DOCKER_REGISTRY}/${SOURCE_DOCKER_IMAGE}:${SOURCE_DOCKER_TAG}").pull()
                      
                        // 给镜像打上私有仓库的标签
                        // docker.image("${SOURCE_DOCKER_IMAGE}:${SOURCE_DOCKER_TAG}").tag("${PRIVATE_DOCKER_REGISTRY}/${TARGET_DOCKER_IMAGE}:${TARGET_DOCKER_TAG}")
                          sh "docker tag ${SOURCE_DOCKER_REGISTRY}/${SOURCE_DOCKER_IMAGE}:${SOURCE_DOCKER_TAG} ${PRIVATE_DOCKER_REGISTRY}/${TARGET_DOCKER_IMAGE}:${TARGET_DOCKER_TAG}"
                        echo "Successfully tagged ${SOURCE_DOCKER_IMAGE}:${SOURCE_DOCKER_TAG} as ${PRIVATE_DOCKER_REGISTRY}/${TARGET_DOCKER_IMAGE}:${TARGET_DOCKER_TAG}"
                        echo "Image pulled and tagged successfully."
                    } catch (err) {
                        echo "An error occurred during pull and tag operations: ${err.message}"
                        throw err
                    }
                }
            }
        }
      
        stage('Push Docker Image1') {
            steps {
                script {
                    try {
                        // 推送Docker镜像到私有仓库
                        docker.withRegistry("http://${PRIVATE_DOCKER_REGISTRY}", '') {
                            docker.image("${PRIVATE_DOCKER_REGISTRY}/${TARGET_DOCKER_IMAGE}:${TARGET_DOCKER_TAG}").push()
                        }
                        echo "Image pushed successfully."
                    } catch (err) {
                        echo "An error occurred during push operation: ${err.message}"
                        throw err
                    }
                }
            }
        }
    }
}

2.配置jenkins自动化

1.登录jenkins - 在初始化阶段,可以安装一些默认的插件
http://localhost/jenkins/
2.下载基本所需的插件
Dashboard -> Manage Jenkins ->Plugins -> available plugins
Docker Pipeline /  Docker plugin / Git plugin / Pipeline: Groovy
3.构建一个自动化任务
Dashboar -> New Item -> name + pipeline -> configure + Pipeline + Pipeline script from SCM
指定git + 添加git仓库的地址 + 添加凭证(用户密码 / ssh密钥对)指定分支
4.在git仓库的指定分支中编写jenkinsfile
5.执行
Dashboar ->name -> Build Now

标签:nginx,gogs,SOURCE,jenkins,DOCKER,Docker,docker
From: https://www.cnblogs.com/wykang/p/18679536

相关文章

  • 利用坦克PWA3快速为应用配置域名:以Gogs为例
    全文概述本文介绍了如何利用坦克PWA3平台快速为Gogs应用配置域名的过程。随着互联网技术的发展,自托管Git服务变得越来越受欢迎,其中Gogs凭借其轻量级和易于安装的特点受到众多开发者的青睐。为提高用户体验,为应用配置一个易记且专业的域名至关重要。文中详细阐述了在坦克PWA3平台......
  • Nginx负载均衡
    一、介绍NGINX是一个异步框架的Web服务器,也可以用作反向代理,负载平衡器和HTTP缓存。正向代理即是客户端代理,代理客户端,服务端不知道实际发起请求的客户端反向代理即是服务端代理,代理服务端,客户端不知道实际提供服务的服务端以代理服务器来接受internet上......
  • Nginx proxy_pass 的一个注意点
    原文:Nginx中proxy_pass的作用以及注意事项格式proxy_pass格式:proxy_passURL。proxy_passhttp://www.xxx.com/;proxy_passhttp://192.168.200.101:8080/uri;proxy_passunix:/tmp/www.sock;注意假设Nginx服务器的域名为www.xxx.com,后端服务器为192.168.1.10。......
  • nginx适配Overlay以及测试工具
    本文分享自天翼云开发者社区《nginx适配Overlay以及测试工具》,作者:pan Overlay与Underlay介绍Overlay网络和Underlay网络是一组相对概念,Overlay网络是建立在Underlay网络上的逻辑网络。而Overlay网络是通过网络虚拟化技术,在同一张Underlay网络上构建出的一张或者多张虚拟的逻......
  • Docker 安装 Jenkins-jdk17
    目录Jenkins安装拉取Jenkins镜像创建Jenkins工作目录创建容器将Jenkins端口添加到防火墙。配置镜像加速登录初始化Jenkins配置Jenkins配置JDK安装对应的插件MavenIntegration、DockerPipeline、dockerApI、docker、dockercommons配置对应的git和maven配置git......
  • Docker 安装 Jenkins
    Jenkins安装拉取Jenkins镜像dockerpulljenkinsci/blueoceandockerpulljenkinsci/blueocean:1.25.3创建Jenkins工作目录将容器内目录挂载到此目录上,这样我们可以在宿主机上对文件的修改同步到容器内。mkdir-p/mydata/jenkins/jenkins_homemkdir-p/mydata/jenk......
  • nginxUI 安装及学习
    https://www.nginxwebui.cn/功能说明本项目可以使用WebUI配置nginx的各项功能,包括http协议转发,tcp协议转发,反向代理,负载均衡,ssl证书自动申请、续签、配置等,最终生成nginx.conf文件并覆盖nginx的默认配置文件,完成nginx的最终功能配置.本项目可管理多个nginx服务器......
  • 使用Nginx实现前端映射到公网IP后端内网不映射公网.250115
    一、场景:系统移动端需要映射到公网,但是后端地址不能映射出去qbpm.xxxx.cn系统解析内网IPqmbpm.xxxx.cn移动端解析公网IP二、思路:移动端前端公网端口放出80443端口移动端后端映射到内网后端地址qbpm.xxxx.cn:8443三、解决方法:vimnginx.confserver{listen......
  • Nginx+keepalived 双机热备(主从模式)
    负载均衡技术对于一个网站尤其是大型网站的web服务器集群来说是至关重要的!做好负载均衡架构,可以实现故障转移和高可用环境,避免单点故障,保证网站健康持续运行。关于负载均衡介绍,可以参考:linux负载均衡总结性说明(四层负载/七层负载)由于业务扩展,网站的访问量不断加大,负载越来越高。......
  • jenkins集成多版本maven打包
    默认版本maven和jdk                             mvn高版本部署      1.用低版本的mvn和jdk编译高版本项目的时候提示错误                2.查看项目的pom.xml文件查看项......