Dockerfile 文件
| |
| FROM openjdk:8u222-jre |
| |
| MAINTAINER 组织名称 |
| LABEL description=XXXX平台 |
| |
| |
| ENV TZ=Asia/Shanghai \ |
| |
| WORKPATH=/部署项目名称 |
| |
| |
| WORKDIR /usr/local/workspace/$WORKPATH |
| |
| |
| ADD ./*.jar ./app.jar |
| |
| |
| RUN ln -sf /usr/share/zoneinfo/$TZ /etc/localtime \ |
| && echo $TZ > /etc/timezone |
| |
| |
| ENTRYPOINT ["java", "-Dfile.encoding=utf-8", "-Djava.security.egd=file:/dev/./urandom", "-jar", "app.jar"] |
| CMD ["--spring.profiles.active=dev"] |
| |
| |
| EXPOSE 8080 |
Ansible Host 文件
| [开发环境] |
| 10.0.0.111 ansible_connection=ssh ansible_ssh_user=用户名 ansible_ssh_pass=用户密码 host1=host1:10.0.0.20 host2=host2:10.0.0.21 host3=host3:10.0.0.22 host4=host4:10.0.0.23 |
| |
| |
Jenkins Pipeline 代码
| pipeline { |
| agent { |
| node { |
| label 'haimaxy-jnlp' |
| } |
| } |
| environment { |
| JAVA_HOME = '/data/projects/jenkins-home/opt/env/jdk/jdk8u292-b10' |
| MAVEN_HOME = '/data/projects/jenkins-home/opt/env/maven/apache-maven-3.6.3' |
| DOCKER_REPOSITORY_HOST = 'registry.cn-beijing.aliyuncs.com' |
| DOCKER_REPOSITORY_USERNAME = 'Docker仓库账号' |
| DOCKER_REPOSITORY_PASSWORD = 'Docker仓库密码' |
| ORG_NAME = '组织名称' |
| ANSIBLE_HOSTS_PATH = 'AnsibleHost文件路径' |
| DEPLOY_PROJECT = '部署项目名称' |
| DEPLOY_ENV = 'prod' |
| } |
| |
| parameters { |
| gitParameter(name: 'GIT_TAG', |
| type: 'PT_TAG', |
| branchFilter: 'origin/(.*)', |
| defaultValue: 'master', |
| selectedValue: 'DEFAULT', |
| sortMode: 'DESCENDING_SMART', |
| description: '请选择代码标签') |
| choice(name: 'SERVER', choices: ['开发服务器'], description: '部署服务器') |
| string(name: 'JVM', defaultValue: '', description: 'JVM 配置') |
| string(name: 'PORT', defaultValue: '8080:8080', description: '端口 配置') |
| } |
| stages { |
| stage('git checkout') { |
| steps { |
| checkout([$class: 'GitSCM', |
| branches: [[name: "${params.GIT_TAG}"]], |
| doGenerateSubmoduleConfigurations: false, |
| extensions: [], |
| submoduleCfg: [], |
| userRemoteConfigs: [[url: '项目Git地址', credentialsId: '1658a146-5944-4702-9fb8-f36ee3008222',]] |
| ]) |
| } |
| } |
| stage('code build') { |
| steps { |
| sh ''' |
| ls |
| ${MAVEN_HOME}/bin/mvn clean package -Dmaven.test.skip=true |
| ''' |
| } |
| } |
| stage('docker build and push') { |
| steps { |
| sh ''' |
| CURR_IMAGE=${ORG_NAME}/${DEPLOY_PROJECT}:${GIT_TAG} |
| REPOSITORY=${DOCKER_REPOSITORY_HOST}/${CURR_IMAGE} |
| |
| # 打包镜像 发布到云仓库 |
| cd docker-build |
| docker build -t ${CURR_IMAGE} . |
| docker tag ${CURR_IMAGE} ${REPOSITORY} |
| docker login --username=${DOCKER_REPOSITORY_USERNAME} --password=${DOCKER_REPOSITORY_PASSWORD} ${DOCKER_REPOSITORY_HOST} |
| docker push ${REPOSITORY} |
| ''' |
| } |
| } |
| stage('remote docker deploy') { |
| steps { |
| sh ''' |
| CURR_IMAGE=${ORG_NAME}/${DEPLOY_PROJECT}:${GIT_TAG} |
| REPOSITORY=${DOCKER_REPOSITORY_HOST}/${CURR_IMAGE} |
| |
| # 制作部署配置文件 |
| cat >> deploy.yaml << EOF |
| - hosts: ${SERVER} |
| tasks: |
| - name: 启动镜像 |
| tags: back_code |
| shell: | |
| |
| sudo docker login --username=${DOCKER_REPOSITORY_USERNAME} --password=${DOCKER_REPOSITORY_PASSWORD} ${DOCKER_REPOSITORY_HOST} |
| |
| # 清除镜像 |
| sudo docker rm -f ${DEPLOY_PROJECT} |
| sudo docker rmi -f ${REPOSITORY} |
| |
| docker pull ${REPOSITORY} |
| |
| sudo docker run -p ${PORT} --name ${DEPLOY_PROJECT} --restart=on-failure \ |
| -v /data/logs/:/usr/local/workspace/${DEPLOY_PROJECT}/logs \ |
| -v /data/var/${DEPLOY_PROJECT}/:/usr/local/workspace/${DEPLOY_PROJECT}/var \ |
| --add-host={{host1}} \ |
| --add-host={{host2}} \ |
| --add-host={{host3}} \ |
| --add-host={{host4}} \ |
| -d ${REPOSITORY} \ |
| --spring.profiles.active=${DEPLOY_ENV} ${JVM} |
| EOF |
| |
| # 执行远程命令 |
| ansible-playbook deploy.yaml -i ${ANSIBLE_HOSTS_PATH} |
| |
| ''' |
| } |
| } |
| } |
| } |
| |
| |
微信扫一扫:分享
微信里点“发现”,扫一下
二维码便可将本文分享至朋友圈。