使用内部部署TFS 2018.寻找建议并使用以下结构将多个租户部署到IIS的建议。我们正在使用GIT进行源代码控制。
每个租户都是一个定制的克隆' .Net Core 2.0网站。它通过程序集共享一些基本功能,但提供每个租户自定义。 每个租户都有自己的Visual Studio 2017 sln和csproj文件。目前,该解决方案直接引用了共享程序集(因为我们尚未使用nuget作为共享程序集)。
结构是:
import React from 'react'
export default class Pagination extends React.Component {
constructor() {
super();
const peoples =[{id:0, name:"a"},
{id:1, name:"b"},
{id:2, name:"c"},
{id:3, name:"d"},
{id:4, name:"e"},
{id:5, name:"f"},
{id:6, name:"gg"},
{id:7, name:"ff"},
{id:8, name:"fg"},
{id:9, name:"de"},
{id:10, name:"gf"},
{id:11, name:"gh"}];
this.state = {
elementsPerPage:3,
currentPage:0,
peoples,
input: "",
filtered: peoples,
};
this.nextPage = this.nextPage.bind(this);
this.previousPage = this.previousPage.bind(this);
this.filterNames = this.filterNames.bind(this);
this.getValueInput = this.getValueInput.bind(this);
}
getValueInput (value) {
this.setState({ input: value.target.value });
}
handledelTodoItem=(v)=>{
console.log(v);
let { filtered } = this.state; // changed const to let
// removed the return statement
// the code here was wrong. The function below will delete the element with The
// id that was passed to it from the array filtered.
// then the state is changed to the new array.
filtered.splice(filtered.map(e => e.id).indexOf(v.id),1)
this.setState({
filtered:filtered
})
}
filterNames (){
const {peoples} = this.state;
this.setState({
filtered: peoples.filter(item => item.name.includes(this.state.input)),
currentPage:0})
}
elementsOnScreen() {
const {elementsPerPage, currentPage, filtered} = this.state;
return filtered
.map((item) => <li key={item.id}>{item.name}</li>)
.slice(currentPage*elementsPerPage, currentPage*elementsPerPage + elementsPerPage);
}
nextPage() {
console.log(this.state.filtered)
const {elementsPerPage, currentPage, filtered} = this.state;
if ((currentPage+1) * elementsPerPage < filtered.length){
this.setState({ currentPage: this.state.currentPage + 1 });
}
}
previousPage () {
const { currentPage } = this.state;
if(currentPage - 1 >= 0){
this.setState({ currentPage: this.state.currentPage - 1 });
}
}
render() {
console.log(this.state);
let { filtered } = this.state;
return (
<div>
<input type="text" onChange={ this.getValueInput }></input>
<button className='search' onClick={this.filterNames}> Search </button>
<button onClick={this.previousPage}> Previous </button>
<button onClick={this.nextPage}> Next </button>
<h3>Current Page: {this.state.currentPage}</h3>
<ul>Names: {this.elementsOnScreen()}</ul>
{filtered.map((v) => {
return <div key={v.id}><h1 className="font" ><button className="allbutton" onClick={this.handledelTodoItem.bind(this, v)}>DelTodoItem</button>{v.name}</h1></div>
})}
</div>
);
}
}
我感兴趣的是如何部署(通过持续部署)1)在项目级别进行更改的租户,以及2)使用已更改的共享程序集的租户的建议。
我们有可能让我们的租户变得非常大,所以我们不希望在每个版本上部署所有租户。
有没有办法过滤,所以我们只部署有变化的租户?
由于
答案 0 :(得分:0)
一种选择是为每个租户使用单独的环境,并添加批准以部署到环境中。
其他选项可以有一个环境和多个阶段,每个租户一个。我更喜欢第一个。
另一个可能是拥有一个文件并创建一个powershell脚本来为每个租户创建一个循环并进行部署。这个实现起来比较复杂。