diff --git a/app/controllers/api/v1/projects/pipelines_controller.rb b/app/controllers/api/v1/projects/pipelines_controller.rb index ba1bafc4e..39f20a009 100644 --- a/app/controllers/api/v1/projects/pipelines_controller.rb +++ b/app/controllers/api/v1/projects/pipelines_controller.rb @@ -22,6 +22,23 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController render_ok({ id: @pipeline.id }) end + def build_yaml + # pipeline = params[:pipeline] + # @name = params[:name] + # params_nodes = JSON.parse(pipeline)["nodes"].select { |node| !["on-push", "on-schedule"].include?(node["component_name"]) } + # on_nodes = JSON.parse(pipeline)["nodes"].select { |node| ["on-push", "on-schedule"].include?(node["component_name"]) } + # @on_nodes = build_nodes(on_nodes) + # @steps_nodes = build_nodes(params_nodes) + # yaml = ERB.new(File.read(File.join(Rails.root, "app/views/api/v1/projects/pipelines", "build_pipeline.yaml.erb"))).result(binding) + # # 删除空行内容 + # @pipeline_yaml = yaml.gsub(/^\s*\n/, "") + @pipeline_yaml = build_test_yaml + render plain: @pipeline_yaml + # respond_to do |format| + # format.text { render yaml: @pipeline_yaml } + # end + end + def update @pipeline = Action::Pipeline.find(params[:id]) @pipeline.update!(pipeline_name: params[:pipeline_name]) @@ -42,7 +59,7 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController def show @pipeline = Action::Pipeline.find_by(id: params[:id]) - @pipeline = Action::Pipeline.new(id: 0, pipeline_name: "test-ss", yaml: build_yaml) if @pipeline.blank? + @pipeline = Action::Pipeline.new(id: 0, pipeline_name: "test-ss", yaml: build_test_yaml) if @pipeline.blank? end def build_pipeline_yaml(pipeline) @@ -61,7 +78,7 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController @pipeline_yaml end - def build_yaml + def build_test_yaml @name = "love me" params_nodes = JSON.parse(demo.to_json)["nodes"].select { |node| !["on-push", "on-schedule"].include?(node["component_name"]) } on_nodes = JSON.parse(demo.to_json)["nodes"].select { |node| ["on-push", "on-schedule"].include?(node["component_name"]) } @@ -71,16 +88,23 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController # Rails.logger.info "input_node=====0===#{input_node["component_name"]}======#{input_node["in_parameters"]}" node = Action::Node.find_by(name: input_node["component_name"]) node.cust_name = input_node["component_label"] if input_node["component_label"].present? + run_values = {} input_values = {} if input_node["in_parameters"].present? # Rails.logger.info "@in_parameters=====11===#{input_node["component_name"]}======#{input_node["in_parameters"]}" input_node["in_parameters"].each_key do |input_key| # Rails.logger.info "@in_parameters.input_key===#{input_key}" # Rails.logger.info "@in_parameters.input_value===#{input_node["in_parameters"][input_key]["value"]}" - input_values = input_values.merge({ "#{input_key.gsub("--", "")}": "#{input_node["in_parameters"][input_key]["value"]}" }) + if input_key.to_s.gsub("--", "") == "run" + run_values = run_values.merge({ "#{input_key.gsub("--", "")}": "#{input_node["in_parameters"][input_key]["value"]}" }) + else + input_values = input_values.merge({ "#{input_key.gsub("--", "")}": "#{input_node["in_parameters"][input_key]["value"]}" }) + end end + node.run_values = run_values node.input_values = input_values - # Rails.logger.info "@input_values node===#{node.input_values.to_json}" + # Rails.logger.info "@input_values run_values===#{node.run_values.to_json}" + # Rails.logger.info "@input_values input_values===#{node.input_values.to_json}" end @steps_nodes.push(node) end @@ -124,14 +148,20 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController params_nodes.each do |input_node| node = Action::Node.find_by(name: input_node["component_name"]) node.cust_name = input_node["component_label"] if input_node["component_label"].present? + run_values = {} input_values = {} if input_node["in_parameters"].present? # Rails.logger.info "@in_parameters=====11===#{input_node["component_name"]}======#{input_node["in_parameters"]}" input_node["in_parameters"].each_key do |input_key| # Rails.logger.info "@in_parameters.input_key===#{input_key}" # Rails.logger.info "@in_parameters.input_value===#{input_node["in_parameters"][input_key]["value"]}" - input_values = input_values.merge({ "#{input_key.gsub("--", "")}": "#{input_node["in_parameters"][input_key]["value"]}" }) + if input_key.to_s.gsub("--", "") == "run" + run_values = run_values.merge({ "#{input_key.gsub("--", "")}": "#{input_node["in_parameters"][input_key]["value"]}" }) + else + input_values = input_values.merge({ "#{input_key.gsub("--", "")}": "#{input_node["in_parameters"][input_key]["value"]}" }) + end end + node.run_values = run_values # Rails.logger.info "@input_values node1===#{input_values}" node.input_values = input_values # Rails.logger.info "@input_values node===#{node.input_values.to_json}" @@ -365,8 +395,8 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController { "id": "git-clone-245734ab", "category_id": 1, - "component_name": "scp", - "component_label": "scp", + "component_name": "shell", + "component_label": "执行shell命令", "working_directory": "", "command": "", "in_parameters": { @@ -381,7 +411,30 @@ class Api::V1::Projects::PipelinesController < Api::V1::BaseController "describe": "代码仓库地址", "editable": 1, "condition": "", - "value": "service nginx restart" + "value": "echo env" + } + } + }, + { + "id": "git-clone-245734ab", + "category_id": 1, + "component_name": "scp", + "component_label": "scp", + "working_directory": "", + "command": "", + "in_parameters": { + "--host": { + "type": "str", + "item_type": "", + "label": "代码仓库地址", + "require": 1, + "choice": [], + "default": "", + "placeholder": "私有仓库填写ssh地址,公有仓库填写https git地址", + "describe": "代码仓库地址", + "editable": 1, + "condition": "", + "value": "192.168.1.114" } } } diff --git a/app/models/action/node.rb b/app/models/action/node.rb index 601749047..07d3be134 100644 --- a/app/models/action/node.rb +++ b/app/models/action/node.rb @@ -34,7 +34,7 @@ class Action::Node < ApplicationRecord belongs_to :user, optional: true - attr_accessor :cust_name, :input_values + attr_accessor :cust_name, :run_values, :input_values def content_yaml diff --git a/app/views/api/v1/projects/pipelines/build_pipeline.yaml.erb b/app/views/api/v1/projects/pipelines/build_pipeline.yaml.erb index be8a7106e..f443a8f6f 100644 --- a/app/views/api/v1/projects/pipelines/build_pipeline.yaml.erb +++ b/app/views/api/v1/projects/pipelines/build_pipeline.yaml.erb @@ -45,11 +45,18 @@ jobs: steps: <%@steps_nodes.each do |node| %> - name: <%=node.cust_name || node.name %> + <% if node.name !="shell" %> uses: <%=node.full_name %> + <% end %> <%if node.input_values.present? %> with: <% node.input_values.each_key do |key| %> - <%=key %>: <%=node.input_values[key] %> + <%=key %>: '<%=node.input_values[key] %>' + <%end %> + <%end %> + <%if node.run_values.present? %> + <% node.run_values.each_key do |key| %> + <%=key %>: '<%=node.run_values[key] %>' <%end %> <%end %> <% end %> diff --git a/config/routes/api.rb b/config/routes/api.rb index 4db29cf06..bb093a23e 100644 --- a/config/routes/api.rb +++ b/config/routes/api.rb @@ -129,7 +129,9 @@ defaults format: :json do end end end - resources :pipelines + resources :pipelines do + get :build_yaml, on: :collection + end resources :pulls, module: 'pulls' do resources :versions, only: [:index] do member do