美文网首页docker
Jenkins+Docker实现CI/CD

Jenkins+Docker实现CI/CD

作者: cmazxiaoma | 来源:发表于2019-03-29 00:32 被阅读0次

    看到这一张图,我们就知道践行持续集成(CI)、持续部署(CD),可以简化工作流程,提高工作效率。


    Jenkins+Docker流程标准.png

    docker配置阿里云镜像仓库

    1、阿里云docker仓库
    2、进去注册帐号后,点击自己的管理中心。
    3、在管理中心点击加速器,右边面板会有你的加速地址,右边面板下面有详细设置步骤。
    4、配置docker镜像加速器

    image.png

    maven构建docker镜像

    <plugin>
                    <groupId>com.spotify</groupId>
                    <artifactId>docker-maven-plugin</artifactId>
                    <version>0.4.11</version>
    
                    <configuration>
                        <imageName>${docker.image.prefix}/${project.artifactId}</imageName>
    
                        <imageTags>
                            <imageTag>${project.version}</imageTag>
                            <imageTag>latest</imageTag>
                        </imageTags>
    
                        <dockerDirectory>src/main/docker</dockerDirectory>
    
                        <resources>
                            <resource>
                                <targetPath>/</targetPath>
                                <directory>${project.build.directory}</directory>
                                <include>${project.build.finalName}.jar</include>
                            </resource>
                        </resources>
                    </configuration>
                </plugin>
    

    src/main/docker 目录下新增文件 Dockerfile

    如果是jar包的话

    FROM frolvlad/alpine-oraclejdk8:slim
    MAINTAINER cmazxiaoma
    VOLUME /tmp
    ADD demo-0.0.1-SNAPSHOT.jar demo.jar
    RUN sh -c 'touch /demo.jar'
    ENV JAVA_OPTS=""
    ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -Djava.security.egd=file:/dev/./urandom -jar /demo.jar" ]
    

    如果是war包的话

    from docker.io/tomcat:latest
    maintainer 1363xx39xx@qq.com
    copy demo-0.0.1-SNAPSHOT.war /usr/local/tomcat/webapps/demo.war
    

    创建阿里云docker镜像

    1.创建镜像仓库


    image.png

    2.选择代码源、构建设置、构建规则设置。


    image.png

    3.操作指南


    image.png image.png

    jenkins部署项目

    配置之前先配置好jenkins服务器和应用服务器的密钥认证
    • Jenkins服务器上生成密钥对,使用ssh-keygen -t rsa命令

      image.png
    • 将jenkins服务器的公钥192.168.0.6.pub中的内容复制到应用服务器 的~/.ssh/下的 authorized_keys文件(这里我的jenkins服务器和应用服务器都是192.168.0.6)

    ssh-copy-id -i 192.168.0.6.pub 192.168.0.6
    cd /root/.ssh
    chmod 644 authorized_keys(别写成了664)
    
    • 进入到/etc/ssh/sshd_config配置PermitRootLogin no

    • 在应用服务器上重启 ssh 服务service sshd restart,现在 Jenkins 服务器可免密码直接登陆应用服务器。

    1.关于jenkins的基本操作,可以看这一篇文章Jenkins环境搭建部署web应用

    2.构建触发器,轮询SCM就是查看源码管理的代码有没有更新,如果更新了就去构建,没有更新就不会构建。 H/5 * * * * 代表每5分钟就去查看源码有没有更新

    image.png

    3.设置build

    clean package -Dmaven.test.skip=true docker:build
    
    image.png

    4.设置构建的shell脚本


    image.png

    5.构建脚本如下:

    echo '================开始推送镜像================'
    sudo docker login --username=xx@163.com --password=xx registry.cn-shenzhen.aliyuncs.com
    sudo docker tag cmazxiaoma/demo:0.0.1-SNAPSHOT registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT
    sudo docker push registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT
    echo '================结束推送镜像================'
    echo '================开始远程启动================'
    
    #首先要ssh上去注意这里的<< remotessh,需要做公钥密钥
    ssh root@192.168.0.6 -tt << remotessh       
    
    #从这里开始都是在远程机器上执行命令
    cd /usr/local/aliyun-docker
    
    ./jenkins.sh demo-container
    
    echo '========停止并删除旧的容器成功============='
    
    
    sudo docker login --username=xx@163.com --password=xx registry.cn-shenzhen.aliyuncs.com 
    sudo docker pull registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT
    
    sudo docker run -itd -m 500m -p 9020:9020 --name=demo-container --restart=always registry.cn-shenzhen.aliyuncs.com/cmazxiaoma/demo:0.0.1-SNAPSHOT
    echo "finished!"
    
    #执行完毕,退出远程机器
    exit
    remotessh
    echo '================结束远程启动================'
    

    6.jenkins.sh(记得chmod 777)脚本停掉并删除无用的docker容器

    #!/bin/sh
    sudo docker stop  $(sudo docker ps | grep $1|awk '{print  $1}'|sed 's/%//g')
    sudo docker rm $(sudo docker ps -a | grep $1|awk '{print  $1}'|sed 's/%//g')
    
    

    7.可以通过日志查看构建情况。


    image.png

    8.构建完成后,我们可以在阿里云查看镜像。


    image.png
    1. 访问http://192.168.0.6:9020/jenkins/hello,成功
      image.png

    docker一些有用的命令

    删除无效的none镜像:docker rmi $(docker images -f "dangling=true" -q)

    尾言

    用docker一时爽,一直用docker一直爽。

    相关文章

      网友评论

        本文标题:Jenkins+Docker实现CI/CD

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