zoukankan      html  css  js  c++  java
  • 基于k8s使用helm安装Jenkins

    ## 一:k8s集群的构建

    关于使用kubeadm安装k8s集群可参考我的另一篇文章,https://www.cnblogs.com/skymyyang/p/13279006.html

    ## 二:定义存储类

    由于Jenkins需要持久化数据,这里我们需要定义存储类,来保证数据不会丢失。

    基于NFS定义存储类。

    可参考官方以及官方插件部署的地址

    https://github.com/kubernetes-incubator/external-storage

    ## 三:自定义镜像

    由于我之前使用的是官方镜像,会有很多问题。

    1. 时间不同步,不是中国区的时间。

    2.更新插件失败,即使安装成功,可是无法打开更新插件的界面,卡着不动

    3. 这样的Jenkins 根本没法用

    所以我决定自定义镜像。参考官网的镜像仓库,我们下载下来,修改一下

    官方的镜像地址:https://github.com/jenkinsci/docker

    这里我们将整个仓库都克隆下来。

    git clone https://github.com/jenkinsci/docker.git

    这里我们可以看到很多个Dockerfile。

    这里我们使用Dockerfile-alpine这个文件来构建我们的镜像。

    完整的Dockerfile为:

    FROM openjdk:8-jdk-alpine
    
    ENV LANG=C.UTF-8 
        TZ=Asia/Shanghai
    
    
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone && sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories && apk add --no-cache 
      bash 
      coreutils 
      curl 
      git 
      git-lfs 
      openssh-client 
      tini 
      ttf-dejavu 
      tzdata 
      unzip
    
    ARG user=jenkins
    ARG group=jenkins
    ARG uid=1000
    ARG gid=1000
    ARG http_port=8080
    ARG agent_port=50000
    ARG JENKINS_HOME=/var/jenkins_home
    ARG REF=/usr/share/jenkins/ref
    
    ENV JENKINS_HOME $JENKINS_HOME
    ENV JENKINS_SLAVE_AGENT_PORT ${agent_port}
    ENV REF $REF
    
    # Jenkins is run with user `jenkins`, uid = 1000
    # If you bind mount a volume from the host or a data container,
    # ensure you use the same uid
    RUN mkdir -p $JENKINS_HOME 
      && chown ${uid}:${gid} $JENKINS_HOME 
      && addgroup -g ${gid} ${group} 
      && adduser -h "$JENKINS_HOME" -u ${uid} -G ${group} -s /bin/bash -D ${user}
    
    # Jenkins home directory is a volume, so configuration and build history
    # can be persisted and survive image upgrades
    VOLUME $JENKINS_HOME
    
    # $REF (defaults to `/usr/share/jenkins/ref/`) contains all reference configuration we want
    # to set on a fresh new installation. Use it to bundle additional plugins
    # or config file with your custom jenkins Docker image.
    RUN mkdir -p ${REF}/init.groovy.d
    
    # jenkins version being bundled in this docker image
    ARG JENKINS_VERSION
    ENV JENKINS_VERSION ${JENKINS_VERSION:-2.222.4}
    
    # jenkins.war checksum, download will be validated using it
    ARG JENKINS_SHA=6c95721b90272949ed8802cab8a84d7429306f72b180c5babc33f5b073e1c47c
    
    # Can be used to customize where jenkins.war get downloaded from
    ARG JENKINS_URL=https://mirrors.aliyun.com/jenkins/war-stable/${JENKINS_VERSION}/jenkins.war
    
    # could use ADD but this one does not check Last-Modified header neither does it allow to control checksum
    # see https://github.com/docker/docker/issues/8331
    RUN curl -fsSL ${JENKINS_URL} -o /usr/share/jenkins/jenkins.war 
      && echo "${JENKINS_SHA}  /usr/share/jenkins/jenkins.war" | sha256sum -c -
    
    ENV JENKINS_UC https://updates.jenkins-zh.cn
    ENV JENKINS_UC_EXPERIMENTAL=https://mirrors.tuna.tsinghua.edu.cn/jenkins/updates/experimental
    ENV JENKINS_INCREMENTALS_REPO_MIRROR=https://repo.jenkins-ci.org/incrementals
    RUN chown -R ${user} "$JENKINS_HOME" "$REF"
    
    # for main web interface:
    EXPOSE ${http_port}
    
    # will be used by attached slave agents:
    EXPOSE ${agent_port}
    
    ENV COPY_REFERENCE_FILE_LOG $JENKINS_HOME/copy_reference_file.log
    
    USER ${user}
    
    COPY jenkins-support /usr/local/bin/jenkins-support
    COPY jenkins.sh /usr/local/bin/jenkins.sh
    COPY tini-shim.sh /bin/tini
    ENTRYPOINT ["/sbin/tini", "--", "/usr/local/bin/jenkins.sh"]
    
    # from a derived Dockerfile, can use `RUN plugins.sh active.txt` to setup $REF/plugins from a support bundle
    COPY plugins.sh /usr/local/bin/plugins.sh
    COPY install-plugins.sh /usr/local/bin/install-plugins.sh

    修改完成之后,这里我们将需要的文件拷贝到一个单独的目录下,来构建dcoker镜像。

    mkdir /opt/jenkins-docker
    cp install-plugins.sh  jenkins.sh  jenkins-support  plugins.sh  tini-shim.sh /opt/jenkins-docker
    docker build -t skymyyang/jenkins:v2.222.4 .
    docker push skymyyang/jenkins:v2.222.4

    上传完成之后,我们就可以使用helm指定我们自己的镜像,进行安装了。

    ## 四: 安装

    helm install jenkins stable/jenkins --set master.image=skymyyang/jenkins --set master.tag=v2.222.4 --set master.imagePullPolicy=IfNotPresent --set master.serviceType=NodePort --set master.nodePort=30086 --set persistence.storageClass=managed-nfs-storage

    安装需要等待一会,安装完成之后,默认不需要使用密码即可登录,当然也可以通过kubectl获取对应的密码

    我这里安装在default名称空间下,也可以指定名称空间。这里指定在devops名称空间下。

    helm install jenkins stable/jenkins -n devops --set master.image=skymyyang/jenkins --set master.tag=v2.222.4 --set master.imagePullPolicy=IfNotPresent --set master.serviceType=NodePort --set master.nodePort=30086 --set persistence.storageClass=managed-nfs-storage

    安装完成之后,我们还需要在Jenkins的pvc目录下,进行update配置的更改,方便与我们安装插件。

    来到Jenkins的pv目录下,

    /nfsdata/default-jenkins-pvc-fc7c7c29-d001-467a-8371-54933b371de7

    然后修改hudson.model.UpdateCenter.xml文件,修改为:

    <?xml version='1.1' encoding='UTF-8'?>
    <sites>
      <site>
        <id>default</id>
        <url>https://updates.jenkins-zh.cn/update-center.json</url>
      </site>
    </sites>

    这里使用的Jenkins中国社区源。

    官方地址为:https://github.com/jenkins-zh/jenkins-formulas

    这里可以找到此xml文件,以及证书文件。

    然后进行证书文件的修改。

    cd war/WEB-INF/update-center-rootCAs/
    
    #然后把当前目录下的证书都给删除掉,重新创建证书
    cat mirror-adapter.crt 
    -----BEGIN CERTIFICATE-----
    MIICcTCCAdoCCQD/jZ7AgrzJKTANBgkqhkiG9w0BAQsFADB9MQswCQYDVQQGEwJD
    TjELMAkGA1UECAwCR0QxCzAJBgNVBAcMAlNaMQ4wDAYDVQQKDAV2aWhvbzEMMAoG
    A1UECwwDZGV2MREwDwYDVQQDDAhkZW1vLmNvbTEjMCEGCSqGSIb3DQEJARYUYWRt
    aW5AamVua2lucy16aC5jb20wHhcNMTkxMTA5MTA0MDA5WhcNMjIxMTA4MTA0MDA5
    WjB9MQswCQYDVQQGEwJDTjELMAkGA1UECAwCR0QxCzAJBgNVBAcMAlNaMQ4wDAYD
    VQQKDAV2aWhvbzEMMAoGA1UECwwDZGV2MREwDwYDVQQDDAhkZW1vLmNvbTEjMCEG
    CSqGSIb3DQEJARYUYWRtaW5AamVua2lucy16aC5jb20wgZ8wDQYJKoZIhvcNAQEB
    BQADgY0AMIGJAoGBAN+6jN8rCIjVkQ0Q7ZbJLk4IdcHor2WdskOQMhlbR0gOyb4g
    RX+CorjDRjDm6mj2OohqlrtRxLGYxBnXFeQGU7wWjQHyfKDghtP51G/672lXFtzB
    KXukHByHjtzrDxAutKTdolyBCuIDDGJmRk+LavIBY3/Lxh6f0ZQSeCSJYiyxAgMB
    AAEwDQYJKoZIhvcNAQELBQADgYEAD92l26PoJcbl9GojK2L3pyOQjeeDm/vV9e3R
    EgwGmoIQzlubM0mjxpCz1J73nesoAcuplTEps/46L7yoMjptCA3TU9FZAHNQ8dbz
    a0vm4CF9841/FIk8tsLtwCT6ivkAi0lXGwhX0FK7FaAyU0nNeo/EPvDwzTim4XDK
    9j1WGpE=
    -----END CERTIFICATE-----

    修改完这两个文件之后,然后看下之前该目录下的文件的所有者权限,然后使用chown命令,重新给对应的文件授权,权限跟之前保持一直,否则又可能导致无法正确读取证书以及配置。

    然后进行Jenkins重启。

    http://192.168.50.101:30086/restart

    点击是,进行重启。

    未完....待续...

  • 相关阅读:
    连接数据库方法
    jdbc加载驱动方法
    MySQL数据库事务隔离级别
    事务和JDBC事务隔离级别
    IO
    java中从键盘输入的三种方法
    Java IO流学习总结八:Commons IO 2.5-IOUtils
    Java IO流学习总结七:Commons IO 2.5-FileUtils
    Java IO流学习总结五:转换流-InputStreamReader、OutputStreamWriter
    Java Code Examples
  • 原文地址:https://www.cnblogs.com/skymyyang/p/13470946.html
Copyright © 2011-2022 走看看