本文主要介绍DockerGitlab+Jenkins+Harbor搭建持久化平台的 *** 作,具有很好的参考价值。希望对你有帮助。来和边肖一起看看吧。
CI/CD概述
CI工作流设计
Git代码版本管理系统只能通过命令行管理git。
Gitlab基于Git制作图形管理页面,企业将gitlab作为私有代码管理仓库。
Github公共代码管理仓库
设置gitlab
要构建gitlab,首先要创建工作目录,因为有些数据需要持久化。
[root@www~]#mkdir-p/gitlab [root@www~]#cd/gitlab/ dockerrun-d\ --namegitlab\ -p8443:443\ -p9999:80\ -p9998: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:latest999是web端口8443webhtpps端口9998ssh端口
将容器化的数据保存到本地主机。这个图像是在早期本地化之后构建的。默认情况下,官方图片是英文的,这张是英文的。这个镜像差不多1G大小,包括数据库和消息队列,里面有很多封装的内容。
[root@wwwgitlab]#dockerlogs3396d5ccc518 -execute/opt/gitlab/bin/gitlab-ctlstartpostgresql +psql_host='/var/opt/gitlab/postgresql'可以通过日志查看postgresql等哪些组件可用。
初次就诊可能会慢一点,因为组件比较多,可能要等3-5分钟。
这个页面显示gitlab服务已经启动,可能里面的其他组件还没有成功启动。这里,最好给物理内存4G。如果只有2G不能正常启动,大概八分钟后会显示如下。
默认用户名是root。在这里,你需要设置一个新的密码。新密码最少8位可以设置为qwerasdf,然后更新密码后就可以使用root用户名密码qwerasdf登录了。
创建私有项目java-demo
将代码推送到java演示存储库
在另一台机器上安装git,上传项目的源代码包。
[root@localhost~]#yum安装git-y
[root@localhost~]#unzipTomcat-Java-demo-master.zip
初始化Git目录
[root@localhost~]#cdtomcat-java-demo-master [root@localhosttomcat-java-demo-master]#gitinit InitializedemptyGitrepositoryin/root/tomcat-java-demo-master/.git/这个git目录将用一些与git相关的数据进行配置。初始化完成后
[root@localhosttomcat-java-demo-master]#cd.git/ [root@localhost.git]#ls branchesconfigdescriptionHEADhooksinfoobjectsrefs配置git的配置文件
该命令将gitlab的地址写入。git/config配置文件。
[root@localhosttomcat-java-demo-master]#gitremoteaddoriginhttp://192.168.179.100:9999/root/java-demo.git [root@localhosttomcat-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@localhosttomcat-java-demo-master]#gitadd. [root@localhosttomcat-java-demo-master]#ls dbDockerfileLICENSEpom.xmlREADME.mdsrc提交到当前的git仓库,因为是git仓库(本地的也是git仓库)。
[root@localhostTomcat-Java-demo-master]#gitcommit-m'all'
将其推送到远程仓库,这将读取之前的配置文件。
[root@localhosttomcat-java-demo-master]#gitpushoriginmaster Usernamefor'http://192.168.179.100:9999':root Passwordfor'http://root@192.168.179.100:9999': Countingobjects:179,done. Compressingobjects:100%(166/166),done. Writingobjects:100%(179/179),1.12MiB|0bytes/s,done. Total179(delta4),reused0(delta0) remote:Resolvingdeltas:100%(4/4),done. Tohttp://192.168.179.100:9999/root/java-demo.git *[newbranch]master->master部署詹金斯
[root@localhostjenkins]#ls apache-maven-3.5.0-bin.tar.gzjdk-8u45-linux-x64.tar.gz [root@localhostjenkins]#tarxfapache-maven-3.5.0-bin.tar.gz;tarxfjdk-8u45-linux-x64.tar.gz [root@localhostjenkins]#mvjdk1.8.0_45/usr/local/jdk [root@localhostjenkins]#mvapache-maven-3.5.0/usr/local/maven这两个工具包的目的是供詹金斯使用。jenkins部署在容器中,所以可以挂载主机上面的两个环境。去挂载mavenjdk。
因为需要在jenkins中构建映像,使用dockerbuild,所以docker中有docker,也就是在jenkins中构建docker。没有必要研究如何在容器中安装docker。可以直接挂载主机命令和socket,也可以直接使用容器中的docker命令。
-v是将jenkins的数据持久化到目录中,jenkins正式将jenkins生成的所有数据文件放入
/var/jenkins_home
目录下,所以您只需要持久化这个目录。即使jenkins容器被删除,数据仍然可以恢复。
使用的映像是最新版本和长期维护的映像。
dockerrun-d--namejenkins-p80:8080-p50000:50000-uroot\ -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\ --namejenkinsjenkins/jenkins [root@localhostjenkins]#dockerps CONTAINERIDIMAGECOMMANDCREATEDSTATUSPORTSNAMES 566d2ec85fe0jenkins/jenkins"/sbin/tini--/usr/…"3minutesagoUp3minutes0.0.0.0:50000->50000/tcp,0.0.0.0:80->8080/tcpjenkins端口5000是主从端口
[root@localhostJenkins]#dockerlogs566D2EC85Fe0查看日志
单击插件安装。在这里,选择安装所有插件。先安装jenkins,然后安装任何需要的插件。
詹金斯管道概念
JenkinsPipeline是一组插件,支持在Jenkins中集成和持续交付管道;
通过特定语法对简单到复杂的传输管道进行管道建模;
声明:遵循与Groovy相同的语法。管道{}
脚本:它支持Groovy的大部分功能,也是一个非常有表现力和灵活性的工具。节点{}
Jenkins管道的定义被写入一个名为Jenkinsfile的文本文件中。
为了首先安装管道插件,然后编写文本并对管道建模,现在主要使用声明性语法。文本文件看起来像什么?
这个文件告诉詹金斯要做什么,一个大阶段被分成许多小阶段。这些阶段以流水线的形式划分,这些阶段形成流水线。从上到下执行,直到执行完毕。
管道大致是这样写的
管道实现后有一个砧板。
该砧板将根据流水线的每一步输出每一步砧板。例如花了多长时间和日志。这使得定位和查看问题变得容易。
安装詹金斯管道插件和使用管道
安装插件的时候会比较慢。我该如何加快速度?Jenkins在下载插件时有一些来源。可以修改国内的源码,但是在高级插件里修改是没用的。
[root@localhostjenkins]#cd/opt/jenkins_home/ [root@localhostjenkins_home]#ls config.xmlnodeMonitors.xml copy_reference_file.lognodes hudson.model.UpdateCenter.xmlplugins identity.key.encsecret.key jenkins.install.InstallUtil.lastExecVersionsecret.key.not-so-secret jenkins.install.UpgradeWizard.statesecrets jenkins.model.JenkinsLocationConfiguration.xmlupdates jenkins.telemetry.Correlator.xmluserContent jobsusers logswar [root@localhostjenkins_home]#cdupdates/ [root@localhostupdates]#pwd /opt/jenkins_home/updates [root@localhostupdates]#lsdefault.json实际上在这里写了插件hudson.tasks.maven.maven安装程序的源代码被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更新]#docker重启jenkins
詹金斯
安装git和pipeline,如果某些安装失败,只要安装了核心主键。
更换插件源码后,插件的安装速度明显更快了。您可以看到,新项目有更多的管道选择。这里选择管道施工。
pipeline{ agentany stages{ stage('1.拉取拉取代码'){ steps{ echo'拉取代码' } } stage('2.代码代码代码编译'){ steps{ echo'编译' } } stage('3.代码部署'){ steps{ echo'部署' } } } }你可以看到看板。
这里是控制台输出,或者您可以指定从某个阶段运行构建。
接下来,使用pipeline完成流程设计
从git中提取代码并构建映像。推到港口,然后部署到码头。这个脚本可以重复使用。
#!/usr/bin/envgroovy defregistry="reg.harbor.com" defproject="welcome" defapp_name="demo" defimage_name="${registry}/${project}/${app_name}:${Branch}-${BUILD_NUMBER}" defgit_address="http://192.168.179.100:9999/root/java-demo.git" defdocker_registry_auth="c91491d9-91cd-4248-96c8-fc8cc00f7db4" defgit_auth="86ebc99d-d3fc-4e6e-b938-db1f5a1f3642" pipeline{ agentany 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 mvncleanpackage-Dmaven.test.skip=true """ } } stage('构建镜像'){ steps{ withCredentials([usernamePassword(credentialsId:"${docker_registry_auth}",passwordVariable:'password',usernameVariable:'username')]){ sh""" echo' FROM${registry}/library/tomcat:v1 LABELmaitainerlizhenliang RUNrm-rf/usr/local/tomcat/webapps/* ADDtarget/*.war/usr/local/tomcat/webapps/ROOT.war '>Dockerfile dockerbuild-t${image_name}. dockerlogin-u${username}-p'${password}'${registry} dockerpush${image_name} """ } } } stage('部署到Docker'){ steps{ sh""" dockerrm-ftomcat-java-demo|true dockercontainerrun-d--nametomcat-java-demo-p88:8080${image_name} """ } } } }您可以在这里看到,您需要输入一个分支。
参数化构造,可以在shell脚本或管道中引用变量名。
steps{ echo'${Branch}' }创建harbor的凭据,即使用jenkin。要访问dockerharborwarehouse,您需要知道用户名和密码。
可以看到还有一个额外的凭证c91491d9-91CD-4248-96c8-fc8cc00f7db4,在管道脚本中定义了凭证defdocker_registry_auth="c91491d9-91CD-4248-96c8-fc8cc00f7db4"。这是詹金斯的证件。
还需要插件git凭证86ebc99d-d3fc-4e6e-b938-db1F5a1f3642来定义管道中的defgit_auth="86ebc99d-d3fc-4e6e-b938-db1F5a1f3642"。
管道的一些语句可以自动生成,比如生成拉取代码。
只要知道管道的大概框架,装进去就行了。
checkout([$class:'GitSCM',branches:[[name:'*/master']],doGenerateSubmoduleConfigurations:false,extensions:[],submulecfg:[],useremoteconfigs:[[credentialsId:'86ebc99d-d3fc-4e6e-b938-db1F5a1f3642',URL:'http://192.168.179.100:9999/root/Java-demo.git']]))
提取编译好的war包,并将其放在环境映像中
现在配置maven的源码
已下载:https://repo.maven.Apache.org/maven2/org/Apache/maven/plugins/maven-war-plugin/3.1.0/maven-war-plugin-3.1.0.jar(91kB,5.3kB/s)
下载: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>aliyunmaven</name> <url>https://maven.aliyun.com/repository/public</url> </mirror>修改后,不需要重启容器,重新构建。您可以看到构建的包。
[root@localhost~]#ls/opt/Jenkins_home/workspace/test-pipeline/target/classgenerated-sourcesly-simple-Tomcat-0.0.1-SNAPSHOTly-simple-Tomcat-0.0.1-SNAPSHOT.warmaven-Archivermaven-status
作业存储数据源信息。
[root@localhost~]#ls/opt/Jenkins_home/jobs/
测试测试管道
如果需要在其他dcker主机上部署ssh命令,可以使用ssh插件或在ansible机器上启动docker命令来创建容器。
跑题了
是的。如果您的harbor提供Https认证,请将证书复制到您的jenkins主机中的相应目录。确保jenkins主机可以登录dockerharbor仓库。
[root@localhost~]#mkdir-p/etc/docker/certs.d/reg.harbor.com [root@localhost~]#ls anaconda-ks.cfgreg.harbor.com.pem [root@localhost~]#cpreg.harbor.com.pem/etc/docker/certs.d/reg.harbor.com/reg.harbor.com.crt [root@localhost~]#cat/etc/hosts 127.0.0.1localhostlocalhost.localdomainlocalhost4localhost4.localdomain4 ::1localhostlocalhost.localdomainlocalhost6localhost6.localdomain6 192.168.179.102reg.harbor.com [root@localhost~]#dockerloginreg.harbor.com Authenticatingwithexistingcredentials... WARNING!Yourpasswordwillbestoredunencryptedin/root/.docker/config.json. Configureacredentialhelpertoremovethiswarning.See https://docs.docker.com/engine/reference/commandline/login/#credentials-store LoginSucceeded以上DockerGitlab+Jenkins+Harbor搭建持久化平台的 *** 作,就是边肖分享的全部内容。希望给大家一个参考,多多支持我们。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)