docker jenkins gitlab 自动化部署(java python项目)

背景说明:

  • jenkins 放在docker中,单独一台服务器,称发布服务器;
  • python,java等多个项目放在不同的docker中,统一称运行服务器
  • 代码放在gitlab上,python和java 用spring cloud 整合
  • 本地没有docker 私有仓库

    大体结构
    1. 开发人员在gitLab上传代码到分支上
    2. Jenkins 定时/手动获取指定分支源码
    3. java项目需打包,编译,此处用maven,python不需额外操作
    4. Jenkins 将文件传送到运行服务器
    5. Jenkins 执行远程脚本
    6. 邮件通知测试人员部署结果
  1. Docker运行jenkins
    获取jenkins images
    docker pull jenkinsci/jenkins:lts
    运行jenkins 镜像
    sudo docker run -d --name jenkins -p 8099:8080 -p 50000:50000 -v /var/jenkins_home:/var/jenkins_home jenkinsci/jenkins:lts
    jenkins 初始化配置,主要是选择插件,初始化密码在/var/jenkins_home/secrets/initialAdminPassword中,初始化完成之后,生成管理员账号admin 为方便,需修改密码
  2. jenkins 配置
    jdk  maven 配置,进入系统管理-->Global Tool Configuration

    java_home 和maven_home 是jdk 和maven安装绝对路径,要么在运行jenkins的docker中安装jdk 和maven环境,要么jenkins  docker 宿主机上的jdk 和maven文件夹挂载到jenkins  docker上
  3. 邮件通知,运行服务器,gitlab 配置
    进入系统管理-->系统设置,如没有这些配置项,在系统管理-->管理插件下载相关插件
    配置gitlab,gitlab服务器地址在setting-->Account-->Private token

    配置邮件发送服务器

    配置Publish over SSH   运行服务器是密钥文件登陆

    目前为止,jenkins已安装配置完成
  4. 新建job,配置
    配置git地址

    配置定时任务

    java 配置maven 编译打包

    配置执行远程脚本

     
  5. 远程脚本,python shell例子  python不需要重启编译,直接将最新代码copy到docker 挂载的文件夹下,直接生效
    space="python_demo/wuxiaolin"
    space_new="python_demo1"
    cp /home/ubuntu/jenkins/$space/*  /data/work/$space_new/
  6. 远程脚本,java shell例子  思路是将docker 容器停掉,删掉镜像和容器,重新build,重新启动容器,当然此处可以copy jar包,然后重启服务,重新build需借助docker 的dockerfile
    cp /home/ubuntu/jenkins/bondService/bondService.jar  /data/work/service-bond/
    CONTAINER_ID=`docker ps | grep "jenkins-service-bond" | awk '{print $1}'`
    if [ -n "$CONTAINER_ID" ]; then
        docker kill $CONTAINER_ID
    sleep 1
        docker rm $CONTAINER_ID
    else #如果容器启动时失败了,就需要docker ps -a才能找到那个容器
        CONTAINER_ID=`docker ps -a | grep "jenkins-service-bond" | awk '{print $1}'`
        if [ -n "$CONTAINER_ID" ]; then  # 如果是第一次在这台机器上拉取运行容器,那么docker ps -a也是找不到这个容器的
            docker rm $CONTAINER_ID
        fi
    fi
    sleep 2
    IMAGE_ID=`docker images | grep jenkins-service-bond| awk '{print $3}'`
    if [ -n "${IMAGE_ID}" ];then
        docker rmi ${IMAGE_ID}
    fi
    sleep 2
    cd /data/work/service-bond/
    docker build -t jenkins-service-bond .
    sleep 1
    docker run -d -p 8084:8084 jenkins-service-bond

猜你喜欢

转载自blog.csdn.net/ghostwuxiao/article/details/81128679