当前位置:   article > 正文

Jenkins+Docker+Gitee实现CI/CD_docker gitee ci

docker gitee ci
  1. 全局说明
  • 使用jenkins + docker + gitee实现自动化部署
  • 安全组开放了8090和9890端口
  1. CI/CD(持续集成/交付)
 传统工作流程:
1.java项目开发
2.提交项目代码到(git或svn)
3.运维拉取项目代码
4.编译项目代码
5.放到服务器上,通过命令启动
6.测试
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
自动化部署流程: 
1.开发人员提交代码到Git版本仓库;
2.git仓库上配置了一个webHook的可以触发Jenkins的构建/Jenkins人工/定时触发项目构建;
3.Jenkins拉取代码、代码编码、打包镜像、推送到镜像仓库;
4.测试机器 pull 新版本的镜像,运行测试上线。
  • 1
  • 2
  • 3
  • 4
  • 5

image
image
2. Jenkins安装

~ > docker run -u root --name jenkins -d -p 8090:8080 -p 52000:50000 -v jenkins-data:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock --restart=always  jenkinsci/blueocean 
~ > docker container ls
CONTAINER ID   IMAGE                 COMMAND                  CREATED              STATUS              PORTS                                              NAMES
5bed5edc1154   jenkinsci/blueocean   "/sbin/tini -- /usr/…"   About a minute ago   Up About a minute   0.0.0.0:8090->8080/tcp, 0.0.0.0:52000->50000/tcp   jenkins
# 查看宿主机存储卷 
~ > docker volume inspect jenkins-data
~ >  docker inspect  jenkins | grep Mounts -A 20

# 查看初始密码
~ > docker exec  -it  jenkins bash
bash-5.1# cat /var/jenkins_home/secrets/initialAdminPassword
# 或者
~ > docker logs jenkins
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

image
image

  1. 初始化
  • url
    • ip:8090
  • 初始密码登录
    image
  • 全局配置
    • git(自动安装)
    # which git
    git
    /usr/bin/git
    
    • 1
    • 2
    • 3
    image
    • maven
      image
  • 系统配置
    • ssh
     ip
     password
    
    • 1
    • 2
    image
  • 安装插件
    • gitee/gitlab
    • Maven Integration plugin
    • Publish Over SSH
  1. 配置
  • 源码管理
    • git仓库地址
    • Credentials
    • 指定分支
  • 构建触发器
    • Gitee/Gitlab webhook
    • 生成webhook密码
  • Build
    • pom.xml
    • clean install -Dmaven.test.skip=true
      image
  • Post Step(Send File…)
    • Run only if build succeeds
    • SSH name
      image
    • Source Files jar包目录,从workspace/hello开始
    • Remove prefix 传到目标目录时,删除jar包路径的前缀
    • Remote directory 远程服务器 目录
    • Exec command 执行的命令
      image
    BUILD_ID=dontKillMe
    cd  /usr/local/hello/
    ./start.sh hello hello.jar
    # ./docker.sh
    
    • 1
    • 2
    • 3
    • 4
    image
  1. 脚本
  • start.sh
    # jar包部署脚本
    #!/bin/bash
    source /etc/profile
    echo '开始执行脚本'
    project=$2
    dir=/usr/local/$1/
    echo "当前jar包:$project"
    cd $dir
    echo "当前目录:$dir"
    pid=`ps -ef | grep $dir$project | grep -v grep | awk '{print $2}'`
    echo "要结束的jar的pid为:$pid"
    if [ -n "$pid" ]
    then
       kill -9 $pid
    fi
    # 绝对路径 jenkins有时候读不到 
    nohup java -jar $dir$project  >/dev/null 2>log &
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
  • docker.sh
    #!/bin/bash
    echo '开始执行脚本'
    # mv hello.jar ../backup/hello.jar.`date +%Y%m%d`  
    echo '删除正在运行的hello服务'
    docker container rm -f hello
    echo '删除hello镜像'
    docker image rm  test/hello
    # mv hello.jar admin.jar     
    echo '构建当前目录下的dockerfile文件'
    docker build -t test/hello .
    echo  '#运行镜像构建容器'
    docker run --name=hello -p 9890:9890 -itd -v /usr/local/hello/logs:/usr/local/logs test/hello
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • Dockerfile
    Dockerfile
    FROM java:8
    WORKDIR /usr/local/hello
    ADD hello.jar hello.jar
    EXPOSE 8090
    ENTRYPOINT java -jar hello.jar
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
  1. 测试
hello > curl http://127.0.0.1:9890/test
hello world
  • 1
  • 2
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/weixin_40725706/article/detail/130700
推荐阅读
相关标签
  

闽ICP备14008679号