• Docker结合jenkins完成快捷打包部署


    关注我,更多精彩文章第一时间推送给你

    Java之康庄大道

    安装jenkins

    我这里选择的是docker方式安装,根据官方建议使用的额镜像是jenkinsci/blueocean

    建议使用的Docker映像是jenkinsci/blueocean image(来自 the Docker Hub repository)。 该镜像包含当前的长期支持 (LTS) 的Jenkins版本 (可以投入使用) ,捆绑了所有Blue Ocean插件和功能。这意味着你不需要单独安装Blue Ocean插件。

    拉取镜像

    docker pull jenkinsci/blueocean
    

    运行镜像

    docker run -d --name jenkins 
    -p 8010:8080 -p 8011:8081 -p 50000:50000 
    -v /home/docker/jenkins/data:/var/jenkins_home 
    --privileged=true --restart=always 
    jenkinsci/blueocean:latest
    

    此时docker ps查看容器运行状况发现一直在重启

    jenkinsci/blueocean   "/sbin/tini -- /usr/…"   20 minutes ago      Restarting (1) 17 seconds ago
    

    查看日志docker logs jenkins 得到

    touch: cannot touch '/var/jenkins_home/copy_reference_file.log': Permission denied
    Can not write to /var/jenkins_home/copy_reference_file.log. Wrong volume permissions?
    

    需要修改下目录权限, 因为当映射本地数据卷时,/home/docker/jenkins/data目录的拥有者为root用户,而容器中jenkins user的uid为1000 执行如下命令即可

    chown -R 1000:1000 /home/docker/jenkins/data
    # 重启jenkins容器
    docker restart jenkins
    

    启动成功之后的配置

    • 访问192.168.16.128:8010,即你的ip + 你docker启动时候映射的端口

    图1

    • docker安装的密码去哪里找呢?

    • 答案是去日志里是最快速的,当然也可以去容器内部docker exec -it 容器id /bin/bash 按照提示地址获取

    # 查看日志
    docker logs jenkins
    # 得到的日志中的密码
    *************************************************************
    *************************************************************
    *************************************************************
    
    Jenkins initial setup is required. An admin user has been created and a password generated.
    Please use the following password to proceed to installation:
    
    8c4bdd47724b4c1b82e726c7bfb62fae
    
    This may also be found at: /var/jenkins_home/secrets/initialAdminPassword
    
    *************************************************************
    *************************************************************
    *************************************************************
    
    • 安装推荐的插件

    图2

    • 如果需要重启则执行
    docker restart jenkins
    

    图3

    配置java和maven

    • 如下图所示:进入到jenkins容器内部查看,已经安装了jdk1.8,所以我们直接找到jdk1.8的地址配置上就行

    图5

    # 进入jenkins容器内部
    docker exec -it jenkins /bin/bash
    # 查看jdk版本
    java -version
    # 查看jdk地址
    echo $JAVA_HOME
    

    图6

    • jdk配置jenkins内部的,maven自动安装,3.6.3即可,之后保存。

    图7

    • 安装这个maven插件

    图8

    • 新建一个maven项目

    图9

    • 配置git地址

    图10

    • 添加构建命令

    图11

    • 这块建议跳过测试阶段,如下配置

    image-20201001132149508

    • 如下脚本:前四个怎么填写,先构建一次,查看控制台输出,时间可能比较久,可以配置一下maven的设置,在全局设置中如下配置:

    image-20201001063900205

    • 注意这里配置的settings.xml就是平时我们配置了阿里镜像源的配置,这里我配置到了容器内的/var/jenkins_home目录中,命令如下
    # 进入容器
    docker exec -it jenkins /bin/bash
    # 进入目录
    cd /var/jenkins_home
    # 新建文件
    vi settings.xml
    # 把配置好阿里镜像源的settings.xml中的内容复制进去
    # :wq保存退出
    

    image-20201001121827492

    • 这块配置如下脚本

    image-20201001122308202

    #!/bin/bash
    # 服务名称
    SERVER_NAME=jenkins_test
    
    # 源jar名称,mvn打包之后,target目录下的jar包名称
    JAR_NAME=jenkins_test-0.0.1-SNAPSHOT
    
    # 源jar路径,打包之后的生成的jar的路径
    JAR_PATH=/var/jenkins_home/workspace/jenkins_test/target
    
    # 打包完成之后,把jar包移动到运行jar包的目录
    JAR_WORK_PATH=/var/jenkins_home/workspace/jenkins_test/target
    
    
    echo "查询进程id -->$SERVER_NAME"
    
    # 获取查询结果以空格为界的第一个字段,即PID端口号
    PID=`ps -ef | grep "$SERVER_NAME" | awk '{print $1}'`
    
    echo "得到进程id:$PID"
    
    echo "结束进程ing..."
    
    for id in $PID
    do
    	kill -9 $id
        echo "killed $id"
    done
    
    # 等待三秒
    echo sleep 3s
    sleep 1
    echo sleep 2s
    sleep 1
    echo sleep 1s
    sleep 1
            
    echo "结束进程完成"
    
    # 复制jar包到执行目录
    echo "复制jar包到执行目录: cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH"
    
    cp $JAR_PATH/$JAR_NAME.jar $JAR_WORK_PATH
    
    echo "复制jar包完成"
    
    cd $JAR_WORK_PATH
    
    # 修改文件权限
    chmod 755 $JAR_NAME.jar
    
    # 后台运行
    BUILD_ID=dontKillMe nohup java -jar $JAR_NAME.jar &
    
    • 之后立即构建,即可成功

    image-20201001100206259

  • 相关阅读:
    Nginx中如何配置中文域名?
    VS2012找不到EF框架实体模型的解决方法
    来自一位家长的电话
    孩子大了真是不好管了
    springboot项目不加端口号也可以访问项目的方法
    分享几个上机案例题
    今晚在学校值班……
    3班的第二次模拟面试
    Sword 09
    Sword 06
  • 原文地址:https://www.cnblogs.com/yunqing/p/13843586.html
Copyright © 2020-2023  润新知