我已经与Jenkins合作了一段时间,并且仍在项目的多个环境中使用它
通常,我正在从事的项目由三个主要环境“生产”,“暂存”和“开发”组成,分别引用git分支“ master”,“ staging”和“ dev”
全部部署到同一主机上,并在我用git clone初始化的单个目录中
对于Jenkins,我通常针对针对特定分支的每种环境使用自由样式项目。对于每种环境,我还有不同的部署脚本,它们可以通过ssh进行部署
这是部署脚本的样子
#!/bin/sh
ssh root@my-server<<<EOF
cd /usr/src/app
docker-compose down
git pull
docker-compose up -d --build
EOF
从上面的脚本中,您可以看到问题是远程主机上的分支从未更改,因为尽管Jenkins在我推送的分支中检测到更改,但我最初并未添加“ git checkout”。
例如,当我进行“ develop”开发时,Jenkins成功检测到了更改并进行了构建,因为我有专门的分支工作
使用这种方法,如果将远程主机上的分支设置为“ develop”以外的分支,则当詹金斯作业ssh到远程主机进行部署时,就会出现问题。大师,代码永远不会更新,并且部署过程会由现有代码触发。
但是,一旦我将部署脚本更新为此
#!/bin/sh
ssh root@my-server<<<EOF
cd /usr/src/app
docker-compose down
git checkout develop <=== Added
git pull
docker-compose up -d --build
EOF
代码已签出,一切正常。
我想知道我是否做对了。我的意思是在构建Docker映像之前,在相同的主机和文件夹中建立一个项目,并使用git checkout将代码更新为所需的分支
或者我应该为每个环境设置单独的文件夹,并通过ssh执行“ git pull”,而不用“ git checkout”切换分支
还是我应该使用Jenkinsfile来利用Jenkins管道?