GVKun编程网logo

Jenkins+Docker+Git+Harbor 流水线打包(jenkins流水线部署到docker)

5

以上就是给各位分享Jenkins+Docker+Git+Harbor流水线打包,其中也会对jenkins流水线部署到docker进行解释,同时本文还将给你拓展015jenkins+maven+spri

以上就是给各位分享Jenkins+Docker+Git+Harbor 流水线打包,其中也会对jenkins流水线部署到docker进行解释,同时本文还将给你拓展015 jenkins + maven + springboot + git + docker、Docker Gitlab+Jenkins+Harbor构建持久化平台操作、Docker 环境搭建 Jenkins+gitlab+maven 自动打包 部署容器、docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)等相关知识,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

Jenkins+Docker+Git+Harbor 流水线打包(jenkins流水线部署到docker)

Jenkins+Docker+Git+Harbor 流水线打包(jenkins流水线部署到docker)


           Jenkins+Docker+Git+Harbor 流水线打包


环境:

CentOS Linux release 7.6.1810 (Core)
192.168.247.214    Jenkins+docker
192.168.247.215    git+harbor
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld

Step1: 安装 jdk 环境 (214)

下载地址:https://www.oracle.com/technetwork/java/javase/downloads/index.html

tar -xf jdk-8u171-linux-x64.tar.gz
mv jdk1.8.0_171/ /usr/local/java
cat >>/etc/profile <<EOF
> JAVA_HOME=/usr/local/java
> PATH=$PATH:$JAVA_HOME/bin
> EOF
source /etc/profile
[root@localhost ~]# java -version
java version "1.8.0_171"
Java(TM) SE Runtime Environment (build 1.8.0_171-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.171-b11, mixed mode)

Step2: 安装 Jenkins

tomcat 下载地址:https://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz
Jenkins 下载地址:http://mirrors.jenkins.io/war-stable/latest/jenkins.war

wget https://mirrors.aliyun.com/apache/tomcat/tomcat-8/v8.5.38/bin/apache-tomcat-8.5.38.tar.gz
tar -xf apache-tomcat-8.5.38.tar.gz
mv apache-tomcat-8.5.38 /usr/local/tomcat_jenkins
wget http://mirrors.jenkins.io/war-stable/latest/jenkins.war
mv jenkins.war /usr/local/tomcat_jenkins/webapps/
bash /usr/local/tomcat_jenkins/bin/startup.sh

访问地址:http://192.168.247.214:8080/jenkins/

Step3: 安装 docker(2 台都装)

官方文档地址:https://docs.docker.com/install/linux/docker-ce/centos/

安装国内加速器: curl -sSL https://get.daocloud.io/daotools/set_mirror.sh | sh -s http://f1361db2.m.daocloud.io
$ sudo yum remove docker \
                  docker-client \
                  docker-client-latest \
                  docker-common \
                  docker-latest \
                  docker-latest-logrotate \
                  docker-logrotate \
                  docker-engine

$ sudo yum install -y yum-utils \
  device-mapper-persistent-data \
  lvm2

$ sudo yum-config-manager \
    --add-repo \
    https://download.docker.com/linux/centos/docker-ce.repo

$ yum install docker-ce -y

$ sudo systemctl start docker && systemctl enable docker

Step4: 安装 docker-compose

下载地址:https://github.com/docker/compose/releases

curl -L https://github.com/docker/compose/releases/download/1.24.0-rc1/docker-compose-`uname -s`-`uname -m` -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose

 Step5: 安装 Harbor

​    Harbor 是一个用于存储和分发 Docker 镜像的企业级 Registry 服务器,通过添加一些企业必需的功能特性,例如安全、标识和管理等,扩展了开源 Docker Distribution。作为一个企业级私有 Registry 服务器,Harbor 提供了更好的性能和安全。提升用户使用 Registry 构建和运行环境传输镜像的效率。Harbor 支持安装在多个 Registry 节点的镜像资源复制,镜像全部保存在私有 Registry 中,确保数据和知识产权在公司内部网络中管控。另外,Harbor 也提供了高级的安全特性,诸如用户管理,访问控制和活动审计等。

下载 Harbor 地址:https://storage.googleapis.com/harbor-releases/release-1.7.0/harbor-offline-installer-v1.7.4.tgz

tar -xf harbor-offline-installer-v1.7.4.tgz
cd harbor
#vim harbor.cfg
hostname = 192.168.247.215
./prepare
./install.sh
Harbor仓库的stopstart:
进入Harbor目录执行如下命令即可:
docker-compose stop/start

访问地址:http://192.168.247.215
默认用户密码是:admin/Harbor12345

  Step6: 配置 jenkins

