后来我研究发现,通过Jenkins-slave就能实现跨网络发布。 登录主机office-145,创建目录 mkdir -p /data/jenkins mkdir -p /data/jenkins-slave 将下载好的2个文件,上传到/data/jenkins-slave 启动代理 cd /data/jenkins-slave/ java -jar agent.jar -jnlpUrl http://10.212.82.86:8080/computer/office-145
/ jenkins-slave/ ├── Dockerfile ├── jenkins-slave ├── kubectl ├── settings.xml └── slave.jar 课件目录里涉及四个文件 : Dockerfile 构建镜像 jenkins-slave shell脚本启动slave.jar settings.xml 修改maven官方源为阿里云源 slave.jar agent 程序,接受master下发的任务 构建并推送到镜像仓库: $ cd jenkins-slave/ $ docker build -t hub.cropy.cn/library/jenkins-slave-jdk pipline脚本内容如下: pipeline { agent { kubernetes { label "jenkins-slave" yaml ''' apiVersion: v1 kind: Pod metadata: name: jenkins-slave spec: containers: - name: jnlp
agent.jar和启动脚本 RUN rm -fr ${agent_workdir}/agent.jar COPY agent.jar ${agent_workdir}/agent.jar COPY jenkins-slave ${jenkins_script}/jenkins-slave RUN chown ${user} ${agent_workdir}/agent.jar \ && chown ${user} $ {jenkins_script}/jenkins-slave #增加构建工具 ADD buildtools/apache-maven-3.5.0.tar.gz /usr/local/ ADD buildtools :${JAVA_HOME}/bin:${ANT_HOME}/bin:${JMETER_HOME}/bin:${M3_HOME}/bin CMD ["sh","-x","/usr/local/bin/jenkins-slave
/usr/bin/jenkins-slave COPY settings.xml /etc/maven/settings.xml RUN chmod +x /usr/bin/jenkins-slave COPY helm kubectl /usr/bin/ ENTRYPOINT ["jenkins-slave"] 构建jenkins-slave推送至harbor仓库 docker build . -t 192.168.0.241/library/jenkins-slave:jdk-1.8 docker push 192.168.0.241/library/jenkins-slave:jdk-1.8 " yaml """ kind: Pod metadata: name: jenkins-slave spec: containers: - name: jnlp image : "${registry}/library/jenkins-slave:jdk-1.8" imagePullPolicy: Always volumeMounts: - name
镜像 jenkins 官方有jenkins-slave 制作好的镜像,可以直接docker pull jenkins/jnlp-slave 下载到本地并上传本地私有镜像厂库。 /usr/bin/jenkins-slave COPY docker /usr/bin/docker COPY kubectl /usr/bin/kubectl COPY helm /usr/bin/ jenkins-slave"] EOF jenkins-slave脚本内容 #! docker pull harbor.od.com/base/jenkins-slave:mvn-slim 登陆harbor 仓库 WEB控制台,可以看到已经上传上来的镜像 测试jenkins-slave 在jenkins 中创建一个流水线项目,测试jenkins-slave是否正常。
比如,该示例会在 jenkins-slave 中执行 git clone 操作,然后进入到 maven 容器内执行 mvn -B clean install 编译操作。 执行构建,跟上边 Pipeline 类似,也会新建 jenkins-slave 并注册到 master,不同的是,它会在 Kubernetes 中启动我们配置的 maven 容器模板,来执行相关命令。 :8-jdk 镜像来扩展的,但是对于我们来说这个镜像功能过于简单,比如我们想执行 Maven 编译或者其他命令时,就有问题了,那么可以通过制作自己的镜像来预安装一些软件,既能实现 jenkins-slave 此外,args 参数传递两个 jenkins-slave 运行需要的参数。还有一点就是这里并不需要指定 container('jnlp'){...} 最后,贴一下我自定义的预安装了 Maven 的 Jenkins-slave 镜像的 Dockerfile ,当然大家可以基于此预安装一些其他软件,来完成日常持续构建与发布工作吧。
自定义构建jenkins-slave镜像 ? Jenkins在Kubernetes中动态创建代理 ? 构建jenkins-slave镜像 资料详见jenkins.zip $ unzip jenkins-slave.zip && cd jenkins-slave && ls ./ Dockerfile helm jenkins-slave kubectl settings.xml slave.jar $ vim Dockerfile FROM centos:7 LABEL maintainer /usr/bin/jenkins-slave COPY settings.xml /etc/maven/settings.xml RUN chmod +x /usr/bin/jenkins-slave " yaml ''' apiVersion: v1 kind: Pod metadata: name: jenkins-slave spec: containers:
环境准备: 准备K8S、Ingress和PV自动供给(NFS), 部署harbor:https://github.com/goharbor/harbor/releases 构建jenkins-slave 镜像:https://github.com/jenkinsci/docker-jnlp-slave 将构建好的jenkins-slave镜像推送至harbor仓库 在kubernetes中部署jenkins
kubernetes', containers: [ containerTemplate( name: 'jnlp', image: 'guoxudongdocker/jenkins-slave jenkins-slave 需要 Java 环境运行,所以要将宿主机的 jdk 挂载到 jenkins-slave 中。 同样的,宿主机中需要事先安装 docker。
]# ls Dockerfile helm jenkins-slave kubectl settings.xml slave.jar 这个jenkins-slave是一个脚本主要来启动这个slave.jar /usr/bin/jenkins-slave COPY settings.xml /etc/maven/settings.xml RUN chmod +x /usr/bin/jenkins-slave tag [root@k8s-master jenkins-slave]# docker build . -t 192.168.30.27/library/jenkins-slave:jdk-1.8 [root@k8s-master jenkins-slave]# docker push 192.168.30.27 /library/jenkins-slave 查看仓库已经将镜像推送成功 现在就可以去测试能不能动态的去创建jenkins-slave,需要将pipeline这个脚本能去调用刚才我们配置的k8s的插件
但是制作的jenkins-slave容器里使用的账号是非root账号jenkins,导致对/var/run/docker.sock没有访问权限,报错如下: 通常,为了使非root用户能够执行docker
你问我为什么不直接做这一步:这个问题困扰我两天,我实在是懒得动了)新建一个自由风格任务图片图片简单执行一下就行了图片图片图片可以看到已经开始创建pod工作了,慢的那是自己下镜像呢图片这里两个容器的原因是jenkins-slave
在选择图像旁边的文本框中使用usman / jenkins-slave作为源图像。 然后单击高级选项。您将从Command选项卡开始。 该jenkins-slave容器将从Jenkins的主节点下载jar文件并运行Jenkins从节点。
jenkins/inbound-agent:4.3-4镜像 Step 5.下面设置 Pod Templates 此处需添加一个Pod 模板名称等相关信息 # 添加 Pod 模板 Pod 模板名称: jenkins-slave 命名空间:devops # 一定不要写错误了否则不能创建Pod 标签列表: jenkins-slave # 后续Job可以指定该标签进行运行 # 添加容器列表 采用的是或者不加镜像容器信息最后完满解决; Step 6.创建一个Job Pipeline 验证测试环境; // # scripted Pipeline def podTemplates = 'jenkins-slave ', label: 'jenkins-slave', cloud: 'kubernetes',containers: [ containerTemplate(name: 'maven', image ', namespace='devops', label='jenkins-slave', serviceAccount='jenkins-sa', volumes=[HostPathVolume [mountPath
containerTemplate( name: 'jnlp', image: 'xx-vpc.cn-xx.aliyuncs.com/keking/jenkins-slave
https://plugins.jenkins.io/ssh-slaves 版权声明:如无特殊说明,文章均为本站原创,转载请注明出处 本文链接:https://tendcode.com/article/jenkins-slave
containerTemplate( name: 'jnlp', image: 'xx-vpc.cn-xx.aliyuncs.com/keking/jenkins-slave
bb66fdd1c5a4c247b016e0ab88a54fdd" https://upload.pgyer.com/apiv1/app/upload 使用Jenkins打包 Jenkins部署在Kubernetes中,打包安卓包可以直接使用jenkins-slave
jenkins-master Jenkins Server 1 [OK] rancher/jenkins-slave
环境的工具,所以在安装 Android-SDK 之前,需要先安装 Java 环境,这个不在本篇文章的说明范围内,如果不会安装的人可以参考我之前的文章 https://tendcode.com/article/jenkins-slave