2024年10月docker安装jenkins(Docker + Jenkins+ Git + Python + allure的曲折历程《一》)

 更新时间:2024-10-12

  ⑴docker安装jenkins(Docker+Jenkins+Git+Python+allure的曲折历程《一》

  ⑵Docker+Jenkins+Git+Python+allure的曲折历程《一》

  ⑶Ubuntu(虚拟机、云都可以、Docker(Docker安装参考Ubuntu安装docker-、Jenkins(Jenkins安装参考Jenkins安装及部署-、Python(.、Java(、allure(..、Git、chrome(无界面本框架适用于,UI自动化、接口自动化持续集成、持续部署(CI/CD,完成自动化测试任务、线上巡检等工作。并结合allure生成一份可视化、易读性的报告。鉴于网上有大量的类似教程,如有和他人冲突地方,本框架的仅代表个人观点并实际进行操作下撰写。测试用例基于Pytest框架书写(后面专题会讲Pytest框架,本文不涉及该内容在jenkins上创建一个自由风格的项目添加git(需要装jenkins插件git会碰到第一个坑,不能连接到仓库以上完成后返回创建的自由风格项目-源码管理添加凭证

  ⑷jenkins容器中使用docker

  ⑸在项目中要使用jenkins实现自动化CI/CD功能,jenkins以docker容器方式运行,其中项目编译完要以docker方式构建image,上传到harbor私有仓库中。那jenkins容器中就要有docker运行环境以实现dockerbuildimages。我使用的官方的镜像文件jenkins/jenkins:lts,jenkins容器中是要以jenkins用户方式运行的。但宿主机host中的docker是以root所有的。这是因为当前容器中是以jenkins用户在运行的,所以没有权限去访问/var/run/docker.sock。可以看到容器中还是宿主机的权限模式,其中是宿主机的docker的GID宿主机的dockerGID查看为了验证这个问题,可以把jenkins容器以root用户方式去运行。可以看到以root方式运行,是可以成功执行dockerinfo命令的,这说明可以在jenkins容器中运行了。docker-jenkins-test镜像Dockerfile如下:在参考其他几种jenkinswithdocker的实现方式:Howcanirundockermandinsideadockercontainer?Ajenkinscapableofrunningdockeragentsusingdockerengineofhost.Usedockerinsidedockerwithjenkinsuser里面有各种实现方式,但我试验过了,在不改变宿主机/var/run/docker.sock权限的情况,都没有成功过。最简单的,就是在容器中不jenkins用户运行。ThesimplewaytorunDocker-in-DockerforCI跟这个仁兄实现方法类似,以root用户去运行,手工安装docker,再挂载宿主机/var/run/docker.sock。启动容器运行情况:这个jenkins容器中dockerinfo跟宿主机的dockerinfo是一样的。

  ⑹Gitlab+Jenkins+Docker+Harbor+Ks集群搭建CICD平台

  ⑺上帝借由各种途径使人变得孤独,好让我们可以走向自己。——赫尔曼·黑塞《德米安》

  ⑻CI即为持续集成(ContinueIntegration,简称CI),用通俗的话讲,就是持续的整合版本库代码编译后制作应用镜像。建立有效的持续集成环境可以减少开发过程中一些不必要的问题、提高代码质量、快速迭代等,

  ⑼Jenkins:基于Java开发的一种持续集成工具,用于监控持续重复的工作,旨在提供一个开放易用的软件平台,使软件的持续集成变成可能。Bamboo:是一个企业级商用软件,可以部署在大规模生产环境中。

  ⑽CD即持续交付ContinuousDelivery和持续部署ContinuousDeployment,用通俗的话说,即可以持续的部署到生产环境给客户使用,这里分为两个阶段,持续交付我理解为满足上线条件的过程,但是没有上线,持续部署,即为上线应用的过程

  ⑾关于CD环境,我们使用以前搭建好的Ks集群,Ks集群可以实现应用的健康检测,动态扩容,滚动更新等优点,关于Ks集群的搭建,小伙伴可以看看我的其他文章

  ⑿拉取镜像,启动并设置开机自启

  ⒀配置docker加速器

  ⒁GitLab不多介绍。一个基于Git的版本控制平台,,提供了Git仓库管理、代码审查、问题跟踪、活动反馈和wiki,当然同时也提供了

  ⒂切记:这里的端口要设置成,要不push项目会提示没有报错,如果宿主机端口被占用,需要把这个端口腾出来

  ⒃externa添加仓库地址

  ⒄CI机器简单测试一下

  ⒅push一个镜像,可以在私仓的web页面查看

  ⒆镜像jenkins拉取

  ⒇这里为什么要改成,是因为容器里是以jenkins用户的身份去读写数据,而在容器里jenkins的uid是,

  ⒈更换国内清华大学镜像,Jenkins下载插件特别慢,更换国内的清华源的镜像地址会快不少

  ⒉重启docker,获取登录密匙

  ⒊需要修改jenkins绑定的docker的启动参数,ExecStart=/usr/bin/dockerd-

  ⒋修改镜像库启动参数后需要重启docker

  ⒌后面gitlab要和jenkins进行联动,所以必须要需要对jenkins的安全做一些设置,依次点击系统管理-全局安全配置-授权策略,勾选“匿名用户具有可读权限“

  ⒍添加JVM运行参数-Dhudson.security.csrf.GlobalCrumbIssuerConfiguration.DISABLE_CSRF_PROTECTION=true运行跨站请求访问

  ⒎这里的话我们要通过jenkins上的kubectl客户端连接ks,所以我们需要安装一个ks的客户端kubectl,下载ks客户端

  ⒏然后拷贝kubeconfig证书,ks集群中查看证书位置,这里的证书是之前创建好的,小伙伴可以看看我之前的文章

  ⒐我们要部署Nginx来运行hexo博客系统,hexo编译完后为一堆静态文件,所以我们需要创建一个svc和一个deploy,使用SVC提供服务,使用deploy提供服务能力,使用Nginx+hexo的静态文件构成的镜像

  ⒑这里我们先用一个Nginx镜像来代替hexo博客的镜像

  ⒒查看deployments和pod

  ⒓访问测试没有问题,之后我们配置好jenkins上的触发器,直接替换就OK

  ⒔我们通过kubectlset命令更新deploy的镜像时,获取的镜像是通过私仓获取的,所以需要在启动参数添加私仓地址

  ⒕这里所有的节点都需要设置后重启docker

  ⒖访问jenkins,接下来才是重点,我们要的jenkins上配置整个CICD流程,从而实现自动化

  ⒗下面我们编译一下hexo,生成public的一个文件夹,然后上传gitlab

  ⒘同时需要编写Dockerfile文件来创建镜像

  ⒙如何在docker中安装jenkins

  ⒚:在linux中安装docker:使用docker拉取一个linux镜像如:centos:使用centos镜像创建容器并运行。:在创建的容器中搭建java环境:上传tomcat并解压:将jenkins放进tomcat中进行运行(安装方法和在windows中一样,建议使用war包的安装方法,就是将jenkins.war放进tomcat的webapps目录下,在启动tomcat就可以了.

  ⒛阿里云的Docker镜像源添加docker服务基本的操作得到密钥后填入,继续然后再点击去安装推荐插件docker的架构是C/S架构。在我们使用docker命令时,其实是命令使用socket与docker的守护进程进行通信,我们需要将jenkins添加到docker的用户组,才能正常执行docker命令NODE服务器上生成把公钥添加在到git,私钥添加到jenkins源码管理本地文件添加DockerFile和nginx配置构建脚本然后构建生成一个新的镜像镜像库就是集中存放镜像的一个文件服务。镜像库在CI/CD中,又称制品库。构建后的产物称为制品,制品则要放到制品库做中转和版本管理。常用平台有Nexus,Jfrog,Harbor或其他对象存储平台

  Jenkins以Docker方式启动的agents

  本节详细讲述使用SSH连接以Docker方式启动的agents。假设Jenkinsmaster已经安装好了。agent机器上docker环境也安装好了。在Jenkinsmaster机器上执行以下命令,如果是以docker方式安装就在容器里面执行使用docker-ssh-agentimage创建agent:是sshpublickey,可以从~/.ssh/id_rsa.pub获取在Jenkinsdashboard一次点击ManageJenkins---》ManageNodesandclouds---》NewNode输入agent的名称和类型(比如Name:agent,Type:PermanentAgent,点击OK,填写以下表单然后点击保存,此时agent已经注册到master,但是还是offline,点进去

  在容器中运行Jenkinspipeline任务

  持续集成中的pipeline技术和docker都是当前正在发展的主流方向,当然把它们结合起来在CI/CD过程中发挥出更强大的威力也是大家共同的目标。本文将介绍如何在Jenkinspipeline中集成使用docker,好在当前的Jenkins已经默认通过插件实现了与docker的集成,所以这将是一段轻松愉快的旅程。

  简单起见,我们使用一台安装了docker的linux虚机,并通过ssh将其启动为Jenkinsserver的buildagent。主要操作步骤如下:

  我们通过下面的脚本一次搞定这些操作(docker的安装请参考官方文档):

  在linux虚机上执行上面的脚本,然后在Jenkins中添加node(buildagent):

  其中的“Remoterootdirectory“就是刚才创建的/var/jenkins目录。“Launchmethod“选择“LaunchslaveagentsviaSSH“。Host为linux虚机的IP,Credentials则为刚才创建的jenkins用户。

  先来运行一个简单的demo。创建一个pipeline类型的job,并输入下面的pipelinescript:

  运行该任务,执行结果如下:

  其中的命令node--version就是在容器中执行的。

  Jenkins默认会把任务分配给任何可用的agent,如果我们要指定任务执行的agent,可以在docker的配置中指定label,这样该任务只会被分配到具有某个label的agent上运行:

  我们还可以在folder级别指定label,这样的设置会应用在folder内所有没有设置label的任务上:

  除了label,还可以设置dockerregistryURL及其身份认证的凭据。

  我们还可以在不同的stage中运行不同的容器,其实就是每个stage用自己的容器镜像创建容器并执行任务,stage之间没啥关系:

  通过指定Dockerfile文件,在builda当然你还可以实现更多更复杂的用例,赶紧动手吧!

  UsingDockerwithPipeline

  PipelineSyntax

  作者:sparkdev

  Jenkinsdocker插件自动创建容器执行完成销毁容器

  jenkins安装docker插件jenkins安装Dockerplugin、配置jenkins使用Docker管理口配置Dokcer配置文件(Dockerwindows不支持)docker文件:/usr/lib/systemd/system/docker.service修改ExecStart行为下面内容ExecStart=/usr/bin/dockerd-重新加载docker配置systemctldaemon-reload//,加载docker守护线程systemctlrestartdocker//,重启dockerjenkins配置docker管理、配置docker镜像模板使用点击对应的任务执行,自动生成对应的node节点,执行完成后自动删除节点。

  Docker容器中安装Docker

  最近用到Jenkins,使用了Docker来提供服务,但是在构建步骤中又希望能够使用Docker去生成镜像,因此需要实现在Docker容器中去安装Docker,其实也就是在特定的系统环境下安装Docker,但是实际操作中可能还会出现其他问题。以Jenkins/Jenkins容器为例子。进入jenkins容器:一般安装前都需要知道当前系统信息,没有安装lsb-core,因此执行:我在第一次查询时候也看不出来是用的哪个系统以及版本,猜测应该为Debian。因为原来的配置的源速度太慢(无效?,因此执行apt-getupdate都会失败,所以无法去安装新的软件。所以需要先更改源配置,这个过程中我找到了不少配置信息,但是基本都因为key过期等原因不能够使用。这里推荐一个很好的网站,会每隔四小时发布Debian的源地址:备份Linux的源配置文件:修改源配置信息(因为没有安装vim,只能通过》方式将地址写入文件然后安装vim,方便后面查看等操作。sources.list文件,配置完整地址。同样安装lsb-core,安装完成后可以使用lsb_release-a查看系统版本。接下来就是安装Docker,这里我们已经知道是在Debian环境下安装Docker,可以参考菜鸟的步骤:

您可能感兴趣的文章:

相关文章