Docker配置文件

# 接入配置目录
cd /workspace/etc/docker

# 新建并保存文件
vim jenkinsci-blueocean.yml
# jenkinsci-blueocean.yml
version: '2'

services:
  jenkinsci:
    image: jenkinsci/blueocean
    privileged: true
    user: root
    container_name: jenkinsci_blueocean
    volumes:
      - /var/run/docker.sock:/var/run/docker.sock
      - /workspace/data/jenkins:/var/jenkins_home
    ports:
      - "21496:8080"
      - "50000:50000"
    environment:
      JAVA_OPTS: "-Djava.awt.headless=true"
    restart: always
    deploy:
      resources:
        limits:
          memory: 768M

启动服务(首次)

cd /workspace/etc/docker
sudo docker-compose -f jenkinsci-blueocean.yml up

# 运行后会界面提供一个密码,记住该密码部署需要用到
# 记录后,则关闭 Ctrl + c

52e7a63b-0e8a-4048-abfb-0e77aa9daa47-paforubp.png

启动服务

cd /workspace/etc/docker
sudo docker-compose -f jenkinsci-blueocean.yml up -d

# 检查是否启动成功
sudo docker ps | grep jenkins

配置Jenkins

登录系统

此处是jenkins的nginx代理域名:https://xxxxxx.com

输入控制台中的密码至界面中

安装推荐插件

  1. 选择安装推荐的插件

  1. 部分插件可能会安装异常,先忽略

  1. 创建管理员用户

设置用户名,密码

  1. 设置访问系统域名

  2. 重启,等待重启后,进入登录页面

升级Jenkins

由于docker中的jenkins版本可能与插件版本不匹配,需要升级jenkins版本

  1. 进入管理页面

  1. 升级Jenkins

  1. 勾选【安装完成后重启Jenkins(空闲时)】

安装插件

  1. 进入【系统管理】

  1. 进入【插件管理】

  1. 安装【Docker Pipeline】插件

更新插件

3c23c9a7-4867-4262-9ab4-a034369eb7f2-helyfhlt.png

添加流水线

  1. 点击【打开Blue Ocean】

  1. 点击【创建流水线】

  1. 点击【Git】

  1. 代码仓库信息

输入Git仓库地址,用户名,密码

点击【创建证书】、【创建流水线】等待创建成功

  1. 禁用自动触发流水线部署

点击项目中【设置】按钮

找到【Property strategy】并点击【Add property】

选择【不通过SCM自动化触发】

点击【保存】

  1. 重新配置Git账号密码

由于Jenkins的bug,可能刚输入的账号密码是无效的

点击项目中【设置】按钮

选择分支源中【添加】按钮,选择Jenkins

设置用户名,密码

运行流水线

选择对应的分支,点击右侧的【运行】按钮

注:首次点击时,由于需要读取配置,运行失败,再次点击即可

再次运行,选择对应环境,点击【Run】进行部署

Jenkinsfile配置

