针对Kubernetes和Docker Workflow Plugin的Jenkins配置

  • 时间:
  • 浏览:16
  • 来源:uu快3app赚钱_uu快3大小计划注册

为了生成密钥和master key,并用让我们都都来加密密码,我能 使用像下面那我的脚本:

#!/bin/bash
IN=`echo $1 | base64`
SUFFIX="::::MAGIC::::"
MASTER_KEY=`cat /var/jenkins_home/secrets/master.key`
HASHED_MASTER_KEY=`echo -n $MASTER_KEY | sha256sum | cut -d " " -f 1`
HASHED_MASTER_KEY_16=${HASHED_MASTER_KEY:0:16}
openssl enc -d -aes-128-ecb -in /var/jenkins_home/secrets/hudson.util.Secret -K $HASHED_MASTER_KEY -out /tmp/hudson.key
HUDSON_KEY=`cat /tmp/hudson.key`
HUDSON_KEY_TRIMMED=${HUDSON_KEY:0:-16}
HUDSON_KEY_16=${HUDSON_KEY_TRIMMED:0:16}
echo $HUDSON_KEY_16 > /tmp/hudson16.key
echo "$IN$SUFFIX" > /tmp/jenkins.password
openssl enc -aes-128-ecb -in /tmp/hudson16.key -out /tmp/jenkins.password.enc -K $IN 

我随便说说我想要 分享出来。我还我想要 尝试的太久太久东西比如:

  • 对slaves使用secrets认证
  • 去除 clutter
  • 等等
欢迎在评论中回复您的经验、建议或是指正。若果这篇文章对您有用。原文链接:Jenkins setups for Kubernetes and Docker Workflow(翻译:李加庆)

(2)通过指定好几个 多挂载到Jenkins POD上的hostDir卷

{
"volumeMounts": [
{
"name": "docker-socket",
"mountPath": "/var/run/docker.sock",
"readOnly": false
}
],


"volumes": [
{
"name": "docker-socket",
"hostPath": {
  "path": "/var/run/docker.sock"
}
}
]
} 

上边的片段展示了如保使用好几个 多空的口令来生成用户名/密码证书以及SSH私钥。优点:

  1. 足够简单
缺点:
  1. Docker Plugin现阶段还未发展到太久太久地步
  2. 直接连接到Docker daemon
  3. 需要访问主机的特定路径(参见Docker Workflow Plugin)
即使让我们都都抛开与Docker Plugin相关的现象不谈,我仍然对于不与Docker daemon通信只是我基于Kubernetes运行的依据非常感兴趣。

Docker Plugin使用D.I.N.D管理Slaves

对于让我们都都而言, 为了防止落后于Kubernetes。

  1. 80%隔离
  2. 太久访问组织组织结构Docker的特定路径
缺点:
  1. 复杂化性
  2. 需要特权模式
  3. Docker 镜像都都能不能了被缓存
D.I.N.D.已经 说还没未出現的依据仍需要给出好几个 多用于缩放的防止方案。到目前为止,Docke Plugin似乎并时会好几个 多理想的防止方案。此外,在Kubernetes中等同于Docker Plugin的插件(Kubernetes Plugin)似乎需要多太久太久的关注。太久太久 ,现在让让我们都都来谈谈Swarm。使用Swarm似乎是好几个 多不错的选择,已经 让我们都都使用的是Kubernetes,它都都能不能非常容易的开启N多个运行Swarm客户端的容器。让我们都都都都能不能使用包含大约容器的replication controller。优点:
  1. 迅速
  2. 可扩展性
  3. 健壮性
缺点:
  1. Slaves需要在组织组织结构管理
  2. 需要访问主机的特定路径(参见Docker Workflow Plugin)

使用Swarm客户端和D.I.N.D

在太久太久使用状况下,关于D.I.N.D的主要现象是,事实上,在Docker中的Docker,上边的镜像无法被缓存。都都能不能去尝试做好几个 多分享Docker Registry的实验,不过我不选择有没人 已经 实现。

太久太久插件很不错已经 我能 感觉不如保不可靠,随便说说它都都能不能创建Docker容器,已经 有已经 它却无法连接到slave已经 会重试(往往会重试两三次),它会以类式的依据,使用太久太久 不同的身份验证依据(密码、密钥验证等)尝试连接太久太久 不同的slave镜像。

Swarm

生成slaves的一种生活依据是使用插件。另外一种生活依据是“建立太久太久人的slaves”,这几乎只是我Swarm的思想所在。太久太久思想指的是Jenkins master来运行Swarm插件,用户负责启动Swarm客户端(它仅仅是个Java多多守护进程 )。

注意:你太久在Docker Workflow Plugin中使用Docker Plugin另外:Docker Workflow Plugin使用的是Docker二进制,这就原应着无论你在何处我想要 使用Docker Workflow插件,你都需要安装Docker客户端。差点忘了:构建的“执行器”和参与工作流的容器需要共享项目工作空间,这里我能 不赘述了。只需记住,在Docker主机(或是太久太久缺少共享文件系统的主机)中,通常需要访问Docker host上的特定路径。无法满足太久太久需求会原应太久太久“难以监测”的现象比如构建永久悬挂等。现在让我们都都已经 准备好了,让让我们都都来一探究竟哪些已经 的设置是哪些。

不涉及slaves

这是最简单的依据,它太久涉及Jenkins slaves,通过配置一系列固定的执行器,构建就都都能不能直接运行在master上。

太久太久 ,让我们都都都都能不能为每好几个 多让我们都都我想要 运行的构建增加Docker Plugin并用它生成好几个 多slave容器。这就原应着让我们都都需要好几个 多Docker容器,太久太久容器有权访问Docker二进制文件(需要docker workflow支持)已经 也都都能不能从master上挂载项目的工作空间。正如上文所述,master需要通过SSH连接到slave。为了使得连接成功,需要配置证书或是正确的SSH密钥。在太久太久种状况中,docker plugin的xml配置文件都需要更新以适用于Jenkins证书配置的编号(例子参见config.xml)。没人 ,确切的说,太久太久编号是哪些呢?Jenkins使用Credential Plugin来存储和检索证书。每一套证书时会唯一的编号,太久太久插件都都能不能根据太久太久编号找到一套适用的证书。考虑到安全因素,密码、口令等并时会以纯文本的依据存储,只是我通过SHA256加密后存储。用来加密的密钥同样也被加密以确保更加安全。关于太久太久主题的更多全部的资料,我能 在这篇优秀的文章“Credential storage in Jenkins”中找到。若果您注意的是,鉴于证书在Jenkins的存储依据,建立好几个 多在没人 人为干扰下都都能不能相互通信的master镜像和slave镜像是十分重要的。都都能不能尝试使用像那我的脚本:

#Generate master.key and secret
MAGIC="::::MAGIC::::"
mkdir -p /var/jenkins_home/secrets
openssl rand -hex 128 > /var/jenkins_home/secrets/master.key
openssl dgst -sha256 -binary /var/jenkins_home/secrets/master.key > /tmp/master.hashed
HEX_MASTER_KEY=`head -c 16 /tmp/master.hashed | xxd -l 16 -p`
openssl rand 259 > /tmp/base
echo $MAGIC >> /tmp/base
openssl enc -aes-128-ecb -in /tmp/base -K $HEX_MASTER_KEY -out /var/jenkins_home/secrets/hudson.util.Secret

已经 的状况数量有所增加,既都都能不能在Kubernetes master上直接使用DIND,也都都能不能结合Docker Plugin ,从而使得每好几个 多salve都有益于运行太久太久人的demon已经 实现80%隔离。无论哪种依据,构建过程中位于的事情与环境之外全部隔离,太久太久人面它随便说说需要使用特权模式,这已经 是好几个 多现象,过时会模式已经 无法在太久太久环境中使用(比如我上次检查时,它就无法在Google容器引擎中使用)。

注:通过在slave中托管docker daemon,让我们都都都都能不能从在组织组织结构docker中挂载卷的需求中解脱出来(请记住,都都能不能了执行多多守护进程 和工作流步骤中需要共享工作空间)。
优点:

太久太久人面,对于大多数太久太久依据,让我们都都需要使用hostPath挂载,在太久太久环境中这已经 无法奏效。防止上述现象的方案是将Swarm与D.I.N.D结合。保留Swarm客户端(而时会在每次构建已经 都消除它),那我能 防止了镜像缓存现象。另外,对于D.I.N.D,让我们都都只是我再需要通过Kubernetes来使用hostPath挂载。已经 ,对于让我们都都来说,这是个两全之计。优点:

  1. 迅速
  2. 可扩展性
  3. 健壮性
  4. 80%隔离
  5. 镜像都都能不能被缓存
缺点:
  1. Slave需要在组织组织结构管理

结语

我尝试了上述所有的设置,并把它作为我正在做的poc的一主次:"Jenkins for Docker Workflow on Kubernetes"。

为了概括一下在Docker镜像中你的构建的所有需求已经 我能 并不担心如保安装和配置它们,下面给出好几个 多Docker Workflow脚本的例子:

node('docker') {
docker.image('maven').inside {
  git 'https://github.com/fabric8io/example-camel-cdi'
  sh 'mvn clean install'
 }
} 

若要真正地加密密码,太久向任何人推荐太久太久做法,我展示上述脚本仅仅是为了强调太久太久加密是多么的复杂化。当然了,像那我的脚本也会充分利用Credential Plugin组织组织结构的太久太久细节已经 给人感觉很hack。我发现在配置证书时好几个 多更加优雅的依据是将下面的groovy脚本写进Jenkins中的init.groovy.d文件:

import jenkins.model.*
import com.cloudbees.plugins.credentials.*
import com.cloudbees.plugins.credentials.common.*
import com.cloudbees.plugins.credentials.domains.*
import com.cloudbees.plugins.credentials.impl.*
import com.cloudbees.jenkins.plugins.sshcredentials.impl.*
import hudson.plugins.sshslaves.*;

domain = Domain.global()
store = Jenkins.instance.getExtensionList('com.cloudbees.plugins.credentials.SystemCredentialsProvider')[0].getStore()

priveteKey = new BasicSSHUserPrivateKey(
CredentialsScope.GLOBAL,
"jenkins-slave-key",
"root",
new BasicSSHUserPrivateKey.UsersPrivateKeySource(),
"",
""
)

usernameAndPassword = new UsernamePasswordCredentialsImpl(
CredentialsScope.GLOBAL,
"jenkins-slave-password", "Jenkis Slave with Password Configuration",
"root",
"jenkins"
)

store.addCredentials(domain, priveteKey)
store.addCredentials(domain, usernameAndPassword) 

好几个 多像那我设置的实例都都能不能在这里找到。优点:

  1. 简单可行
  2. 插件数量大约
缺点:
  1. 不具规模性
  2. 直接连接了Docker Daemon
  3. 需要获取主机上的具体路径(参见Docker Workflow Plugin)

Docker Plugin管理Slaves

已经 显而易见的原应,先前的依据时会具规模性。已经 Docker和Kubernetes早已准备就绪,太久太久 将它们当做丰厚的资源来使用似乎是好几个 多非常好的主意。

已经 没人 slaves,太久太久 运行Jenkins的容器自身需要安装和配置Docker二进制文件来指向真正的Docker host。如保在Kubernetes中使用Docker Host?这里给出一种生活依据:

  1. 使用Kubernetes API
  2. 通过挂载 /var/run/docker.sock
我能 (1)通过使用好几个 多简单的shell脚本,如下:
#!/bin/bash
KUBERNETES=https://$KUBERNETES_SERVICE_HOST:$KUBERNETES_SERVICE_PORT
TOKEN=`cat /var/run/secrets/kubernetes.io/serviceaccount/token`
POD=`hostname`
curl -s -k -H "Authorization: Bearer $TOKEN" $KUBERNETES/api/v1/namespaces/$KUBERNETES_NAMESPACE/pods/$POD | grep -i hostIp | cut -d "\"" -f 4 

客户端连接到master机器已经 让master知道客户端已经 启动已经 运行。已经 master就有益于在客户端结束英语 英语 构建。

Docker Workflow插件

太久太久插件允许你在工作流脚本中使用Docker镜像和容器,已经 换句话说,此插件允许你在Docker容器中执行工作流步骤已经 都都能不能从工作流脚本中生成Docker。

最近我结束英语 英语 尝试在Kubernetes中使用Jenkins,随便说说我也是看了看如保都都能不能更好地运行 Docker Workflow插件我的思路是有好几个 多都都能不能运行Jenkins的Pod,并用它来运行通过Docker Workflow插件定义的构建。经过少量阅读和多次反复的实验,我发现有太久太久 种依据来实现太久太久想法,当然哪些依据各有不同的利弊。这篇文章讨论了所有可用的依据,具体来讲:

  1. 直接在Master上运行构建
  2. 使用Docker插件启动Slaves
  3. 使用Docker插件以及Docker in Docker
  4. 使用Swarm客户端
  5. 使用Docker in Docker和Swarm
在我阐述所有已经 的配置已经 ,我随便说说先来描述一下所有的哪些插件是哪些会对让我们都都很有帮助。

Docker Plugin

好几个 多使用了DockerJenkins插件,用以创建和使用slaves,它使用HTTP协议来与Docker通信并生成新的容器。哪些容器只需支持Java已经 都都能不能运行SSHD,以便master都都能不能通过SSH连接到容器内并施展它的魔力。网络上有太久太久slave容器的镜像,在我重新连接时最流行的镜像是evarga jenkins slave

本文讲的是针对Kubernetes和Docker Workflow Plugin的Jenkins配置【编者语句】Jenkins作为一款开源的持续集成工具,在太久太久 平台上被使用,本文主要介绍了在Kubernetes和Docker Workflow Plugin中的太久太久配置,都都能不能帮助读者了解到其中的太久太久细节和依据。