在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
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,将项目的源码包上传
初始化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 push origin master Username for 'http://192.168.179.100:9999': root Password for 'http://[email protected]: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产生的数据文件都放在
目录下面,所以只需要将这个目录进行持久化就行,即使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端口
点击选择插件安装,这里选择无不安装插件,先安装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进行修改
修改为清华源,然后重启生效
把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大概的框架 套进去就行
拉取编译好之后的war包放到环境镜像里面 现在配置maven的源
在后台输出可以看到这些东西,在编译构建的时候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> 修改完之后不需要重启容器直重新构建,可以看到构建出来的包
Job存放的是数据源信息
如果需要在其他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构建持久化平台操作就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持极客世界。 |
请发表评论