// Groovy 语法
pipeline {
    agent any
    parameters {
        choice(name: 'env_profile', choices: ['none', 'dev', 'test', 'prod'], description: "请选择发布的环境")
    }
    environment {
        DOCKER_CONFIG_MAP = ""
        DOCKER_REGISTRY_URL = ""
    }
    stages {
        stage('Init Config') {
            steps {
                echo "env_profile:${params.env_profile}"

                script {
                    if(params.env_profile == 'none'){
                        error "请选择发布的环境"
                    }

                    DOCKER_REGISTRY_URL = "demo"

                    DOCKER_CONFIG_MAP = [
                        'demo-system': [
                            'options' : [
                                local : "-p 12100:8080 --restart=always -v /workspace/logs/demo:/workspace/logs/demo -v /workspace/data/demo:/workspace/data/demo -e JAVA_OPTS='-Xms512m -Xmx1024m -Xss10m -server -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=15 -XX:G1MaxNewSizePercent=30 -XX:SurvivorRatio=6 -XX:InitiatingHeapOccupancyPercent=30 -XX:G1MixedGCLiveThresholdPercent=50 -XX:G1HeapWastePercent=5'",
                                dev : "-p 12100:8080 --restart=always -v /workspace/logs/demo:/workspace/logs/demo -v /workspace/data/demo:/workspace/data/demo -e JAVA_OPTS='-Xms512m -Xmx1024m -Xss10m -server -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=15 -XX:G1MaxNewSizePercent=30 -XX:SurvivorRatio=6 -XX:InitiatingHeapOccupancyPercent=30 -XX:G1MixedGCLiveThresholdPercent=50 -XX:G1HeapWastePercent=5'",
                                test : "-p 12100:8080 --restart=always -v /workspace/logs/demo:/workspace/logs/demo -v /workspace/data/demo:/workspace/data/demo -e JAVA_OPTS='-Xms512m -Xmx1024m -Xss10m -server -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=15 -XX:G1MaxNewSizePercent=30 -XX:SurvivorRatio=6 -XX:InitiatingHeapOccupancyPercent=30 -XX:G1MixedGCLiveThresholdPercent=50 -XX:G1HeapWastePercent=5'",
                                prod : "-p 12100:8080 --restart=always -v /workspace/logs/demo:/workspace/logs/demo -v /workspace/data/demo:/workspace/data/demo -e JAVA_OPTS='-Xms512m -Xmx1024m -Xss10m -server -XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=15 -XX:G1MaxNewSizePercent=30 -XX:SurvivorRatio=6 -XX:InitiatingHeapOccupancyPercent=30 -XX:G1MixedGCLiveThresholdPercent=50 -XX:G1HeapWastePercent=5'",
                            ],
                            'command' : [
                                local : "--spring.profiles.active=${params.env_profile}",
                                dev   : "--spring.profiles.active=${params.env_profile}",
                                test  : "--spring.profiles.active=${params.env_profile}",
                                prod  : "--spring.profiles.active=${params.env_profile}"
                            ]
                        ]
                    ]

                }
            }
        }

        stage('Maven Build') {
            agent {
                docker {
                    image 'maven:3-alpine'
                    args '--cpus 1 -v /root/.m2:/root/.m2'
                }
            }
            steps {
                script {
                    sh "mvn clean package dockerfile:build -P ${params.env_profile} -DskipTests"
                }
            }
        }

        stage('Clean Container') {
            steps {
                script {
                    def project_name = "demo-system"
                    def container_name = "${project_name}-${params.env_profile}"
                    echo "container name: ${container_name}"
                    sh "docker stop ${container_name} || true"
                    sh "docker rm ${container_name} || true"
                }
            }
        }

        stage('Deploy') {
            steps {
                script {
                    def project_name = "demo-system"
                    def container_name = "${project_name}-${params.env_profile}"
                    def image_name = "${DOCKER_REGISTRY_URL}/${project_name}:${params.env_profile}"
                    def docker_options = DOCKER_CONFIG_MAP[project_name]['options'][params.env_profile]
                    def docker_command = DOCKER_CONFIG_MAP[project_name]['command'][params.env_profile]
                    sh "docker run -d --name ${container_name} ${docker_options} ${image_name} ${docker_command}"
                }
            }
        }
    }
}

Dockerfile配置

FROM anapsix/alpine-java:8_server-jre_unlimited
MAINTAINER demo demo@gmail.com

# timezone
ENV TZ=Asia/Shanghai
RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

# port
EXPOSE 8080

# add file
ARG JAR_FILE
ADD target/${JAR_FILE} ./app.jar

# java_opts
ENV JAVA_OPTS=""

ENTRYPOINT ["sh", "-c", "java ${JAVA_OPTS} -Djava.security.egd=file:/dev/./urandom -jar app.jar ${0} ${@}"]

文章作者:
本文链接:
版权声明: 本站所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 飞的博客
部署 Liunx Docker
喜欢就支持一下吧