# Docker安装Jenkins

  1. 拉取Jenkins镜像 docker pull jenkins/jenkins:lts
  2. 新建挂载目录 mkdir -p ~/jenkins_home
  3. 修改权限 chown -R 1000 /root/jenkins_home
  4. 启动容器
    docker run -di \
    --name=jenkins \
    -p 8080:8080 \
    -v /root/jenkins_home/:/var/jenkins_home \
    -v /opt/software/jdk1.8.0_181:/opt/software/jdk1.8.0_181 \
    -v /opt/software/apache-maven-3.8.6:/opt/software/apache-maven-3.8.6 \
    -v $(which docker):/usr/bin/docker \
    -v /var/run/docker.sock:/var/run/docker.sock \
    jenkins/jenkins:lts
    
    1
    2
    3
    4
    5
    6
    7
    8
    9

挂载jenkins_home -v /root/jenkins_home/:/var/jenkins_home
挂载宿主机的java环境 /opt/software/jdk1.8.0_181:/opt/software/jdk1.8.0_181
挂载宿主机的maven环境 -v /opt/software/apache-maven-3.8.6:/opt/software/apache-maven-3.8.6
挂载宿主机的Docker,Jenkis可以使用Docker了 -v $(which docker):/usr/bin/docker -v /var/run/docker.sock:/var/run/docker.sock

  1. 页面初始化,插件安装等等

参考,不得不说,人家写的真好,必须点赞 (opens new window)

Jenkins

持续集成 自动化打包、部署、发布

✔️开发本地开发完成
✔️提交代码到Git仓库(gitlab、gitee、github)
✔️Jenkins监听是否有提交
✔️Jenkins拉取Git仓库代码到Jenkins工作目录
✔️Jenkins调用Maven打包,编译等
✔️Jenkins制作Docker镜像
✔️Jenkins上传镜像到镜像库,如Harbor
✔️Jenkins通过SSH登录应用服务器
✔️Jenkins拉取镜像
✔️Jenkins通过运行镜像
✔️Jenkins控制每个应用服务器都启动容器
✔️Jenkins发布完成

所以有了jenkins之后,开发只需要关注开发代码,然后提交就行了。剩下的操作全都交给jenkins处理

DockerCompose

  1. 编写docker-compose.yml
version: '3.8'
services:
  ufs-jenkins:
    image: jenkinsci/blueocean
    container_name: jenkins
    restart: always
    user: root
    ports:
      - "8080:8080"
      - "50000:50000"
    volumes:
      - ./jenkins/jenkins_home:/var/jenkins_home
      - /etc/localtime:/etc/localtime:ro
      - /var/run/docker.sock:/var/run/docker.sock
1
2
3
4
5
6
7
8
9
10
11
12
13
14
  1. ./jenkins/jenkins_home目录配置maven的阿里源 setting.xml

  2. 登录xx:8080配置Jenkins

    • 初始密码,通过 docker logs ufs-jenkins 获取
    • 安装插件 Docker Pipeline
  3. 准备一个项目,提交到Gitee

  4. 项目根目录创建Dockerfile

    FROM openjdk:8-jre-alpine
    # 将当前目录下的jar包复制到docker容器的/目录下
    COPY target/*.jar /app.jar
    # 运行过程中创建一个xx.jar文件
    RUN touch /app.jar;
     
    ENV TZ=Asia/Shanghai JAVA_OPTS="-Xms128m -Xmx256m -Djava.security.egd=file:/dev/./urandom"
    ENV PARAMS=""
     
    # 声明服务运行在8080端口
    EXPOSE 8080
    # 指定docker容器启动时运行jar包
    ENTRYPOINT [ "sh", "-c", "java $JAVA_OPTS -jar /app.jar $PARAMS" ]
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
  5. 项目根目录创建Jenkinsfile

    pipeline{
        agent any
        environment {
          WS = "${WORKSPACE}"
          IMAGE_NAME = "java-devops-demo"
        }
     
        //定义流水线的加工流程
        stages {
            //流水线的所有阶段
            stage('1.环境检查'){
                steps {
                   sh 'pwd && ls -alh'
                   sh 'printenv'
                   sh 'docker version'
                   sh 'java -version'
                   sh 'git --version'
                }
            }
     
            stage('2.编译'){
                agent {
                    docker {
                        image 'maven:3-alpine'
                        args '-v maven-repository:/root/.m2'
                     }
                }
                steps {
                   sh 'pwd && ls -alh'
                   sh 'mvn -v'
                   sh 'cd ${WS} && mvn clean package -s "/var/jenkins_home/appconfig/maven/settings.xml" -Dmaven.test.skip=true'
                }
            }
     
            stage('3.打包'){
                steps {
                   sh 'pwd && ls -alh'
                   sh 'docker build -t ${IMAGE_NAME} .'
                }
            }
     
            stage('4.部署'){
                // 删除容器和虚悬镜像
                steps {
                   sh 'pwd && ls -alh'
                   sh 'docker rm -f ${IMAGE_NAME} && docker rmi $(docker images -q -f dangling=true)'
                   sh 'docker run -d -p 8888:8080 --name ${IMAGE_NAME} -v /mydata/logs/${IMAGE_NAME}:/logs/${IMAGE_NAME} ${IMAGE_NAME}'
                }
            }
        }
    }
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
  6. Jenkins首页新创建流水线

  7. 配置流水线 Pipeline script from SCM -> Git -> RepositoryURL...

  8. 返回首页 Blue Ocean 选择运行