使用jenkins和docker部署到服务器

使用jenkins和docker部署到服务器,docker,jenkins,jenkins-pipeline,dockerfile,Docker,Jenkins,Jenkins Pipeline,Dockerfile,嘿,我目前正在学习詹金斯的CI和CD管道 Jenkins成功地部署了我的express js 在我的服务器上的本地计算机上 它是为服务器和我的环境是炫耀我的公共存储库 我在这里试图了解更多如何在我的詹金斯身上隐藏那个环境?那个使用变量 这是否可能使用Dockerfile上的变量来隐藏我的环境 在我的詹金斯管道上 我在docker run-p-e myEnV=key上运行我的ENV 我确实喜欢隐藏我的ENV,这样人们就不知道我的Jenkins文件和Dockerfile中的密钥 我在jenkins中

嘿,我目前正在学习詹金斯的CI和CD管道 Jenkins成功地部署了我的express js 在我的服务器上的本地计算机上 它是为服务器和我的环境是炫耀我的公共存储库 我在这里试图了解更多如何在我的詹金斯身上隐藏那个环境?那个使用变量 这是否可能使用Dockerfile上的变量来隐藏我的环境

在我的詹金斯管道上 我在docker run-p-e myEnV=key上运行我的ENV 我确实喜欢隐藏我的ENV,这样人们就不知道我的Jenkins文件和Dockerfile中的密钥 我在jenkins中使用多分支,因为我在jenkins中使用了hackernoon上关于deploy react和node js应用程序的文章

不管怎样,将我们的容器或图像推送到Docker Hub有什么好处? 如果我们把它推到那里,如果我们想把我们的服务器移到另一台服务器上
我们只需要将我们的repo Docker Hub拉到新服务器上使用,因为我们每次构建的内容都会推到我们的repo Docker Hub上,对吗?

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

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

${env.DEVOPS\u KEY}
所以您的Docker run命令将是

docker run -p -e myEnV=${env.DEVOPS_KEY}
但请确保已在Jenkins服务器中设置了
DEVOPS\u KEY

使用envirect非常简单

您还可以从文件中进行注入

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

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


永远不要在Docker映像中推送或保留敏感数据。

使用Docker Hub或任何类型的注册表,如Sonatype Nexus、registry、JFrog Artifactory,可以帮助您保留带有标签的映像,并与任何人共享。这也意味着图像在那里是安全的。如果您的本地环境发生故障,图像将保留在那里。它也有助于版本控制。如果您使用多分支管道,这意味着您可能会使用不同的标记生成不同的图像

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

目前,我正在为Jenkins Master和Slave运行不同的服务器。主实例不运行任何作业,只有主实例运行。这让詹金斯一直活着。如果从属服务器宕机,您可以简单地设置另一个从属服务器

对于部署,我使用Ansible,它可以同时将同一docker映像部署到多个服务器。它很容易使用,在我看来也很安全

对于密钥、密码、api密钥等敏感数据,使用
-e
标志是正确的。您还可以使用
--env file
。这样,您可以将其保留在docker映像之外,并保留该文件。对于密码,我更喜欢使用shell脚本在环境文件中生成密码


如果您计划按原样使用环境,则可以将要设置为环境变量的值安全地保存在Jenkins中。然后,您可以将该值作为变量获取。您可以在

中看到它。对于EnvInject,我们只是在机器上创建一个文件夹?用那把钥匙?比如说我们将文件夹路径设置为~/Documents/myapp/密钥,你是说?这是自由式作业还是多分支作业可以做到的?是的,一种方式放入文件,一种方式设置屏幕上的作业相似shots@popes这有帮助吗?我有,无论如何,我们如何部署到jenkins中的多服务器,比方说我想将主分支部署到本地服务器,并将开发分支部署到另一个服务器?在一个作业中可以这样做吗?是的,当作业从bitbucket或github触发时,检查分支,如果分支是
开发
,则在开发时部署,或者如果是master,则部署prod。我在docker compose上运行Jenkins,我们需要在服务器上配置master和slave Jenkins吗?或者当我们在我的docker compose上使用Jenkins时,它会自动配置??