美文网首页Java
docker : Jenkins 拉取 Gitee 代码,构建镜

docker : Jenkins 拉取 Gitee 代码,构建镜

作者: onnoA | 来源:发表于2022-01-10 10:35 被阅读0次

    docker : Jenkins 拉取 Gitee 代码,构建镜像启动并上传私服

    1. 环境准备工作

    # Linux 系统
    root@ubuntu:/usr/local/docker/registry# lsb_release -a
    No LSB modules are available.
    Distributor ID: Ubuntu
    Description:    Ubuntu 18.04.2 LTS
    Release:    18.04
    Codename:   bionic
    
    # docker 版本
    root@ubuntu:/usr/local/docker/registry# docker version
    Client: Docker Engine - Community
     Version:           20.10.12
     API version:       1.41
     Go version:        go1.16.12
     Git commit:        e91ed57
     Built:             Mon Dec 13 11:45:27 2021
     OS/Arch:           linux/amd64
     Context:           default
     Experimental:      true
    
    Server: Docker Engine - Community
     Engine:
      Version:          20.10.12
      API version:      1.41 (minimum version 1.12)
      Go version:       go1.16.12
      Git commit:       459d0df
      Built:            Mon Dec 13 11:43:36 2021
      OS/Arch:          linux/amd64
      Experimental:     false
     containerd:
      Version:          1.4.12
      GitCommit:        7b11cfaabd73bb80907dd23182b9347b4245eb5d
     runc:
      Version:          1.0.2
      GitCommit:        v1.0.2-0-g52b36a2
     docker-init:
      Version:          0.19.0
      GitCommit:        de40ad0
      
      # docker-compose 版本
    root@ubuntu:/usr/local/docker/registry# docker-compose version
    Docker Compose version v2.2.0
    

    2. gitee 创建仓库与项目

    gitee 参考地址: https://gitee.com/onnoA/jenkins_test.git

    2.1. 新建项目

    image-20220110020639051 image-20220110020743571

    2.2. 本地克隆项目,并并将自己准备的测试项目复制进去,并上传 gitee

    image-20220110020911196

    项目创建 docker 目录, docker 目录下新建文件 Dockerfile 、docker-compose.yml

    image-20220110021244088

    Dockerfile

    FROM openjdk:8-jre
    MAINTAINER onnoa <onnoaheng@163.com>
    
    ENV APP_VERSION 1.0.0-SNAPSHOT
    ENV DOCKERIZE_VERSION v0.6.1
    RUN wget https://github.com/jwilder/dockerize/releases/download/$DOCKERIZE_VERSION/dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
        && tar -C /usr/local/bin -xzvf dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz \
        && rm dockerize-linux-amd64-$DOCKERIZE_VERSION.tar.gz
    
    RUN mkdir /app
    
    COPY jenkins_test-$APP_VERSION.jar /app/app.jar
    ENTRYPOINT ["dockerize", "-timeout", "5m", "-wait", "tcp://192.168.40.129:3306", "java", "-Djava.security.egd=file:/dev/./urandom", "-jar", "/app/app.jar"]
    
    EXPOSE 8090
    

    docker-compose.yml

    version: '3.1'
    services:
      jenkins_test:
        image: 192.168.40.129:5000/jenkins_test:v1.0.0
        container_name: jenkins_test
        ports:
          - 8090:8090
    

    2.3. 创建标签

    image-20220110021027903 image-20220110021125758

    3. 基于 docker-compose 安装 registry

    3.1. 新建目录

    mkdir -p /usr/local/docker/registry
    # 进入目录
    cd /usr/local/docker/registry
    

    3.2. 新建 docker-compose.yml 文件

    vi docker-compose.yml
    

    docker-compose.yml 文件内容

    version: '3.1'
    services:
      registry:
        image: registry
        restart: always
        container_name: registry
        ports:
          - 5000:5000
        volumes:
          - /usr/local/docker/registry/data:/var/lib/registry
    

    3.3. 启动 docker-compose.yml

    docker-compose up -d
    

    3.4. 页面访问

    http://ip:5000/v2/
    
    image

    3.5. 配置 docker registry 客户端

    /etc/docker/daemon.json 中增加如下内容(如果文件不存在请新建该文件)

    {
      "registry-mirrors": [
        "https://registry.docker-cn.com"
      ],
      "insecure-registries": [
        "ip:5000"
      ]
    }
    

    <strong style="color:red;"> 注意:该文件必须符合 json 规范,否则 Docker 将不能启动。</strong>

    重新启动服务。

    sudo systemctl daemon-reload
    sudo systemctl restart docker
    

    检查客户端配置是否生效

    docker info
    # 返回以下内容则说明配置生效
    Insecure Registries:
    192.168.40.129:5000
    
    image-20220110015823565

    4. docker 安装 jenkins与配置

    4.1. 基于docker-compose 安装 jenkins

    新建目录

    mkdir -p /usr/local/docker/jenkins
    

    jenkins 目录下新增 docker-compose.yml 文件

    vi docker-compose.yml
    

    docker-compose.yml 文件内容

    version: '3.1'
    services:
      jenkins:
        restart: always
        image: jenkins/jenkins:latest-jdk8
        container_name: jenkins
        ports:
          # 发布端口
          - 8085:8080
          # 基于 JNLP 的 Jenkins 代理通过 TCP 端口 50000 与 Jenkins master 进行通信
          - 50000:50000
        environment:
          TZ: Asia/Shanghai
        volumes:
          - ./data:/var/jenkins_home
    
    

    在jenkins 目录下使用 docker-compose up 命令启动 jenkins。若第一次启动失败。则通过命令修改数据卷权限

    chown -R 1000 /usr/local/docker/jenkins/data
    

    页面访问 jenkins : http://ip:8085

    查看初始密码

    # 第一种查看密码方式
    docker logs jenkins
    # 第二种
    cat /usr/local/docker/jenkins/data/secrets/initialAdminPassword
    

    4.2. jenkins 页面配置

    4.2.1. 插件安装

    选择安装插件:

    image

    需要安装的插件

    Dashboard View
    Publish over SSH
    Maven Integration plugin
    Locale 本地化插件 (显示中文)
    Extended Choice Parameter 动态参数插件(支持一键回滚)
    

    若在线无法安装相应的插件,可选择离线安装的方式, Jenkins 离线插件下载目录

    <strong style="color:red;"> **注意:若选择的插件安装失败,则先进入下一步,创建 jenkins 用户,进入jenkins 页面再进行插件的安装。系统管理 --》插件管理 ,搜索插件进行安装即可。 **</strong>

    4.2.2. 基础配置

    4.2.2.1. 本地化

    中文本地化: 系统管理 -》 系统设置 -》 Locale

    image-20220110011323560
    4.2.2.2. 配置 Public Over SSH

    配置 open ssh: 系统管理 -》 系统设置 -》Publish over SSH (需要安装Publish over SSH插件成功才会有此选项) -》 新增

    image-20220110011845279

    高级 -》 输入服务器密码

    image-20220110012044971

    下拉,点击 Test Connection ,若左边返回成功,则说明能成功连接上该服务器

    [图片上传失败...(image-173e15-1641782109458)]

    4.2.2.3. 安装 jdk 与 maven

    Jenkins 安装 Java 与 Maven

    javamaven 的jar上传到jenkins的宿主机路径:/usr/local/docker/jenkins/data目录。并进行解压。

    解压:

    tar -zxvf xxx.tar.gz
    # 文件分享连接: https://pan.baidu.com/s/1f6dA0jobOY2SIMGy2IHgiA 密码:zhnb 
    
    • 安装 jdk

    系统管理-》global tool configuration(通用工具配置)-》JDK 安装 -》新增jdk

    image-20220110013442683
    • 安装 maven

    系统管理-》global tool configuration(通用工具配置)-》JDK 安装 -》新增 maven

    image-20220110013500408
    4.2.2.4. 配置 jenkins 与 gitee 的免密登录

    配置 jenkins 与 gitee 免密登录

    • 交互式进入 Jenkins 容器
    docker exec -it jenkins /bin/bash
    
    • 生成 SSH KEY
    ssh-keygen -t rsa -C "your_email@example.com"
    
    一直回车...
    
    • 查看公钥
    cat /var/jenkins_home/.ssh/id_rsa.pub
    
    • 复制公钥到 Gitee

    访问 gitee 仓库 -》 头像 -》 设置 -》 SSH公钥

    • 手动克隆一次项目,该步骤的主要作用是为了生成和服务器的验证信息

    克隆之前,交互式进入 jenkins docker exec -it jenkins /bin/bash。 cd 回车,后再 git clone gitee 项目地址, 过程种输入 yes , 此操作是为了拿到 cd .ssh/目录下的known_hosts文件。

    4.2.2.5. jenkins 配置项目(分两次配置项目)
    • jenkins 第一次配置项目

    新建任务 -》构建一个Maven 项目(并输入项目名称: 如 jenkins_test) -》

    image-20220110014141343 image-20220110014209674

    <strong style="color:red;">注意: git 配置的地址需要是配置gitee项目的 ssh 项目地址。</strong>

    image-20220110095709615 image-20220110014309329
    • jenkins 第二次配置
    image-20220110014405712

    Extended Choice Paramter Name: RELEASE_VERSION

    Basic Parameter Types: Single Select

    Choose Source for Value: Groovy Script

    源码管理: 无

    Post Steps: Run regardless of build result

    Execute shell 命令: shell 脚本如下

    Add post-build step: Send files or execute commands over SSH

    SSH Server Name: 选择配置的 Public Over SSH 服务器(即要部署该项目的服务器)

    Transfer Set
    Source files: **/*.jar,docker/**

      Remote directory: jenkins_test(项目名称,主要是当部署项目是,在部署目录 /usr/local/deploy 下能够根据项目名进行区分)
    
      Exec command: linux 执行命令如下
    

    Groovy 脚本

    def ver_keys = [ 'bash', '-c', 'cd /var/jenkins_home/workspace/jenkins_test;git pull>/dev/null; git remote prune origin >/dev/null; git tag -l|sort -r |head -10 ' ]
    ver_keys.execute().text.tokenize('\n')
    

    shell 脚本

    echo $RELEASE_VERSION
    cd /var/jenkins_home/workspace/jenkins_test
    git checkout $RELEASE_VERSION
    git pull origin $RELEASE_VERSION
    mvn clean install
    

    Linux 执行命令

    cd /usr/local/deploy/jenkins_test
    cp target/jenkins_test-1.0.0-SNAPSHOT.jar docker
    cd docker
    docker build -t 192.168.40.129:5000/jenkins_test:v1.0.0 .
    docker push 192.168.40.129:5000/jenkins_test:v1.0.0
    docker-compose down
    docker-compose up -d
    docker image prune -f
    
    image-20220110014449210 image-20220110014513041 image-20220109205123872 image-20220110014841070 image-20220110100357605

    选择前面配置的 Public Over SSH 服务器(即要部署的服务器)

    Exec command

    cd /usr/local/deploy/jenkins_test
    cp target/jenkins_test-1.0.0-SNAPSHOT.jar docker
    cd docker
    docker build -t 192.168.40.129:5000/jenkins_test:v1.0.0 .
    docker push 192.168.40.129:5000/jenkins_test:v1.0.0
    docker-compose down
    docker-compose up -d
    docker image prune -f
    

    进行构建: 点击进入项目 --》 Build with Paramters(参数化构建),我们就可以根据 gitee 项目中配置的标签进行版本发布与回滚。如,我现在有 v1.0.0 与 v1.0.1 两个版本,当 v1.0.1 有问题时,我可以回滚到 v1.0.0 版本

    image-20220109205438120 image-20220109205452480 image-20220109205516987 image-20220110103153864

    相关文章

      网友评论

        本文标题:docker : Jenkins 拉取 Gitee 代码,构建镜

        本文链接:https://www.haomeiwen.com/subject/jbrmcrtx.html