我想使用Gitlab CI / CD进行部署。相同的代码库用于部署到不同的环境,需要 statefile (环境状态)进行部署,需要在部署后进行更新,并在部署之前获取。因为它是一个重要的信息,我希望它是一个构建工件。
考虑我的部署管道和不同的工作deploy-env1
和deploy-env2
。是否可以以他们
state.dat
添加为构建工件(使用artifacts
选项轻松实现)由于我似乎无法将作业配置为依赖,您知道是否有办法实现这一目标?
答案 0 :(得分:2)
没有实现的功能来处理这个问题。
但是有一个可能的解决方法,我还没有尝试过,还有第三方解决方案。
解决方法: 您可以自己构建一个脚本,使用Gitlab Jobs API下载分支的最新工件。 Example in the Gitlab docs
另一种解决方法: 除了使用API下载之外,您还可以使用工件和cache objects
的组合干净的解决方案: 将设置一个Gitlab不提供的工件服务。您可以在那里部署文件,然后再从同一服务中检索。此类计划为Artifactory和Nexus
答案 1 :(得分:2)
您应该考虑使用依赖项和工件:https://docs.gitlab.com/ee/ci/yaml/#dependencies
def build_response(message):
return {
"dialogAction":{
"type":"Close",
"fulfillmentState":"Fulfilled",
"message":{
"contentType":"PlainText",
"content":message
}
}
}
def elicit_slot(intent_name, slots, slot_to_elicit, message):
return {
'dialogAction': {
'type': 'ElicitSlot',
'intentName': intent_name,
'slots': slots,
'slotToElicit': slot_to_elicit,
'message': message
}
}
def delegate(session_attributes, slots):
return {
'sessionAttributes': session_attributes,
'dialogAction': {
'type': 'Delegate',
'slots': slots
}
}
def perform_action(intent_request):
source = intent_request['invocationSource'] # DialogCodeHook or FulfillmentCodeHook
slots = intent_request['currentIntent']['slots'] # your slots city and country
if source == 'DialogCodeHook':
# Perform basic validation on the supplied input slots.
if slots['city'] is None: # or any other validation that you want to perform
return elicit_slot(
intent_request['currentIntent']['name'], # current intent name
slots, # current intent slots
'city', # slot name
'Please enter city name' # prompt the user to enter city name
)
if slots['country'] is None:
return elicit_slot(
intent_request['currentIntent']['name'], # current intent name
slots, # current intent slots
'country', # slot name
'Please enter country name' # prompt the user to enter country name
)
# delegate means all slot validation are done, we can move to Fulfillment
return delegate(output_session_attributes, slots)
if source == 'FulfillmentCodeHook':
result = your_api_call(slots['city'], slots['country'])
return build_response(result) # display the response back to user
def dispatch(intent_request):
intent_name = intent_request['currentIntent']['name']
# Dispatch to your bot's intent handlers
if intent_name == 'GetWeather':
return perform_action(intent_request)
raise Exception('Intent with name ' + intent_name + ' not supported')
def lambda_handler(event, context):
logger.debug(event)
return dispatch(event)
答案 2 :(得分:1)
您可以直接通过URL
下载,而不是使用作业api