Jenkins

  • Jenkins:

    • 开源软件我的项目
    • 基于Java开发的一种继续集成工具
    • 用于监控继续反复的工作
    • 旨在提供一个凋谢易用的软件平台, 便于软件的继续集成

      基于Docker装置Jenkins

      与继续集成中的GitLab Runner应该散布在不同的服务器上

  • 创立工作目录: /usr/local/docker/jenkins
  • 因为要在docker-compose.yml中应用volumes创立数据卷,执行命令赋予Docker数据卷权限:

    chown -R 1000 /usr/local/docker/jenkins/data
  • 在/usr/local/docker/jenkins创立docker-compose.yml

    version: '3.1'services: jenkins:restart: alwaysimage: jenkinscontainer_name: jenkinsports:# 公布端口- 8080:8080# 基于JNLP的Jenkins代理通过TCP端口50000与Jenkins master进行通信- 50000:50000environment: TZ: Asia/shanghaivolumes: - ./data:/var/jenkins_home 
  • 执行docker-compose.yml文件启动Jenkins:

    docker-compose up -d
  • 解锁Jenkins: Jenkins第一次启动时须要输出初始密码解锁装置流程,应用命令查看初始密码

    docker logs jenkins
  • 应用自定义插件的形式装置Jenkins:

    Dashboard ViewPublish Over SSHExtend Choice Parameter也能够在Jenkins运行界面中的Manage Jekins中的Manage Plugins自定义下载安装

    配置Jenkins

    配置JDK&Maven

  • 上传JDK和Maven的tar包到服务器(容器的数据卷目录)
  • Manage Jekins -> Global Tool Configuration
  • 装置JDK,==留神:== JAVA_HOME的门路是==宿主机==目录:(宿主机是绝对宿体而言的)

    /var/jenkins_home/jdk1.8.0_152
  • 装置Maven,==留神:== MAVEN_HOME的门路是==宿主机==目录:(宿主机是绝对宿体而言的)

    /var/jenkins_home/apache-maven-3.5.3

    装置动静参数插件(Extend Choice Parameter)

  • 目标是不便在做我的项目构建时依照版本进行构建
  • 反对一键回滚

    应用Jenkins实现继续交付

  • Jenkins继续交付流程与GitLab Runner继续集成流程相似,只是GitLab Runner默认曾经配置好Git,Jenkins须要配置多一个GitLab的SSH登录
  • Jenkins继续交付流程:

    • 拉取代码
    • 打包构建
    • 上传镜像
    • 运行容器
    • 保护清理

      配置Jenkins的GitLab SSH免密登录

  • 交互式进入Jenkins容器

    docker exec -it jenkins /bin/bash
  • 生成 SSH KEY

    ssh-keygen -t rsa -C "email@example.com"
  • 查看公钥

    cat /var/jenkins_home/.ssh/id_rsa.pub
  • 复制公钥到GitLab
  • 克隆我的项目获取到known_hosts文件

    配置Publish Over SSH

    在Jenkins治理页面中零碎设置减少SSH Server配置

  • Name

    测试环境-192.168.32.255
  • Hostname

    192.168.32.255
  • Username

    root
  • Remote Directory(宿主机中可操作的目录)

    /usr/local/jenkins
  • 高级:Password

    123456
  • 高级:Port

    22
  • 高级:Timeout(ms)

    300000

    继续交付依赖治理我的项目

    第一步是实现所有我的项目的父工程依赖我的项目的继续交付

  • 我的项目创立标签: 在GitLab中给我的项目创立标签(版本号)
  • 创立Maven Project: 在Jenkins中新建一个基于Maven的工作
  • 配置Maven Project: 配置第一次构建初始化

    • General: 抛弃旧的构建
    • 源码治理: Git

      • Repository URL: ssh://git@192.168.32.255:8000/myshop/myshop-dependencies.git
      • Branches to build: */master
  • 第二次配置Maven Project开始应用

    • General: 参数化构建过程

      • Extended Choice Parameter:

        • name: RELEASE_VERSION
        • Basic Parameter Types: Parameter Type
      • Choose Source for Value:

        • Groovy Script

          def var_key=['bash','-C','cd/var/jenkins_home/workspace/myshop-dependencies;git pull >/dev/null;git remote prune origin>/dev/null;git tag -l|sort -r |head -10']var_key.excute().text.tokenize('\n')
    • 源码治理: none
    • Post Steps: Add post-build step

      • Excute shell

        echo $RELEASE_VERSIONcd /var/jenkins_home/workspace/myshop-depedenciesgit checkout $RELEASE_VERSIONgit pull origin $RELEASE_VERSIONmvn clean package
    • Add post-build step: Send files or execute commands over SSH

      • SSH Publishers:

        • SSH Server:

          • name: 测试环境-192.168.32.255
          • Transfers:

            • Source files: /*.jar, docker/ (近程传送文件)
            • (Remove prefix): target(删除近程传送过程中前缀为target的文件,只实用于在上传过程中删除,不会删除曾经上传胜利到近程服务器上的文件)
            • Remote Directory: myshop-service-user-provider(近程创立目录,并把文件近程传送到此目录中)
            • Exec command (在近程服务器进行命令操作:进入provider目录,拷贝我的项目jar包到docker目录,进入docker目录,构建我的项目jar包的镜像,上传镜像,进行容器,启动容器,清理虚悬镜像)

              cd /usr/local/jenkins/myshop-service-user-providercp target/myshop-service-user-provider-1.0.0-SNAPSHOT.jar dockercd dockerdocker build -t 192.168.32.133:5000/myshop-service-user-provider:v1.0.0docker push 192.168.32.133:5000/myshop-service-user-provider:v1.0.0docker-compose downdocker-compose up -ddocker image prune -f
  • 保留
  • Build with Parameters