zoukankan      html  css  js  c++  java
  • 基于docker部署jenkins

    1. 拉镜像

    和其他的部署的镜像的方式一样,通常是直接使用docker search jenkins
    然后直接docker pull jenkins
    此时,在安装插件的时候发现插件都安装失败,提示jenkins版本太低
    正确的安装方式是pull的时候直接带上版本号,使用docker pull jenkins/jenkins:lts

    2. 部署jenkins

    • 默认使用的端口号是808050000
    • 默认数据目录为:/var/jenkins_home需要映射出来持久化
    • 如果需要把jenkins单独映射一级目录,则启动时添加:JENKINS_OPTS: '--prefix=/jenkins'
    • 修改时区问题,则启动时添加:JAVA_OPTS=-Duser.timezone=Asia/Shanghai

    因此使用docker部署的话,可以执行以下脚本:

    docker run -d --name jenkins -p 8080:8080 -p 50000:50000 -v /jenkins_data/:/var/jenkins_home -e JENKINS_OPTS="--prefix=/jenkins" JAVA_OPTS=-Duser.timezone=Asia/Shanghai
    

    使用docker-compose时,xml为:

    jenkins:
      image: docker.io/jenkins/jenkins:lts
      ports:
        - 8080:8080
        - 50000:50000
      restart: always
      volumes:
        - /jenkins_data/:/var/jenkins_home/
        - /usr/share/zoneinfo/Asia/Shanghai:/etc/localtime
      environment:
        JENKINS_OPTS: '--prefix=/jenkins'
        JAVA_OPTS: '-Duser.timezone=Asia/Shanghai'
    

    3. 配置nginx转发

    配置转发时,最好是把jenkins目录单独映射出来,转发时需要带上实际的请求头信息,不然会报脚本错误:

    Mixed Content: The page at ‘https://XXX’ was loaded over HTTPS, but requested an insecure
    

    nginx配置为:

    location /jenkins/ {
          proxy_pass http://jenkins:8080/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;
      }
    

    配置完成后基本上就可以访问了

    4. 插件选择

    如果是第一次用,在部署时选择默认即可,后续在按需选择
    常用的插件有以下几种:

    • Git plugin
    • Gitee Plugin #码云插件
    • GitHub plugin
    • Maven Integration plugin
    • Publish Over SSH
    • Pipeline
    • NodeJS Plugin
    • Parameterized Trigger plugin #传参触发另一个构造工程插件
    • FindBugs
    • Checkstyle
    • NodeJS Plugin
      ...

    5. 构建时注意事项

    • 默认安装后无法找到maven或者版本不对
      jenkins - 系统管理 - 全局工具配置 - maven - 新增maven安装新的maven,在构建时使用新配置的maven即可

    • gitee插件配置
      Gitee 帮助中心 / 第三方服务集成 / 帮助详情 / Jenkins 插件

    • 如何把构建的结果拷贝到目标机器
      如果是拷贝到同一个宿主机的环境,则可以把宿主机的目录也映射到jenkins中
      如果是网络可联通的环境,则使用Publish Over SSH插件,通过插件或者shell的scp拷贝过去

    • 使用cnpm代替npm
      安装好nodejs插件后,使用shell脚本进行构建,在执行的脚本前面加上如下,就可以直接使用cnpm了:

    alias cnpm="npm --registry=https://registry.npm.taobao.org 
    --cache=$HOME/.npm/.cache/cnpm 
    --disturl=https://npm.taobao.org/dist 
    --userconfig=$HOME/.cnpmrc"
    
    cnpm install 
    cnpm run build
    

    6. 可能会出现的权限问题

    有部分同学会出现权限问题,错误日志片段如下:

    java.io.IOException: Permission denied
            at java.io.UnixFileSystem.createFileExclusively(Native Method)
            at java.io.File.createTempFile(File.java:2024)
            at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:142)
    Caused: java.io.IOException: Failed to create a temporary file in /var/jenkins_home
            at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:144)
            at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:109)
            at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:84)
            at hudson.util.AtomicFileWriter.<init>(AtomicFileWriter.java:74)
            at hudson.XmlFile.write(XmlFile.java:189)
            at hudson.model.Descriptor.save(Descriptor.java:892)
            at com.gitee.jenkins.connection.GiteeConnection.migrate(GiteeConnection.java:164)
            at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
            at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
            at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
            at java.lang.reflect.Method.invoke(Method.java:498)
            at hudson.init.TaskMethodFinder.invoke(TaskMethodFinder.java:104)
            at hudson.init.TaskMethodFinder$TaskImpl.run(TaskMethodFinder.java:175)
            at org.jvnet.hudson.reactor.Reactor.runTask(Reactor.java:296)
            at jenkins.model.Jenkins$5.runTask(Jenkins.java:1131)
            at org.jvnet.hudson.reactor.Reactor$2.run(Reactor.java:214)
            at org.jvnet.hudson.reactor.Reactor$Node.run(Reactor.java:117)
            at jenkins.security.ImpersonatingExecutorService$1.run(ImpersonatingExecutorService.java:59)
            at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
            at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
            at java.lang.Thread.run(Thread.java:748)
    

    因为docker启动时,默认的用户是jenkins:jenkins,因此赋予权限即可

    • 修改-v映射出来的文件夹权限
    chown -R 1000:1000 /jenkins_data/
    
    • 修改docker-compose.yml配置,添加用户
    services:
        jenkins:
          ...
          ...
          user: root
    
    • 重启即可
  • 相关阅读:
    【转】 springBoot(5)---单元测试,全局异常
    【转】 springBoot(4)---热部署,配置文件使用
    【转】 springBoot(3)---目录结构,文件上传
    【转】 springBoot(2)---快速创建项目,初解jackson
    【转】 springBoot(1)---springboot初步理解
    【转】 SpringBoot+MyBatis+MySQL读写分离
    简单请求 vs 非简单请求
    H5新增的API
    图片
    vue更新dom的diff算法
  • 原文地址:https://www.cnblogs.com/zqyx/p/13725023.html
Copyright © 2011-2022 走看看