• 使用ansible剧本批量部署jdk+tomcat+jenkins+nginx,实现访问nginx就能访问到jenkins服务


    关注 码龄 粉丝数 原力等级 -- 被采纳 被点赞 采纳率 m0_61806533 2024-03-29 19:30 采纳率: 0% 浏览 8 首页/ 运维 / 使用ansible剧本批量部署jdk+tomcat+jenkins+nginx,实现访问nginx就能访问到jenkins服务 jenkinsnginx运维 使用ansible剧本批量部署jdk+tomcat+jenkins+nginx,实现访问nginx就能访问到jenkins服务,这个怎么做呢 收起 写回答 好问题 0 提建议 追加酬金 关注问题 微信扫一扫 点击复制链接 分享 邀请回答 编辑 收藏 删除 结题 收藏 举报 追加酬金 (90%的用户在追加酬金后获得了解决方案) 当前问题酬金 ¥ 0 (可追加 ¥500) ¥ 15¥ 20¥ 50¥ 100¥ 200 支付方式 扫码支付 二维码出错 点击刷新 支付金额 15 元 提供问题酬金的用户不参与问题酬金结算和分配 支付即为同意 《付费问题酬金结算规则》 结题 再想想 删除 再等等

    3条回答 默认 最新

    • 专家-赤兔[在线] 全栈领域优质创作者 2024-03-29 19:30
      关注

      引自免费微信小程序:皆我百晓生

      在Ansible中,你可以通过编写一个deploy_jdk_tomcat_jenkins nginx playbook来批量部署JDK、Tomcat、Jenkins和Nginx服务器,并且确保只有特定的URL(通常是http://jenkins/service)可以连接到Nginx,其他URL都不能访问Jenkins服务。以下是详细的步骤:

      1. 设置基础环境

        • 安装必要的依赖:确保你的环境中已经安装了以下 Ansible 库和模块:
          pip install ansible-roles-jdk tomcat django django-napoleon django-celery
          
      2. 创建deploy.yml playbook文件

        • 首先,创建一个 deploy.yml 文件,内容如下:
        ---
        hosts: localhost
        tasks:
          - name: Deploy JDK
            roles:
              - jdk
              - jdk_apt
              - jdk_docker
        
          - name: Deploy Tomcat
            roles:
              - tomcat
              - tomcat_apt
              - tomcat_docker
        
          - name: Deploy Jenkins
            roles:
              - jenkins
              - jenkins_apt
              - jenkins_docker
        
          - name: Deploy Nginx
            roles:
              - nginx
              - nginx_apt
              - nginx_docker
        
          - name: Deploy Service URLs
            tasks:
              - name: Configure service URL patterns for JENKINS
                when: condition == 'JENKINS_URL' == 'http://jenkins/service'
                uses: playbooks/jenkins/_tasks/deploy_jenkins.yml
                with:
                  url_pattern: http://{jenkins_container_ip}/service/{service_name}
        
          - name: Configure service URL patterns for NGINX
                when: condition == 'NGINX_URL' == 'http://jenkins/service'
                uses: playbooks/nginx/_tasks/deploy_nginx.yml
                with:
                  url_pattern: http://{jenkins_container_ip}/service/{service_name}
        
        • deploy.yml 中,定义了四个任务:jdk, tomcat, jenkins, 和 nginx
        • jdk 任务将所有配置为运行Java的Docker容器部署到本地主机上。
        • tomcat 任务将所有的Apache Tomcat镜像部署到本地主机上,并进行相应配置。
        • jenkins 任务将所有的Jenkins实例和Web应用部署到本地主机上。
        • nginx 任务将所有的Nginx镜像部署到本地主机上,并进行相应配置,其中定义了一个URL映射规则,当 JENKINS_URLNGINX_URLhttp://jenkins/service 时,只有 http://{jenkins_container_ip}/service/{service_name} 这个URL可以访问到 Jenkins 服务。
      3. 构建 Docker 容器

        • 使用 docker-compose up 命令构建每个容器项目。例如,如果你有 jdk 的容器项目结构如下:

          └── jdk
            ├── .dockerignore
            ├── build
            │   ├── context
            │   └── dockerfile
            └── spec
              ├── main
              ├── tags
              └── volumes
                  ├── etc
                  ├── lib
                  └── tmp
            └── docker-compose.yml
          
        • /etc/hosts 文件中的内容替换为你想要作为主机名的服务器地址。

        • 编写 docker-compose.yml 文件,内容如下:

          version: '3'
          services:
            jdk:
              image: yourjdk_image
              container_name: jdk
              ports:
                - "8081/TCP:8081"
              environment:
                - JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-amd64
              volumes:
                - /etc/hosts:/etc/hosts
          
            tomcat:
              image: tomcat:latest
              container_name: tomcat
              ports:
                - "8081/TCP:8081"
              environment:
                - TomcatHome=/opt/tomcat
              volumes:
                - ./conf:/opt/tomcat/conf
              expose:
                - "8081/TCP"
          
            jenkins:
              image: yourjenkins_image
              container_name: jenkins
              volumes:
                - /var/run/docker.sock:/var/run/docker.sock
              environment:
                - HBASE_JAVA_OPTS=-XX:+UseSun始态互斥锁
              expose:
                - "8080/TCP"
          
            nginx:
              image: nginx:latest
              container_name: nginx
              volumes:
                - ./data:/var/www/html
              expose:
                - "80/TCP:80"
              depends_on:
                - jenkins
                - tomcat
          
        • 使用 docker-compose build 命令构建每个容器项目,并将其复制到相应的目录中。

        • 使用 docker-compose up 命令启动各个容器项目,注意要根据项目的依赖关系和实际情况对它们进行配置。

        • 当全部容器项目成功启动后,你应该可以在终端中查看每个容器的服务状态,如 jdk 可以通过 telnet 或者 curl 工具直接访问,而 tomcatjenkins 的端口也可以正常访问。

      4. 测试服务运行情况

        • 使用 docker ps 或者 docker-compose ps 命令查看容器的状态,确认它们都已经成功启动并监听到了相应的端口。
        • 在浏览器中输入 http://localhost:8081 来检查对应的端口是否能打开。通常情况下,新创建的容器应该会被重启,所以如果能够访问预期的服务,则说明所有的服务都已正确部署并进行了网络通信。
      5. 测试 JENKINS_URLNGINX_URL 端口映射规则

        • 使用浏览器(如 Chrome、Firefox)访问 http://localhost:8081/service 来检查 JENKINS_URL 是否正确指向 http://jenkins/service,同时验证 NGINX_URL 是否也能正确指向 http://jenkins/service
        • 如果所有端口都能够正确转发请求,那么整个场景下的需求就得到了满足。
      6. 添加安全性

        • 对于更复杂的逻辑,可能需要加入防火墙策略来限制对外部资源的访问权限。这可以通过在 nginxjenkins 中添加HTTP_PROXYHTTPS_PROXY参数来实现。
        • 根据实际环境,可能还需要添加额外的安全组规则,以便外部用户只能访问指定的主机IP范围内的资源。
      7. 维护与更新

        • 在部署过程中,定期监控容器的健康状况,确保它们在后台持续运行,且不会因为重启或升级而导致服务不可用。
        • 更新和修复可能会导致服务出现问题的库或框架版本。
        • 考虑部署到多台或多可用的服务器集群,以进一步提高服务的可靠性。

      以上就是在 Ansible 中批量部署 JDK、Tomcat、Jenkins 和 Nginx 服务器并实现访问 Jenkins 服务的方案。由于 Ansible 模块的具体实现细节可能因版本不同有所差异,因此这里提供的是一个基本示例。在实际应用中,你需要根据你的具体需求和部署环境来进行调整和优化。

      展开全部

      评论 编辑记录
    • 码农阿豪 Java领域优质创作者 2024-03-29 19:30
      关注
      让阿豪来帮你解答,本回答参考chatgpt3.5编写提供,如果还有疑问可以评论或留言
      一、前置条件: 1、已安装ansible 2、已有jdk、tomcat、jenkins、nginx的安装包和配置文件 二、步骤: 1、编写hosts文件,指定需要部署的服务器 示例:
      [tomcat_servers]
      tomcat01 ansible_host=192.168.1.101
      tomcat02 ansible_host=192.168.1.102
      [jenkins_servers]
      jenkins01 ansible_host=192.168.1.103
      [nginx_servers]
      nginx01 ansible_host=192.168.1.104
      

      2、编写ansible剧本(playbook),安装并配置jdk、tomcat、jenkins、nginx 示例:

      - hosts: tomcat_servers
        vars:
          jdk_install_path: "/usr/local/jdk"  # jdk安装路径
          tomcat_install_path: "/usr/local/tomcat"  # tomcat安装路径
          jenkins_war_package: "/tmp/jenkins.war"  # jenkins war包路径
        tasks:
        - name: install jdk
          become: true
          unarchive:
            src: "/tmp/jdk.tar.gz"
            dest: "{{ jdk_install_path }}"
            remote_src: true
            creates: "{{ jdk_install_path }}/bin/java"
        - name: install tomcat
          become: true
          unarchive:
            src: "/tmp/tomcat.tar.gz"
            dest: "{{ tomcat_install_path }}"
            remote_src: true
            creates: "{{ tomcat_install_path }}/bin/startup.sh"
        - name: deploy jenkins
          become: true
          copy:
            src: "{{ jenkins_war_package }}"
            dest: "{{ tomcat_install_path }}/webapps/jenkins.war"
            mode: '0644'
      - hosts: jenkins_servers
        vars:
          jenkins_home: "/var/lib/jenkins"  # jenkins home路径
        tasks:
        - name: install jenkins dependencies
          become: true
          apt:
            name:
            - openjdk-11-jre-headless
            - git
            - wget
            - curl
            - unzip
         
        - name: set jenkins_home directory permissions
          become: true
          file:
            path: "{{ jenkins_home }}"
            state: directory
            owner: jenkins
            group: jenkins
            mode: '0755'
      - hosts: nginx_servers
        vars:
          nginx_conf_file_path: "/etc/nginx/conf.d/jenkins.conf"  # nginx配置文件路径
        tasks:
        - name: install nginx
          become: true
          apt:
            name: nginx 
        - name: configure nginx
          become: true
          template:
            src: jenkins.conf.j2
            dest: "{{ nginx_conf_file_path }}"
          
        - name: reload nginx
          become: true
          service:
            name: nginx
            state: reloaded
      

      3、在剧本目录下创建templates文件夹,编写nginx配置文件模板,示例:

      upstream jenkins {
        server 192.168.1.103:8080;
      }
      server {
        listen 80;
        server_name jenkins.example.com;
        access_log /var/log/nginx/jenkins.access.log;
        error_log /var/log/nginx/jenkins.error.log;
        location / {
          proxy_pass http://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;
        }
      }
      

      四、运行ansible剧本 执行以下命令:

      ansible-playbook -i hosts deploy.yml
      

      五、测试 通过浏览器访问nginx服务器的IP地址,应该能够看到jenkins的登录页面。 六、参考链接 1、Ansible:http://docs.ansible.com/ 2、nginx:http://wiki.nginx.org/Main 3、Jenkins:https://jenkins.io/

      展开全部

      评论
    • CSDN-Ada助手 CSDN-AI 官方账号 2024-03-29 22:04
      关注

      【相关推荐】



      • 这篇博客: jenkins + nginx 前端自动化部署项目中的 2、创建jenkins任务 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:

        jenkins首页,左上角选择新建item,
        在这里插入图片描述
        输入任务名称,建议用项目名+api服务器环境名,选择freestyle project,确定,首页就会出现刚创建的任务。


      如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^
      评论
    编辑
    预览

    报告相同问题?

  • 相关阅读:
    创建型设计模式 单例 工厂模式 看这一篇就够了
    机器视觉双目测宽仪 高温钢板实时无滞后检测
    hive rlike
    ASEMI快恢复二极管ES8JC参数,ES8JC规格,ES8JC封装
    【飞控开发基础教程7】疯壳·开源编队无人机-SPI(气压计数据获取)
    编程技巧│高级 markdown 编辑器的惊艳语法
    SpringBoot2.0(mybatis-plus初始使用)
    ios上传图片旋转90度的解决办法 - nextcloud
    外包干了5天,技术明显退步。。。。。
    (四)RabbitMQ安装
  • 原文地址:https://ask.csdn.net/questions/8081134