1、创建 pipeline 项目

2、参数化构建

3、编写 pipeline 脚本

模板:

node (){ //指定Slave标签
    //拉取代码
   stage(''Git Checkout'') { 
      checkout([$class: ''GitSCM'', branches: [[name: ''*/master'']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: ''git@code.aliyun.com:mtr-sscp/sscp-antipass.git'']]])
   }
   //代码编译 
   stage(''Maven Build'') {
        sh ''''''
        export JAVA_HOME=/usr/local/java
        /usr/local/maven/bin/mvn clean package -Dmaven.test.skip=true
        ''''''
   }
   stage(''Build and Push Image'') {
sh ''''''
TIME=$(date +%Y%m%d%H%M)
echo ${TIME} >TIME.txt REPOSITORY=172.31.182.143/dev/sscp-antipass:${Tag} cd target cat >> Dockerfile <<EOF # 以java:8为基础镜像 FROM java:8 MAINTAINER du.cn # 告诉 Docker 服务端容器暴露的端口号 EXPOSE 8100 # 创建一个可以从本地主机或其他容器挂载的挂载点,一般用来存放数据库和需要保持的数据等。 VOLUME /tmp # 格式为 ADD <src> <dest>。 # 该命令将复制指定的 <src> 到容器中的 <dest>。 其中 <src> 可以是Dockerfile所在目录的一个相对路径;也可以是一个 URL;还可以是一个 tar 文件(自动解压为目录)。 ADD sscp-antipass.jar /app.jar # 从命令本身看,是为了执行一个touch命令,前面的add命令把jar复制过去,后面touch命令的作用是修改这个文件的访问时间和修改时间为当前时间。 RUN bash -c ''touch /app.jar'' # container启动时执行的命令,但是一个Dockerfile中只能有一条ENTRYPOINT命令,如果多条,则只执行最后一条 ENTRYPOINT ["java","-jar","/app.jar"] EOF docker build -t $REPOSITORY . docker login -u admin -p Harbor%12345 172.31.182.143 docker push $REPOSITORY '''''' } stage(''Deploy to Docker'') { sh '''''' REPOSITORY=172.31.182.143/dev/sscp-antipass:${Tag} docker rm -f antipass |true docker image rm $REPOSITORY |true docker login -u admin -p Harbor%12345 172.31.182.143 docker run -p 8100:8100 -v /home/sscp/sscp-antipass/dockerDeploy/logs:/logs -d --name antipass $REPOSITORY '''''' } }

 Git Checkout 在 Pipeline Syntax 自动生成。

6、完成构建

 发布到 K8s pipeline 模板:

node (){ //指定Slave标签
    //拉取代码
   stage(''Git Checkout'') { 
      checkout([$class: ''GitSCM'', branches: [[name: ''*/k8s'']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[url: ''git@code.aliyun.com:mtr-sscp/sscp-transaction.git'']]])
   }
   //代码编译 
   stage(''Maven Build'') {
        sh ''''''
        export JAVA_HOME=/usr/local/java
        /usr/local/maven/bin/mvn clean package -Pk8s -Dmaven.test.skip=true
        ''''''
   }
   stage(''Build and Push Image'') {
sh ''''''
TIME=latest
echo ${TIME} >TIME.txt
REPOSITORY=172.31.182.143/k8s/sscp-transaction:${TIME}
cp Dockerfile target/
cd target
docker build -t $REPOSITORY .
docker login -u admin -p Harbor%12345 172.31.182.143
docker push $REPOSITORY
''''''
}
    stage(''Deploy to k8s'') {
    sh ''K8S_MASTER="172.31.182.152";APP="sscp-transaction";ssh ${K8S_MASTER} kubectl delete deployment.apps/${APP};ssh ${K8S_MASTER} istioctl kube-inject -f /root/sscp/${APP}/${APP}.yaml "|" kubectl apply -f -''
    }
}

 

015 jenkins + maven + springboot + git + docker

015 jenkins + maven + springboot + git + docker

1.准备

    1-1 机器四台

          jenkins:192.168.20.200    master:192.168.20.201   

          slave01:192.168.20.202    slave02:192.168.20.203

    1-2 测试项目

          地址:https://code.aliyun.com/995586041/test.git

2.建立jenkins项目

    1-1 安装jenkins   https://my.oschina.net/u/2937605/blog/1602509

    1-2 配置jenkins   https://my.oschina.net/u/2937605/blog/1796310

        这次我们将项目放到 master 的 /home/gh 文件夹下,注意这个文件夹必须在远程主机已经存在,否则会报错:

    1-3 创建一个自由风格的项目:ipweb

    1-4 源码管理

        就是最上边的代码,代码里面就是一个springboot项目,仅提供一个获取本机IP的测试接口,可以自己准备,或者fork一份;接口地址:http://127.0.0.1:8080/ip

        此项目结构如下:

                                       

        application.yml

server:
  port: 8080  #项目启动后的端口号

        Dockerfile                      

FROM jre    #基础镜像
MAINTAINER goldleaf    #作者信息
ADD ./*.jar /home/gh/ipweb/ipweb.jar    #这里是我们项目打包后的jar
CMD java -jar /home/gh/ipweb/ipweb.jar    #容器启动时执行该命令

        docker-stack.yml

version: ''3''    #文件版本
services:
  ipweb:
    image: ${IMAGE_NAME}    #制作后的镜像名称
    volumes:
      - /home/log:/home/log    #log地址,如果宿主机上没有该目录,会报错
    networks:
      - central    #docker swarm集群的overlay网络
    ports: 
      - 8090:8080    #开放端口
    deploy:
      replicas: 2    #容器实例个数
      placement:
        constraints: [node.role == worker]    #指定容器只在子节点工作
networks:
  central:
    external:
      name: central    #docker swarm集群的overlay网络

    1-5 mvn构建项目

        maven装在jenkins机器上,打包之后,ssh 发送到mater机器

    1-6 具体配置信息

        1)这里将项目打包后的jar、Dockerfile、docker-stack.yml发送到master

        2)制作相关镜像

        3)镜像build之后,push到私有仓库,我自己搭建的欣慰不是内网,push速度太慢,就用了阿里提供的仓库,所以下边多了一步登陆阿里仓库的命令,如果不想或者没有条件搭建自己的搭建私有仓库,这里是阿里仓库的地址:https://dev.aliyun.com/search.html

        4)docker stack deploy方式启动项目

3.检验项目

    3-1 检查文件:/home/gh/ipweb

  

    3-2 检查镜像:docker images

    3-3 检查stack:docker stack ls

    3-4 检查service:docker stack services gh

    3-5 检查容器运行情况:docker service ps gh_ipweb

    3-6 访问测试:curl 192.168.20.201:8090/ip

Docker Gitlab+Jenkins+Harbor构建持久化平台操作

Docker Gitlab+Jenkins+Harbor构建持久化平台操作

CI/CD概述

CI工作流程设计

Git 代码版本管理系统 只能命令行去管理git

Gitlab 基于git做了图形管理页面,企业使用gitlab做私有的代码管理仓库

Github 公共代码管理仓库

搭建gitlab

搭建gitlab先创建工作目录,因为有些数据需要持久化

[root@www ~]# mkdir -p /gitlab
[root@www ~]# cd /gitlab/
 
docker run -d \
 --name gitlab \
 -p 8443:443 \
 -p 9999:80 \
 -p 9998:22 \
 -v /gitlab/config:/etc/gitlab \
 -v /gitlab/logs:/var/log/gitlab \
 -v /gitlab/data:/var/opt/gitlab \
 -v /etc/localtime:/etc/localtime \
 --restart=always \
 lizhenliang/gitlab-ce-zh:latest

9999是web端口 8443web htpps端口 9998 ssh端口

将容器化的数据持久化到本地宿主机,这个镜像是早期汉化后构建的,默认官方的镜像是英文的,这个是英文的,这个镜像比较大差不多1G,包括数据库和消息队列,里面封装的内容很多。

[root@www gitlab]# docker logs 3396d5ccc518 
  - execute /opt/gitlab/bin/gitlab-ctl start postgresql
+psql_host=''/var/opt/gitlab/postgresql''

通过日志可以查看到有哪些组件如postgresql

初次访问的时候可能有点慢,因为组件较多,可能要等待3-5分钟

出现这个页面说明gitlab服务是启动起来了,可能里面其他组件还没启动成功。这里最好给到物理内存4G,如果只有2G是不能正常启动的,差不多八分钟之后如下所示

用户名默认是root这里需要设置新密码,新密码最少8位可以设置为qwerasdf,然后更新完密码就可以使用root用户名 密码qwerasdf去登入

创建一个私有项目java-demo

推送代码到java-demo仓库

在另外一台机器上安装git,将项目的源码包上传

[root@localhost ~]# yum install git -y

[root@localhost ~]# unzip tomcat-java-demo-master.zip

初始化Git目录

[root@localhost ~]# cd tomcat-java-demo-master
[root@localhost tomcat-java-demo-master]# git init
Initialized empty Git repository in /root/tomcat-java-demo-master/.git/

这个git目录就会配置git相关的一些数据,初始化完成以后

[root@localhost tomcat-java-demo-master]# cd .git/
[root@localhost .git]# ls
branches config description HEAD hooks info objects refs

配置git的配置文件

这条命令是将gitlab的地址写到.git/config配置文件当中

[root@localhost tomcat-java-demo-master]# git remote add origin http://192.168.179.100:9999/root/java-demo.git
 
[root@localhost tomcat-java-demo-master]# cat .git/config  可以看到gitlab地址写进去了,待会去提交代码都会去读取该配置文件
[core]
 repositoryformatversion = 0
 filemode = true
 bare = false
 logallrefupdates = true
[remote "origin"]
 url = http://192.168.179.100:9999/root/java-demo.git
 fetch = +refs/heads/*:refs/remotes/origin/*

这个.代表所有,将当前代码目录提交到暂存区

[root@localhost tomcat-java-demo-master]# git add .
[root@localhost tomcat-java-demo-master]# ls
db Dockerfile LICENSE pom.xml README.md src

提交到当前git仓库里面,因为本身其就是一个git仓库了(本地也是一个git仓库)

[root@localhost tomcat-java-demo-master]# git commit -m ''all''

推送到远程仓库,这个就会读取之前的配置文件了

[root@localhost tomcat-java-demo-master]# git push origin master
Username for ''http://192.168.179.100:9999'': root
Password for ''http://root@192.168.179.100:9999'': 
Counting objects: 179, done.
Compressing objects: 100% (166/166), done.
Writing objects: 100% (179/179), 1.12 MiB | 0 bytes/s, done.
Total 179 (delta 4), reused 0 (delta 0)
remote: Resolving deltas: 100% (4/4), done.
To http://192.168.179.100:9999/root/java-demo.git
 * [new branch]   master -> master

部署jenkins

[root@localhost jenkins]# ls
apache-maven-3.5.0-bin.tar.gz jdk-8u45-linux-x64.tar.gz
[root@localhost jenkins]# tar xf apache-maven-3.5.0-bin.tar.gz;tar xf jdk-8u45-linux-x64.tar.gz
[root@localhost jenkins]# mv jdk1.8.0_45 /usr/local/jdk
[root@localhost jenkins]# mv apache-maven-3.5.0 /usr/local/maven

这两个工具包的作用是让jenkins去用,jenkins是用容器部署的,所以宿主机上面的两个环境就可以挂载进去。要将maven jdk挂载进去。

因为要在jenkins里面去做镜像的构建,要使用docker build,所以这里有docker in docker,即在jenkins里面再构建docker,这里不需要研究如何在容器里面再安装docker。可以直接将宿主机的命令和socket直接挂载进去就可以直接在容器里面使用docker命令。

-v是将jenkins的数据持久化到目录下,jenkins官方将jenkins产生的数据文件都放在

/var/jenkins_home

目录下面,所以只需要将这个目录进行持久化就行,即使jenkins容器被删除了,那么数据还是可以恢复过来。

使用的镜像就是最新版,长期维护的镜像

docker run -d --name jenkins -p 80:8080 -p 50000:50000 -u root \
  -v /opt/jenkins_home:/var/jenkins_home \
  -v /var/run/docker.sock:/var/run/docker.sock  \
  -v /usr/bin/docker:/usr/bin/docker \
  -v /usr/local/maven:/usr/local/maven \
  -v /usr/local/jdk:/usr/local/jdk \
  -v /etc/localtime:/etc/localtime \
  --restart=always \
  --name jenkins jenkins/jenkins
 
[root@localhost jenkins]# docker ps
CONTAINER ID    IMAGE        COMMAND         CREATED       STATUS       PORTS                      NAMES
566d2ec85fe0    jenkins/jenkins   "/sbin/tini -- /usr/…"  3 minutes ago    Up 3 minutes    0.0.0.0:50000->50000/tcp, 0.0.0.0:80->8080/tcp  jenkins

5000端口是master slave端口

[root@localhost jenkins]# docker logs 566d2ec85fe0 查看日志

点击选择插件安装,这里选择无不安装插件,先安装jenkins以后插件需要什么就安装什么

Jenkins pipeline概念

• Jenkins Pipeline是一套插件,支持在Jenkins中实现集成和持续交付管道;

• Pipeline通过特定语法对简单到复杂的传输管道进行建模;

• 声明式:遵循与Groovy相同语法。pipeline { }

• 脚本式:支持Groovy大部分功能,也是非常表达和灵活的工具。node { }

• Jenkins Pipeline的定义被写入一个文本文件,称为Jenkinsfile

先要安装pipeline插件然后写文本,对pipeline去建模,现在主要使用声明式语法,文本文件长什么样

在这个文件当中告诉jenkins要做什么事情,在一个大的stage里面分为了很多小的stage,通过这种流水线的形式分好了这几个阶段,在这几个stage组成了pipeline的流水线。按照从上到下的顺序执行,直到执行完成。

pipeLine写法大致是下面这些流程

Pipeline实现之后有一个案板

这个案板根据pipeline的每个步骤会输出每个步骤案板。如消耗了多长时间和日志。这样容易定位问题方便查看。

Jenkins pipeline插件的安装和pipeline使用

在安装插件的时候会很慢,如何提速?Jenkins下载插件的时候是有一些源的,可以修改位国内的源,在插件高级里面修改其实是没有用的

[root@localhost jenkins]# cd /opt/jenkins_home/
[root@localhost jenkins_home]# ls
config.xml                   nodeMonitors.xml
copy_reference_file.log             nodes
hudson.model.UpdateCenter.xml          plugins
identity.key.enc                secret.key
jenkins.install.InstallUtil.lastExecVersion   secret.key.not-so-secret
jenkins.install.UpgradeWizard.state       secrets
jenkins.model.JenkinsLocationConfiguration.xml updates
jenkins.telemetry.Correlator.xml        userContent
jobs                      users
logs                      war
[root@localhost jenkins_home]# cd updates/
[root@localhost updates]# pwd
/opt/jenkins_home/updates
 
[root@localhost updates]# ls

default.json 这里其实写了插件的源 hudson.tasks.Maven.MavenInstaller 使用sed进行修改

sed -i ''s/http:\/\/updates.jenkins-ci.org\/download/https:\/\/mirrors.tuna.tsinghua.edu.cn\/jenkins/g'' default.json && \

sed -i ''s/http:\/\/www.google.com/https:\/\/www.baidu.com/g'' default.json

修改为清华源,然后重启生效

[root@localhost updates]# docker restart jenkins

jenkins

把git和pipeline都安装上,有个别安装失败可以,只要核心主键安装好就行

替换插件源之后安装插件明显变快了,可以看到新建项目多了流水线的选择,这里选择流水线构建

pipeline {
  agent any
 
  stages {
    stage(''1.拉取拉取代码'') {
      steps {
        echo ''拉取代码''
      }
    }
        stage(''2.代码代码代码编译'') {
      steps {
        echo ''编译''
      }
    }
        stage(''3.代码部署'') {
      steps {
        echo ''部署''
      }
    }
  }
}

可以看到看板

这里是控制台输出,也可以指定从某个阶段运行构建

下面使用pipeline来完成流程设计

从git拉取代码,构建镜像。推送到harbor再部署到docker当中。这个脚本可以复用

#!/usr/bin/env groovy
 
def registry = "reg.harbor.com"
def project = "welcome"
def app_name = "demo"
def image_name = "${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}"
def git_address = "http://192.168.179.100:9999/root/java-demo.git"
def docker_registry_auth = "c91491d9-91cd-4248-96c8-fc8cc00f7db4"
def git_auth = "86ebc99d-d3fc-4e6e-b938-db1f5a1f3642"
 
pipeline {
  agent any
  stages {
    stage(''拉取代码''){
      steps {
       checkout([$class: ''GitSCM'', branches: [[name: ''${Branch}'']], userRemoteConfigs: [[credentialsId: "${git_auth}", url: "${git_address}"]]])
      }
    }
 
    stage(''代码编译''){
      steps {
       sh """
        JAVA_HOME=/usr/local/jdk
        PATH=$JAVA_HOME/bin:/usr/local/maven/bin:$PATH
        mvn clean package -Dmaven.test.skip=true
        """ 
      }
    }
 
    stage(''构建镜像''){
      steps {
        withCredentials([usernamePassword(credentialsId: "${docker_registry_auth}", passwordVariable: ''password'', usernameVariable: ''username'')]) {
        sh """
         echo ''
          FROM ${registry}/library/tomcat:v1
          LABEL maitainer lizhenliang
          RUN rm -rf /usr/local/tomcat/webapps/*
          ADD target/*.war /usr/local/tomcat/webapps/ROOT.war
         '' > Dockerfile
         docker build -t ${image_name} .
         docker login -u ${username} -p ''${password}'' ${registry}
         docker push ${image_name}
        """
        }
      } 
    }
 
    stage(''部署到Docker''){
      steps {
       sh """
       docker rm -f tomcat-java-demo |true
       docker container run -d --name tomcat-java-demo -p 88:8080 ${image_name}
       """
      }
    }
  }
}

可以看到这里要你输入分支

参数化构建,变量的名称可以在shell脚本或者pipeline当中去引用

      steps {
        echo ''${Branch}''
      }

创建harbor的凭据,即使用jenkin要访问docker harbor仓库需要知道用户名和密码

可以看到这里多了一个凭据 c91491d9-91cd-4248-96c8-fc8cc00f7db4,pipeline脚本当中就定义了凭据def docker_registry_auth = "c91491d9-91cd-4248-96c8-fc8cc00f7db4" 这是jenkins的凭据

还需要插件git凭据 86ebc99d-d3fc-4e6e-b938-db1f5a1f3642 在pipeline里面定义def git_auth = "86ebc99d-d3fc-4e6e-b938-db1f5a1f3642"

Pipeline有些语句可以自动生成,比如生成拉从取代码

知道pipeline大概的框架 套进去就行

checkout([$class: ''GitSCM'', branches: [[name: ''*/master'']], doGenerateSubmoduleConfigurations: false, extensions: [], submoduleCfg: [], userRemoteConfigs: [[credentialsId: ''86ebc99d-d3fc-4e6e-b938-db1f5a1f3642'', url: ''http://192.168.179.100:9999/root/java-demo.git'']]])

拉取编译好之后的war包放到环境镜像里面

现在配置maven的源

Downloaded: https://repo.maven.apache.org/maven2/org/apache/maven/plugins/maven-war-plugin/3.1.0/maven-war-plugin-3.1.0.jar (91 kB at 5.3 kB/s)

Downloading: https://repo.maven.apache.org/maven2/org/springframework/boot/spring-boot-starter-web/2.0.1.RELEASE/spring-boot-starter-web-2.0.1.RELEASE.pom

在后台输出可以看到这些东西,在编译构建的时候maven的源是默认的网络比较慢,现在要修改源确保拉取速度快一些宿主机上修改,这里面定义了从那个源拉取相应的依赖包

[root@localhost ~]# vim /usr/local/maven/conf/settings.xml 
  <mirror>
   <id>central</id>
   <mirrorOf>central</mirrorOf>
   <name>aliyun maven</name>
   <url>https://maven.aliyun.com/repository/public</url>
  </mirror>

修改完之后不需要重启容器直重新构建,可以看到构建出来的包

[root@localhost ~]# ls /opt/jenkins_home/workspace/test-pipeline/target/ classes generated-sources ly-simple-tomcat-0.0.1-SNAPSHOT ly-simple-tomcat-0.0.1-SNAPSHOT.war maven-archiver maven-status

Job存放的是数据源信息

[root@localhost ~]# ls /opt/jenkins_home/jobs/

test test-pipeline

如果需要在其他dcker主机上部署可以使用ssh插件的ssh命令或者使用ansible别的机器上启动执行docker命令创建容器

题外话

提供了如果你的harbor提供了Https认证,那么请在你的jenkins这台主机将证书拷贝到相应的目录下面。确保jenkins主机能够登入进docker harbor仓库

[root@localhost ~]# mkdir -p /etc/docker/certs.d/reg.harbor.com
[root@localhost ~]# ls
anaconda-ks.cfg  reg.harbor.com.pem
 
[root@localhost ~]# cp reg.harbor.com.pem /etc/docker/certs.d/reg.harbor.com/reg.harbor.com.crt
 
[root@localhost ~]# cat /etc/hosts
127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
::1     localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.179.102 reg.harbor.com
 
[root@localhost ~]# docker login reg.harbor.com
Authenticating with existing credentials...
WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
Configure a credential helper to remove this warning. See
https://docs.docker.com/engine/reference/commandline/login/#credentials-store
 
Login Succeeded

以上这篇Docker Gitlab+Jenkins+Harbor构建持久化平台操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

您可能感兴趣的文章:
  • docker+gitlab+jenkins从零搭建自动化部署
  • centos下GitLab+Jenkins持续集成环境搭建(安装jenkins)
  • 详解Docker+Jenkins+Gitlab+Django应用部署实践
  • jenkins+gitlab+nginx部署前端应用实现
  • Jenkins集成Gitlab实现自动化部署的全过程记录

Docker 环境搭建 Jenkins+gitlab+maven 自动打包 部署容器

Docker 环境搭建 Jenkins+gitlab+maven 自动打包 部署容器

 

宿主机安装 docker(省略)

宿主机安装 maven

下载二进制包解压到 /var/docker_data/jenkins/jenkins_home 下面

https://maven.apache.org/download.cgi

Jenkins 镜像安装

  下载 Jenkins 镜像(一般都是 Ubuntu 版)

FROM jenkins

USER root
#清除了基础镜像设置的源,切换成腾讯云的jessie源
#使用非腾讯云环境的需要将 tencentyun 改为 aliyun
RUN echo '''' > /etc/apt/sources.list.d/jessie-backports.list \
  && echo "deb http://mirrors.tencentyun.com/debian jessie main contrib non-free" > /etc/apt/sources.list \
  && echo "deb http://mirrors.tencentyun.com/debian jessie-updates main contrib non-free" >> /etc/apt/sources.list \
  && echo "deb http://mirrors.tencentyun.com/debian-security jessie/updates main contrib non-free" >> /etc/apt/sources.list
#更新源并安装缺少的包
RUN apt-get update

ARG dockerGid=999

RUN echo "docker:x:${dockerGid}:jenkins" >> /etc/group

  

   制作镜像

docker build -t jenkins:ubuntu .

  启动镜像

docker run --name jenkins --privileged -d -p 8080:8080 -p 5000:5000 -v /etc/localtime:/etc/localtime -v /var/docker_data/jenkins/jenkins_home:/var/jenkins_home -v /var/docker_data/jenkins/settings:/var/settings  -v /var/run/docker.sock:/var/run/docker.sock -v $(which docker):/usr/bin/docker --env PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/var/jenkins_home/maven/bin  c2997ba18d6c

  目录说明:

/var/jenkins_home:Jenkins用户的家目录
/var/jenkins_home/workspace:Jenkins主要工作目录,创建的视图、gitlab拉下来的代码都在这个下面

  先按推荐安装再安装插件:

  • Maven Integration plugin
  • docker-build-step
  • Docker plugin
  • Gitlab Hook Plugin
  • GitLab Plugin

  Jenkins 系统配置:

  系统管理 --> 系统设置

  配置远程主机的账号密码

配置 gitlab

 

 GitLab API token 获取

在 gitlab 页面中鼠标点击右上角头像点击 settings,访问令牌创建个人访问令牌

Jenkins 全局工具配置

系统管理 --> 全局工具配置

 配置 jdk 路径

jenkins 镜像中的 jdk 应该是 yum 安装的,所有路径需要自己去找(/usr/lib/jvm/java-8-openjdk-amd64)

root@68decdef1ec3:~# ls -lrt /usr/bin/java
lrwxrwxrwx 1 root root 22 Jul 17  2018 /usr/bin/java -> /etc/alternatives/java
root@68decdef1ec3:~# ls -lrt /etc/alternatives/java
lrwxrwxrwx 1 root root 46 Jul 17  2018 /etc/alternatives/java -> /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java

  

maven 配置(这个是从宿主机映射过来的)

 

配置凭据

创建自动打包 job

源码管理

构建触发器

构建 build(打包)根据 pom 文件打包(clean package -Dmaven.test.skip=true)

最后运行脚本

参考别人脚本

echo ''================打包完成,开始复制================''
cd /var/lib/jenkins/workspace/gpsserver
scp Dockerfile-gps  root@hadoop1:/data/public/gpsserver/
scp server-gps/target/gpserver.jar  root@hadoop1:/data/public/gpsserver/
echo ''================复制文件完成================''
ssh root@hadoop1 << remotessh
echo ''================进入主机hadoop1 shell================''
cd /data/public/gpsserver
echo ''================停止容器 gpsserver================''
sudo  docker stop gpsserver
echo ''================删除容器 gpsserver================''
sudo  docker rm gpsserver
echo ''================删除镜像 gpsserver:latest================''
sudo  docker rmi gpsserver:latest
echo ''================build 镜像 gpsserver:latest================''
sudo docker build -t gpsserver:latest -f ./Dockerfile-gps .
echo ''================运行容器 gpsserver================''
sudo docker run --name=gpsserver -e JAVA_OPTS=''  -Dspring.profiles.active=prod '' --restart always -it -d -p 10111:10111 -p 15678:15678  -v /data/public/gpsserver/logs:/logs gpsserver:latest
 
echo "finished!"
exit  ###退出远程机器
remotessh  ###结尾哦
echo ''================结束远程启动================''

  

 

docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)

docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)

docker 运行 jenkins 及 vue 项目与 springboot 项目:
  • 一。安装 docker

  • 二.docker 运行 jenkins 为自动打包运行做准备

  • 三.jenkins 的使用及自动打包 vue 项目

  • 四.docker 运行 nginx

  • 五.jenkins 打包 springboot 服务且在 docker 中运行


#####1. 立即构建 输入任务名称:service_blog 选择 maven 项目 (先要在插件管理中安装 maven 插件) #####2. 配置 ###### 源码管理 选择 git (先要在插件管理中安装 git 插件) 输入 git 地址、秘钥及需要打包的分支 ######Pre Steps Build: pom.xml, 输入 maven 命令 clean package Post Steps:add post-build step-> 选择执行 shell 输入 shell 命令:

				#!/bin/bash
				
				#下面的路径都是指jenkins容器中的路径,非宿主机服务器的路径(通过该命令进入容器查看:docker exec -it {jenkins容器id} /bin/bash)
				#操作/项目路径(Dockerfile[下附配置]存放的路径)
				BASE_PATH=/var/jenkins_home/service
				# 源jar路径(jenkins利用maven打包项目的jar包的路径,其service_blog则为构建时输入的任务名称)
				SOURCE_PATH=/var/jenkins_home/workspace/service_blog/target
				#docker 镜像/容器名字 这里都命名为这个(自定义)
				SERVER_NAME=service-blog
				#jar名字(jenkins利用maven打包项目的jar包名称)
				JAR_NAME=personal_blog-0.0.1-SNAPSHOT
				#容器id
				CID=$(docker ps -a | grep "$SERVER_NAME" | awk ''{print $1}'')
				#镜像id
				IID=$(docker images -a | grep "$SERVER_NAME" | awk ''{print $3}'')
				 
				DATE=`date +%Y%m%d%H%M`
				 
				# 最新构建代码 移动到项目环境
				function transfer(){
					echo "最新构建代码 $SOURCE_PATH/$SERVER_NAME/target/$JAR_NAME.jar 迁移至 $BASE_PATH ...."
						cp $SOURCE_PATH/$JAR_NAME.jar $BASE_PATH/
					echo "迁移完成"
				}
				 
				# 备份
				function backup(){
					if [ -f "$BASE_PATH/$JAR_NAME.jar" ]; then
						echo "$JAR_NAME.jar 备份..."
							cp $BASE_PATH/$JAR_NAME.jar $BASE_PATH/backup/$SERVER_NAME-$DATE.jar
						echo "备份 $JAR_NAME.jar 完成"
					else
						echo "$BASE_PATH/$SERVER_NAME.jar不存在,跳过备份"
					fi
				}
				 
				# 构建docker镜像
				function build(){
					if [ -n "$IID" ]; then
						echo "存在$SERVER_NAME镜像,IID=$IID,删除后重新构建"
						docker rmi $IID
						echo "删除完毕,开始构建镜像"
						cd $BASE_PATH
						docker build -t $SERVER_NAME .
					else
						echo "不存在$SERVER_NAME镜像,开始构建镜像"
							cd $BASE_PATH
						docker build -t $SERVER_NAME .
					fi
				}
				 
				# 运行docker容器
				function run(){
					echo "执行backup ..."
					backup
					echo "执行transfer ..."
					transfer
					echo "执行build ..."
					build
					echo "docker run ..."
					if [ -n "$CID" ]; then
						echo "存在$SERVER_NAME容器,CID=$CID,停止后 删除,重新创建启动"
							docker stop $CID
							docker rm  $CID
							docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8089:8089 $SERVER_NAME
						echo "$SERVER_NAME容器重启完成"
					else
						echo "不存在$SERVER_NAME容器,docker run创建容器..."
							docker run --name $SERVER_NAME -v $BASE_PATH:$BASE_PATH -d -p 8089:8089 $SERVER_NAME
						echo "$SERVER_NAME容器创建完成"
					fi
				}
				 
				#入口
				run   

springboot 项目的 Dockerfile 配置:

			#基于openjdk:8
			FROM openjdk:8

			ADD  personal_blog-0.0.1-SNAPSHOT.jar personal_blog.jar
			 
			# 指定当前操作目录
			WORKDIR /var/jenkins_home/service
			 
			ADD  personal_blog-0.0.1-SNAPSHOT.jar personal_blog.jar
			RUN bash -c ''touch /personal_blog.jar''
			ENTRYPOINT ["java","-Djava.security.egd-file:/dev/./urandom","-jar","-Xmx1024m","-Xms1024m","/personal_blog.jar"]

保存配置 #####3. 立即构建 查看控制台,看看是否有错误,最后是否 success 查看 springboot 应用的日志,看看是否启动成功,是否有错误:docker logs -f --tail=100 {容器 id}

关于Jenkins+Docker+Git+Harbor 流水线打包jenkins流水线部署到docker的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于015 jenkins + maven + springboot + git + docker、Docker Gitlab+Jenkins+Harbor构建持久化平台操作、Docker 环境搭建 Jenkins+gitlab+maven 自动打包 部署容器、docker 运行 jenkins 及 vue 项目与 springboot 项目 (五.jenkins 打包 springboot 服务且在 docker 中运行)等相关知识的信息别忘了在本站进行查找喔。

本文标签: