使用jenkins和docker部署到服务器

时间:2019-09-03 17:30:28

标签: docker jenkins jenkins-pipeline dockerfile

嘿,我目前正在学习有关CI和CD的Jenkins管道 我成功部署了Jenkins的express js 在本地机器上我的服务器 它是用于服务器的,而我的ENV已在我的公共存储库中炫耀 我在这里试图了解更多如何将ENV隐藏在我的詹金斯身上?那使用变量 并且可以在Dockerfile上使用变量来隐藏我的ENV吗?

在我的詹金斯管道上 我在docker run -p -e myEnV = key上运行我的ENV 我很喜欢隐藏我的ENV,所以人们不知道我在Jenkinsfile和Dockerfile上的密钥 我在jenkins中使用多个分支,因为我按照hackernoon上的文章使用Jenkins部署react和node js应用程序

无论如何,将我们的容器或映像推送到Docker Hub有什么优势? 如果我们将其推送到该位置,并且想要将服务器移至另一台服务器 我们只需要拉回购Docker Hub即可将其用于新服务器,因为每次将其推送到我们的回购Docker Hub时我们已经构建了,对吗?

2 个答案:

答案 0 :(得分:0)

对于第一个问题,您应该使用EnvInject Plugin。或者,如果您正在管道中运行Docker,请在Jenkins中设置Environment变量,然后在Docker run命令中访问这些环境变量。

在管道中,您可以像这样访问环境变量

${env.DEVOPS_KEY} 因此,您的Docker run命令将为

docker run -p -e myEnV=${env.DEVOPS_KEY}

但是请确保已在Jenkins服务器中设置DEVOPS_KEY

使用EnvInject非常简单。

enter image description here

您也可以从文件中注入。

enter image description here

对于第二个问题,是的,只是从docker-hub提取图像并使用它。

您团队中的任何人都可以拉动并运行,因此只有Jenkins服务器可以构建和推送图像。这样可以为其他人节省时间,并且该图像将是最新的,并且可以远程使用。

切勿在Docker映像中推送或保留敏感数据。

答案 1 :(得分:0)

使用Docker Hub或诸如Sonatype Nexus,Registry,JFrog Artifactory之类的任何注册表,都可以帮助您保留图像及其标签并与任何人共享。这也意味着图像在那里很安全。如果您的本地环境出现故障,图像将保留在那里。它还有助于版本控制。如果使用多分支管道,则意味着您可能会生成带有不同标签的不同图像。

运行Jenkins,完成工作,进行部署不是一个好习惯。根据我以前的工作经验,最好的例子是:服务器在一段时间后开始膨胀,Jenkins在最需要的时候无法工作,已部署的应用程序无法工作,因为Jenkins的工作太多,占用所有资源。

当前,我正在为Jenkins Master和Slave运行不同的服务器。主实例不运行任何作业,只有主实例可以运行。这使詹金斯一直活着。如果从站出现故障,则只需设置另一个从站即可。

对于部署,我使用的是Ansible,它可以将同一docker映像同时部署到多个服务器。它易于使用,我认为也很安全。

对于诸如密钥,密码,API密钥之类的敏感数据,使用-e标志是正确的。您也可以使用--env-file。这样,您可以将其保留在docker image之外并保留文件。对于密码,我更喜欢使用一个Shell脚本在环境文件中生成密码。

如果您打算按原样使用环境,则可以将要设置为环境变量的值安全地保留在Jenkins中。那么您可以将该值作为变量获取。您可以在Jenkins website

中看到它