以上就是给各位分享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)
- 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 流水线打包
环境:
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仓库的stop与start:
进入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
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构建持久化平台操作
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(省略)
宿主机安装 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 项目:
-
一。安装 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 中运行)等相关知识的信息别忘了在本站进行查找喔。
本文标签: