测试对Jenkins Pipeline共享库的修改,无需提交

时间:2017-02-20 20:48:39

标签: shared-libraries jenkins-pipeline

方案: 我在一个项目中有一个JenkinsFile,它使用public class ToDoFragment extends Fragment { public boolean title_bar_down = true; GestureDetectorCompat detector; ArrayList<String> user_list; View rootView; @Nullable @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { rootView = inflater.inflate(R.layout.to_do_list_fragment, container, false); detector = new GestureDetectorCompat(getActivity(), new ToDoFragment.MyGestureDetector()); //restoring savedInstanceState user_list = new ArrayList<>(); if (savedInstanceState != null) { user_list = savedInstanceState.getStringArrayList("user_list"); if (user_list != null) { int count = user_list.size(); for (int i = 0; i < count; i++) { createLayout(user_list.get(i)); } } } return inflater.inflate(R.layout.to_do_list_fragment, container, false); } @Override public void onViewCreated(View view, @Nullable Bundle savedInstanceState) { super.onViewCreated(view, savedInstanceState); //Allow title to be changed after long click final EditText title = (EditText) rootView.findViewById(R.id.title_bar); title.setOnLongClickListener(new View.OnLongClickListener() { @Override public boolean onLongClick(View view) { title.setFocusable(true); title.requestFocusFromTouch(); InputMethodManager inp = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); inp.showSoftInput(title, InputMethodManager.SHOW_IMPLICIT); return true; } }); title.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View view, boolean b) { if (!b) { title.setFocusable(false); } } }); } @Override public boolean dispatchTouchEvent(MotionEvent ev) { boolean handled = super.dispatchTouchEvent(ev); handled = detector.onTouchEvent(ev); return handled; } @Override public boolean onTouchEvent(MotionEvent event) { this.detector.onTouchEvent(event); return super.onTouchEvent(event); } public void onAdd(View view) { AutoCompleteTextView editTextView = (AutoCompleteTextView) rootView.findViewById(R.id.getTextView); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) { if (!Objects.equals(String.valueOf(editTextView.getText()), "")) { String text = String.valueOf(editTextView.getText()); editTextView.setText(""); createLayout(text); user_list.add(text); //Change title to first added item EditText edit = (EditText) rootView.findViewById(R.id.title_bar); if (String.valueOf(edit.getText()).equals("Title")) { edit.setText(text); } } } } ///////////////////GESTURE DETECTION//////////////////// private class MyGestureDetector extends GestureDetector.SimpleOnGestureListener { @Override public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) { final EditText title = (EditText) rootView.findViewById(R.id.title_bar); if (title_bar_down && velocityY < -7000) { title.animate().translationY(title.getHeight() * (-1)).setDuration(195).start(); title_bar_down = false; } else if (!title_bar_down && velocityY > 7000) { title.animate().translationY(0).setDuration(225).start(); title_bar_down = true; } return super.onFling(e1, e2, velocityX, velocityY); } } } 语法引用共享管道库中的代码。我想测试我的库函数的更改,而不需要执行我的库repo的提交。

我意识到我可以在include语句中定位库的特定版本或分支。我也意识到我可以修改我的JenkinsFile中的脚本而不需要使用&#34; Replay&#34; Jenkins UI中的功能。如何测试对共享库代码的修改,而无需提交我正在测试的分支?现在,我们必须通过每次调整我们的库代码来执行提交,并且我们不希望有超级总提交历史记录。换句话说,我们只想提交我们的库仓库以获取我们知道正在运行的代码。

2 个答案:

答案 0 :(得分:3)

对于我的用例,我想测试在不同分支上创建的库变量的更改。

由于重播将使用已设置的重放,您需要一种方法来清除它们,以确认它们已正确加载。

我还没有检查,如果有一个&#34;清洁剂&#34;这样做的方式。这将是下一步。

这是我的解决方法:

  1. 在Mainscript(Jenkinsfile)上输入重播并评论@Library(&#39; libname&#39;)

    //@Library('libname')
    
  2. 运行构建。这将按预期失败并清除以前的重播变量。

  3. 再次输入重播,取消注释并调整库测试分支

    @Library('libname@test-branch')
    
  4. 构建应该成功运行,重播变量应该反映变化。

答案 1 :(得分:2)

原来我是盲人,或者Jenkins Pipeline现在支持在使用“重播”功能时编辑库代码。每当您向库中添加新文件以使其显示在重放屏幕上时,您都必须执行提交。一旦它在那里,您可以编辑它,而无需每次都提交。一旦你满意它正在使用重播,那么你可以提交并推送。